{"version":3,"file":"js/application-c28f1980311622d28e41.js","mappings":"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","sources":["webpack://fab-manager//usr/src/app/app/frontend/images|sync|/^\\.\\/.*$/","webpack://fab-manager//usr/src/app/app/frontend/src/javascript/components|sync|/^.+\\.(","webpack://fab-manager//usr/src/app/app/frontend/src/javascript/controllers|sync|/.*/","webpack://fab-manager//usr/src/app/app/frontend/src/javascript/directives|sync|/.*/","webpack://fab-manager//usr/src/app/app/frontend/src/javascript/filters|sync|/.*/","webpack://fab-manager//usr/src/app/app/frontend/src/javascript/services|sync|/.*/","webpack://fab-manager//usr/src/app/app/frontend/src/javascript/typings|sync|/.*/","webpack://fab-manager//usr/src/app/app/frontend/templates|sync|/^\\.\\/.*$/","webpack://fab-manager/./app/frontend/src/javascript/api/auth-provider.ts","webpack://fab-manager/./app/frontend/src/javascript/api/authentication.ts","webpack://fab-manager/./app/frontend/src/javascript/api/cart.ts","webpack://fab-manager/./app/frontend/src/javascript/api/checkout.ts","webpack://fab-manager/./app/frontend/src/javascript/api/clients/api-client.ts","webpack://fab-manager/./app/frontend/src/javascript/api/custom-asset.ts","webpack://fab-manager/./app/frontend/src/javascript/api/group.ts","webpack://fab-manager/./app/frontend/src/javascript/api/local-payment.ts","webpack://fab-manager/./app/frontend/src/javascript/api/machine.ts","webpack://fab-manager/./app/frontend/src/javascript/api/member.ts","webpack://fab-manager/./app/frontend/src/javascript/api/order.ts","webpack://fab-manager/./app/frontend/src/javascript/api/payment-schedule.ts","webpack://fab-manager/./app/frontend/src/javascript/api/payzen.ts","webpack://fab-manager/./app/frontend/src/javascript/api/plan-category.ts","webpack://fab-manager/./app/frontend/src/javascript/api/plan.ts","webpack://fab-manager/./app/frontend/src/javascript/api/prepaid-pack.ts","webpack://fab-manager/./app/frontend/src/javascript/api/price.ts","webpack://fab-manager/./app/frontend/src/javascript/api/product-category.ts","webpack://fab-manager/./app/frontend/src/javascript/api/product.ts","webpack://fab-manager/./app/frontend/src/javascript/api/profile-custom-field.ts","webpack://fab-manager/./app/frontend/src/javascript/api/proof-of-identity-file.ts","webpack://fab-manager/./app/frontend/src/javascript/api/proof-of-identity-type.ts","webpack://fab-manager/./app/frontend/src/javascript/api/setting.ts","webpack://fab-manager/./app/frontend/src/javascript/api/stripe.ts","webpack://fab-manager/./app/frontend/src/javascript/api/subscription.ts","webpack://fab-manager/./app/frontend/src/javascript/api/wallet.ts","webpack://fab-manager/./app/frontend/src/javascript/app.js","webpack://fab-manager/./app/frontend/src/javascript/components/angular/switch.ts","webpack://fab-manager/./app/frontend/src/javascript/components/authentication-provider/boolean-mapping-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/authentication-provider/data-mapping-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/authentication-provider/database-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/authentication-provider/date-mapping-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/authentication-provider/integer-mapping-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/authentication-provider/oauth2-data-mapping-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/authentication-provider/oauth2-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/authentication-provider/openid-connect-data-mapping-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/api/clients/sso-client.ts","webpack://fab-manager/./app/frontend/src/javascript/api/external/sso.ts","webpack://fab-manager/./app/frontend/src/javascript/components/authentication-provider/openid-connect-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/authentication-provider/provider-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/authentication-provider/string-mapping-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/authentication-provider/type-mapping-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/base/accordion-item.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/base/error-boundary.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/base/fab-alert.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/base/fab-button.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/base/fab-input.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/base/fab-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/base/fab-output-copy.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/base/fab-pagination.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/base/fab-panel.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/base/fab-popover.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/base/fab-state-label.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/base/html-translate.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/base/labelled-input.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/base/loader.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/base/text-editor/iframe.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/cart/cart-button.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/cart/store-cart.tsx","webpack://fab-manager/./app/frontend/src/javascript/api/coupon.ts","webpack://fab-manager/./app/frontend/src/javascript/components/coupon/coupon-input.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/dashboard/orders/orders-dashboard.tsx","webpack://fab-manager/./app/frontend/src/javascript/api/credit.ts","webpack://fab-manager/./app/frontend/src/javascript/components/dashboard/reservations/credits-panel.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/dashboard/reservations/reservations-dashboard.tsx","webpack://fab-manager/./app/frontend/src/javascript/api/reservation.ts","webpack://fab-manager/./app/frontend/src/javascript/components/dashboard/reservations/reservations-panel.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/document-filters.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/events/event-card.tsx","webpack://fab-manager/./app/frontend/src/javascript/api/event-theme.ts","webpack://fab-manager/./app/frontend/src/javascript/components/events/event-themes.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/form/abstract-form-item.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/form/form-checklist.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/form/form-file-upload.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/form/form-image-upload.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/form/form-input.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/form/form-multi-file-upload.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/form/form-multi-image-upload.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/form/form-multi-select.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/form/form-rich-text.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/form/form-select.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/form/form-switch.tsx","webpack://fab-manager/./app/frontend/src/javascript/lib/deferred.ts","webpack://fab-manager/./app/frontend/src/javascript/components/form/unsaved-form-alert.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/group/change-group.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/machines/machine-card.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/machines/machine-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/machines/machines-filters.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/machines/machines-list.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/machines/pending-training-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/machines/required-training-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/machines/reserve-button.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment-schedule/payment-schedule-item-actions.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment-schedule/payment-schedule-summary.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment-schedule/payment-schedules-dashboard.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment-schedule/payment-schedules-list.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment-schedule/payment-schedules-table.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment-schedule/select-schedule.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment-schedule/update-payment-mean-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/abstract-payment-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/card-payment-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/local-payment/local-payment-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/local-payment/local-payment-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/payzen/payzen-card-update-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/payzen/payzen-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/payzen/payzen-keys-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/payzen/payzen-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/payzen/payzen-settings.tsx","webpack://fab-manager/./app/frontend/src/javascript/models/gateway.ts","webpack://fab-manager/./app/frontend/src/javascript/components/payment/select-gateway-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/stripe/payment-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/stripe/stripe-card-update-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/stripe/stripe-card-update.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/stripe/stripe-confirm-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/stripe/stripe-confirm.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/stripe/stripe-elements.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/api/clients/stripe-client.ts","webpack://fab-manager/./app/frontend/src/javascript/api/external/stripe.ts","webpack://fab-manager/./app/frontend/src/javascript/components/payment/stripe/stripe-keys-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/stripe/stripe-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/update-card-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/payment/wallet-info.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/plan-categories/delete-plan-category.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/plan-categories/manage-plan-category.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/plan-categories/plan-categories-list.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/plan-categories/plan-category-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/plans/plan-card.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/plans/plans-filter.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/plans/plans-list.tsx","webpack://fab-manager/./app/frontend/src/javascript/api/user-pack.ts","webpack://fab-manager/./app/frontend/src/javascript/components/prepaid-packs/packs-summary.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/prepaid-packs/propose-packs-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/pricing/editable-price.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/pricing/machines/configure-packs-button.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/pricing/machines/create-pack.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/pricing/machines/delete-pack.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/pricing/machines/edit-pack.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/pricing/machines/machines-pricing.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/pricing/machines/pack-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/pricing/spaces/configure-extended-prices-button.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/pricing/spaces/create-extended-price.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/pricing/spaces/delete-extended-price.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/pricing/spaces/edit-extended-price.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/pricing/spaces/extended-price-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/api/space.ts","webpack://fab-manager/./app/frontend/src/javascript/components/pricing/spaces/spaces-pricing.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/profile-completion/completion-header-info.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/profile-completion/profile-form-option.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/profile-custom-fields/profile-custom-fields-list.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/settings/boolean-setting.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/settings/check-list-setting.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/settings/user-validation-setting.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/socials/edit-socials.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/socials/fab-socials.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/categories/manage-product-category.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/categories/product-categories-item.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/categories/product-categories-tree.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/categories/product-categories.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/categories/product-category-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/clone-product-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/edit-product.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/filters/active-filters-tags.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/filters/categories-filter.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/filters/keyword-filter.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/filters/machines-filter.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/filters/stock-filter.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/new-product.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/order-actions.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/order-item.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/orders.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/product-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/product-item.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/product-price.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/product-stock-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/product-stock-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/products.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/show-order.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/store-list-header.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/store-product-item.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/store-product.tsx","webpack://fab-manager/./app/frontend/src/javascript/lib/setting.ts","webpack://fab-manager/./app/frontend/src/javascript/components/store/store-settings.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/store/store.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/subscriptions/free-extend-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/subscriptions/renew-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/subscriptions/subscribe-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/supporting-documents/delete-supporting-documents-type-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/supporting-documents/supporting-documents-files.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/supporting-documents/supporting-documents-refusal-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/api/proof-of-identity-refusal.ts","webpack://fab-manager/./app/frontend/src/javascript/components/supporting-documents/supporting-documents-refusal-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/supporting-documents/supporting-documents-type-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/supporting-documents/supporting-documents-type-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/supporting-documents/supporting-documents-types-list.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/supporting-documents/supporting-documents-validation.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/user/avatar-input.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/user/avatar.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/user/change-password.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/user/change-role-modal.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/user/gender-input.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/user/member-select.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/user/password-input.tsx","webpack://fab-manager/./app/frontend/src/javascript/models/user.ts","webpack://fab-manager/./app/frontend/src/javascript/api/training.ts","webpack://fab-manager/./app/frontend/src/javascript/api/tag.ts","webpack://fab-manager/./app/frontend/src/javascript/components/user/user-profile-form.tsx","webpack://fab-manager/./app/frontend/src/javascript/components/user/user-validation.tsx","webpack://fab-manager/./app/frontend/src/javascript/controllers/about.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/abuses.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/authentications.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/calendar.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/coupons.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/events.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/graphs.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/groups.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/invoices.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/members.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/open_api_clients.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/orders.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/plans.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/price_category.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/pricing.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/projects.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/settings.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/statistics.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/store.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/store_products.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/tags.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/admin/trainings.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/application.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/calendar.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/cart.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/cookies.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/dashboard.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/header.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/home.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/main_nav.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/members.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/notifications.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/orders.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/plans.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/privacy.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/products.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/profile.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/projects.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/store.js","webpack://fab-manager/./app/frontend/src/javascript/controllers/wallet.js","webpack://fab-manager/./app/frontend/src/javascript/directives/bs-jasny-fileinput.js","webpack://fab-manager/./app/frontend/src/javascript/directives/cart.js","webpack://fab-manager/./app/frontend/src/javascript/directives/compile.js","webpack://fab-manager/./app/frontend/src/javascript/directives/confirmation_needed.js","webpack://fab-manager/./app/frontend/src/javascript/directives/coupon.js","webpack://fab-manager/./app/frontend/src/javascript/directives/directives.js","webpack://fab-manager/./app/frontend/src/javascript/directives/fab_user_avatar.js","webpack://fab-manager/./app/frontend/src/javascript/directives/home/events.js","webpack://fab-manager/./app/frontend/src/javascript/directives/home/news.js","webpack://fab-manager/./app/frontend/src/javascript/directives/home/projects.js","webpack://fab-manager/./app/frontend/src/javascript/directives/home/twitter.js","webpack://fab-manager/./app/frontend/src/javascript/directives/members.js","webpack://fab-manager/./app/frontend/src/javascript/directives/post_render.js","webpack://fab-manager/./app/frontend/src/javascript/directives/selectMember.js","webpack://fab-manager/./app/frontend/src/javascript/directives/settings/number-setting.js","webpack://fab-manager/./app/frontend/src/javascript/directives/settings/select-multiple-setting.js","webpack://fab-manager/./app/frontend/src/javascript/directives/settings/select-setting.js","webpack://fab-manager/./app/frontend/src/javascript/directives/settings/text-setting.js","webpack://fab-manager/./app/frontend/src/javascript/directives/socialLink.js","webpack://fab-manager/./app/frontend/src/javascript/directives/validators.js","webpack://fab-manager/./app/frontend/src/javascript/filters/filters.js","webpack://fab-manager/./app/frontend/src/javascript/lib/cart-token.ts","webpack://fab-manager/./app/frontend/src/javascript/hooks/use-cart.ts","webpack://fab-manager/./app/frontend/src/javascript/lib/api.ts","webpack://fab-manager/./app/frontend/src/javascript/lib/coupon.ts","webpack://fab-manager/./app/frontend/src/javascript/lib/devise-modal.js","webpack://fab-manager/./app/frontend/src/javascript/lib/dirDisqus.js","webpack://fab-manager/./app/frontend/src/javascript/lib/file-upload.ts","webpack://fab-manager/./app/frontend/src/javascript/lib/format.ts","webpack://fab-manager/./app/frontend/src/javascript/lib/gtm.js","webpack://fab-manager/./app/frontend/src/javascript/lib/humanize.js","webpack://fab-manager/./app/frontend/src/javascript/lib/i18n.ts","webpack://fab-manager/./app/frontend/src/javascript/lib/order.ts","webpack://fab-manager/./app/frontend/src/javascript/lib/parsing.ts","webpack://fab-manager/./app/frontend/src/javascript/lib/polyfill.js","webpack://fab-manager/./app/frontend/src/javascript/lib/product.ts","webpack://fab-manager/./app/frontend/src/javascript/lib/summernote-ext-nugget.js","webpack://fab-manager/./app/frontend/src/javascript/lib/user.ts","webpack://fab-manager/./app/frontend/src/javascript/lib/wallet.ts","webpack://fab-manager/./app/frontend/src/javascript/models/custom-asset.ts","webpack://fab-manager/./app/frontend/src/javascript/models/payment-schedule.ts","webpack://fab-manager/./app/frontend/src/javascript/models/payment.ts","webpack://fab-manager/./app/frontend/src/javascript/models/product.ts","webpack://fab-manager/./app/frontend/src/javascript/models/setting.ts","webpack://fab-manager/./app/frontend/src/javascript/models/social-network.ts","webpack://fab-manager/./app/frontend/src/javascript/router.js","webpack://fab-manager/./app/frontend/src/javascript/services/_t.js","webpack://fab-manager/./app/frontend/src/javascript/services/abuse.js","webpack://fab-manager/./app/frontend/src/javascript/services/accounting_period.js","webpack://fab-manager/./app/frontend/src/javascript/services/admin.js","webpack://fab-manager/./app/frontend/src/javascript/services/age_range.js","webpack://fab-manager/./app/frontend/src/javascript/services/auth.js","webpack://fab-manager/./app/frontend/src/javascript/services/authProvider.js","webpack://fab-manager/./app/frontend/src/javascript/services/availability.js","webpack://fab-manager/./app/frontend/src/javascript/services/calendar.js","webpack://fab-manager/./app/frontend/src/javascript/services/category.js","webpack://fab-manager/./app/frontend/src/javascript/services/component.js","webpack://fab-manager/./app/frontend/src/javascript/services/coupon.js","webpack://fab-manager/./app/frontend/src/javascript/services/credit.js","webpack://fab-manager/./app/frontend/src/javascript/services/csrf.js","webpack://fab-manager/./app/frontend/src/javascript/services/customAsset.js","webpack://fab-manager/./app/frontend/src/javascript/services/diacritics.js","webpack://fab-manager/./app/frontend/src/javascript/services/dialogs.js","webpack://fab-manager/./app/frontend/src/javascript/services/elastic.js","webpack://fab-manager/./app/frontend/src/javascript/services/event.js","webpack://fab-manager/./app/frontend/src/javascript/services/event_theme.js","webpack://fab-manager/./app/frontend/src/javascript/services/export.js","webpack://fab-manager/./app/frontend/src/javascript/services/fab_analytics.js","webpack://fab-manager/./app/frontend/src/javascript/services/group.js","webpack://fab-manager/./app/frontend/src/javascript/services/help.js","webpack://fab-manager/./app/frontend/src/javascript/services/helpers.js","webpack://fab-manager/./app/frontend/src/javascript/services/ical.js","webpack://fab-manager/./app/frontend/src/javascript/services/icalendar.js","webpack://fab-manager/./app/frontend/src/javascript/services/import.js","webpack://fab-manager/./app/frontend/src/javascript/services/invoice.js","webpack://fab-manager/./app/frontend/src/javascript/services/licence.js","webpack://fab-manager/./app/frontend/src/javascript/services/local_payment.js","webpack://fab-manager/./app/frontend/src/javascript/services/machine.js","webpack://fab-manager/./app/frontend/src/javascript/services/member.js","webpack://fab-manager/./app/frontend/src/javascript/services/notification.js","webpack://fab-manager/./app/frontend/src/javascript/services/open_api_client.js","webpack://fab-manager/./app/frontend/src/javascript/services/openlab_project.js","webpack://fab-manager/./app/frontend/src/javascript/services/pagination_service.js","webpack://fab-manager/./app/frontend/src/javascript/services/payment.js","webpack://fab-manager/./app/frontend/src/javascript/services/plan.js","webpack://fab-manager/./app/frontend/src/javascript/services/plan_category.js","webpack://fab-manager/./app/frontend/src/javascript/services/price.js","webpack://fab-manager/./app/frontend/src/javascript/services/price_category.js","webpack://fab-manager/./app/frontend/src/javascript/services/pricing.js","webpack://fab-manager/./app/frontend/src/javascript/services/profile_custom_field.js","webpack://fab-manager/./app/frontend/src/javascript/services/project.js","webpack://fab-manager/./app/frontend/src/javascript/services/proof_of_identity_type.js","webpack://fab-manager/./app/frontend/src/javascript/services/reservation.js","webpack://fab-manager/./app/frontend/src/javascript/services/session.js","webpack://fab-manager/./app/frontend/src/javascript/services/setting.js","webpack://fab-manager/./app/frontend/src/javascript/services/slots_reservation.js","webpack://fab-manager/./app/frontend/src/javascript/services/socialNetworks.js","webpack://fab-manager/./app/frontend/src/javascript/services/space.js","webpack://fab-manager/./app/frontend/src/javascript/services/statistics.js","webpack://fab-manager/./app/frontend/src/javascript/services/subscription.js","webpack://fab-manager/./app/frontend/src/javascript/services/tag.js","webpack://fab-manager/./app/frontend/src/javascript/services/theme.js","webpack://fab-manager/./app/frontend/src/javascript/services/training.js","webpack://fab-manager/./app/frontend/src/javascript/services/trainings_pricing.js","webpack://fab-manager/./app/frontend/src/javascript/services/translations.js","webpack://fab-manager/./app/frontend/src/javascript/services/user.js","webpack://fab-manager/./app/frontend/src/javascript/services/version.js","webpack://fab-manager/./app/frontend/src/javascript/services/wallet.js","webpack://fab-manager/./app/frontend/application.js.erb","webpack://fab-manager/./app/frontend/src/javascript/controllers/events.js.erb","webpack://fab-manager/./app/frontend/src/javascript/controllers/machines.js.erb","webpack://fab-manager/./app/frontend/src/javascript/controllers/spaces.js.erb","webpack://fab-manager/./app/frontend/src/javascript/controllers/trainings.js.erb","webpack://fab-manager//usr/src/app/node_modules/moment/locale|sync|/^\\.\\/.*$/","webpack://fab-manager/./app/frontend/templates/admin/open_api_clients/index.html.erb","webpack://fab-manager/./app/frontend/templates/shared/header.html.erb","webpack://fab-manager/./app/frontend/templates/shared/publicProfile.html.erb","webpack://fab-manager/./app/frontend/templates/admin/abuses/index.html","webpack://fab-manager/./app/frontend/templates/admin/admins/new.html","webpack://fab-manager/./app/frontend/templates/admin/authentications/edit.html","webpack://fab-manager/./app/frontend/templates/admin/authentications/index.html","webpack://fab-manager/./app/frontend/templates/admin/authentications/new.html","webpack://fab-manager/./app/frontend/templates/admin/calendar/calendar.html","webpack://fab-manager/./app/frontend/templates/admin/calendar/deleteRecurrent.html","webpack://fab-manager/./app/frontend/templates/admin/calendar/eventModal.html","webpack://fab-manager/./app/frontend/templates/admin/calendar/icalendar.html","webpack://fab-manager/./app/frontend/templates/admin/coupons/_form.html","webpack://fab-manager/./app/frontend/templates/admin/coupons/edit.html","webpack://fab-manager/./app/frontend/templates/admin/coupons/new.html","webpack://fab-manager/./app/frontend/templates/admin/events/filters.html","webpack://fab-manager/./app/frontend/templates/admin/events/index.html","webpack://fab-manager/./app/frontend/templates/admin/events/monitoring.html","webpack://fab-manager/./app/frontend/templates/admin/events/price_form.html","webpack://fab-manager/./app/frontend/templates/admin/events/prices.html","webpack://fab-manager/./app/frontend/templates/admin/events/reservations.html","webpack://fab-manager/./app/frontend/templates/admin/groups/index.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/_period.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/accountingExportModal.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/avoirModal.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/closePeriodModal.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/codes.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/index.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/list.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/payment.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/settings.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/settings/editCode.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/settings/editMultiVAT.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/settings/editNumber.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/settings/editPrefix.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/settings/editReference.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/settings/editSchedulePrefix.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/settings/editVAT.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/settings/multiVATHistory.html","webpack://fab-manager/./app/frontend/templates/admin/invoices/settings/stripeKeys.html","webpack://fab-manager/./app/frontend/templates/admin/managers/new.html","webpack://fab-manager/./app/frontend/templates/admin/members/_form.html","webpack://fab-manager/./app/frontend/templates/admin/members/administrators.html","webpack://fab-manager/./app/frontend/templates/admin/members/change_role_modal.html","webpack://fab-manager/./app/frontend/templates/admin/members/edit.html","webpack://fab-manager/./app/frontend/templates/admin/members/import.html","webpack://fab-manager/./app/frontend/templates/admin/members/import_result.html","webpack://fab-manager/./app/frontend/templates/admin/members/index.html","webpack://fab-manager/./app/frontend/templates/admin/members/managers.html","webpack://fab-manager/./app/frontend/templates/admin/members/members.html","webpack://fab-manager/./app/frontend/templates/admin/members/new.html","webpack://fab-manager/./app/frontend/templates/admin/members/partners.html","webpack://fab-manager/./app/frontend/templates/admin/members/users.html","webpack://fab-manager/./app/frontend/templates/admin/orders/show.html","webpack://fab-manager/./app/frontend/templates/admin/plans/_form.html","webpack://fab-manager/./app/frontend/templates/admin/plans/categories.html","webpack://fab-manager/./app/frontend/templates/admin/plans/edit.html","webpack://fab-manager/./app/frontend/templates/admin/plans/new.html","webpack://fab-manager/./app/frontend/templates/admin/pricing/coupons.html","webpack://fab-manager/./app/frontend/templates/admin/pricing/credits.html","webpack://fab-manager/./app/frontend/templates/admin/pricing/index.html","webpack://fab-manager/./app/frontend/templates/admin/pricing/machine_hours.html","webpack://fab-manager/./app/frontend/templates/admin/pricing/sendCoupon.html","webpack://fab-manager/./app/frontend/templates/admin/pricing/spaces.html","webpack://fab-manager/./app/frontend/templates/admin/pricing/subscriptions.html","webpack://fab-manager/./app/frontend/templates/admin/pricing/trainings.html","webpack://fab-manager/./app/frontend/templates/admin/projects/index.html","webpack://fab-manager/./app/frontend/templates/admin/projects/licences.html","webpack://fab-manager/./app/frontend/templates/admin/projects/materials.html","webpack://fab-manager/./app/frontend/templates/admin/projects/settings.html","webpack://fab-manager/./app/frontend/templates/admin/projects/themes.html","webpack://fab-manager/./app/frontend/templates/admin/settings/about.html","webpack://fab-manager/./app/frontend/templates/admin/settings/analyticsModal.html","webpack://fab-manager/./app/frontend/templates/admin/settings/compte.html","webpack://fab-manager/./app/frontend/templates/admin/settings/general.html","webpack://fab-manager/./app/frontend/templates/admin/settings/home_page.html","webpack://fab-manager/./app/frontend/templates/admin/settings/index.html","webpack://fab-manager/./app/frontend/templates/admin/settings/newSelectOption.html","webpack://fab-manager/./app/frontend/templates/admin/settings/number.html","webpack://fab-manager/./app/frontend/templates/admin/settings/privacy.html","webpack://fab-manager/./app/frontend/templates/admin/settings/reservations.html","webpack://fab-manager/./app/frontend/templates/admin/settings/save_policy.html","webpack://fab-manager/./app/frontend/templates/admin/settings/select-multiple.html","webpack://fab-manager/./app/frontend/templates/admin/settings/select.html","webpack://fab-manager/./app/frontend/templates/admin/settings/text.html","webpack://fab-manager/./app/frontend/templates/admin/statistics/export.html","webpack://fab-manager/./app/frontend/templates/admin/statistics/graphs.html","webpack://fab-manager/./app/frontend/templates/admin/statistics/index.html","webpack://fab-manager/./app/frontend/templates/admin/store/categories.html","webpack://fab-manager/./app/frontend/templates/admin/store/index.html","webpack://fab-manager/./app/frontend/templates/admin/store/orders.html","webpack://fab-manager/./app/frontend/templates/admin/store/product_edit.html","webpack://fab-manager/./app/frontend/templates/admin/store/product_new.html","webpack://fab-manager/./app/frontend/templates/admin/store/products.html","webpack://fab-manager/./app/frontend/templates/admin/store/settings.html","webpack://fab-manager/./app/frontend/templates/admin/tags/index.html","webpack://fab-manager/./app/frontend/templates/admin/trainings/_form.html","webpack://fab-manager/./app/frontend/templates/admin/trainings/edit.html","webpack://fab-manager/./app/frontend/templates/admin/trainings/index.html","webpack://fab-manager/./app/frontend/templates/admin/trainings/modal_edit.html","webpack://fab-manager/./app/frontend/templates/admin/trainings/new.html","webpack://fab-manager/./app/frontend/templates/admin/trainings/validTrainingModal.html","webpack://fab-manager/./app/frontend/templates/admin/versions/upgradeModal.html","webpack://fab-manager/./app/frontend/templates/calendar/calendar.html","webpack://fab-manager/./app/frontend/templates/calendar/filter.html","webpack://fab-manager/./app/frontend/templates/calendar/filterAside.html","webpack://fab-manager/./app/frontend/templates/cart/index.html","webpack://fab-manager/./app/frontend/templates/dashboard/events.html","webpack://fab-manager/./app/frontend/templates/dashboard/invoices.html","webpack://fab-manager/./app/frontend/templates/dashboard/nav.html","webpack://fab-manager/./app/frontend/templates/dashboard/orders.html","webpack://fab-manager/./app/frontend/templates/dashboard/payment_schedules.html","webpack://fab-manager/./app/frontend/templates/dashboard/profile.html","webpack://fab-manager/./app/frontend/templates/dashboard/projects.html","webpack://fab-manager/./app/frontend/templates/dashboard/proof_of_identity_files.html","webpack://fab-manager/./app/frontend/templates/dashboard/reservations.html","webpack://fab-manager/./app/frontend/templates/dashboard/settings.html","webpack://fab-manager/./app/frontend/templates/dashboard/trainings.html","webpack://fab-manager/./app/frontend/templates/dashboard/wallet.html","webpack://fab-manager/./app/frontend/templates/events/_form.html","webpack://fab-manager/./app/frontend/templates/events/deleteRecurrent.html","webpack://fab-manager/./app/frontend/templates/events/edit.html","webpack://fab-manager/./app/frontend/templates/events/editRecurrent.html","webpack://fab-manager/./app/frontend/templates/events/index.html","webpack://fab-manager/./app/frontend/templates/events/modify_event_reservation_modal.html","webpack://fab-manager/./app/frontend/templates/events/new.html","webpack://fab-manager/./app/frontend/templates/events/show.html","webpack://fab-manager/./app/frontend/templates/home.html","webpack://fab-manager/./app/frontend/templates/home/events.html","webpack://fab-manager/./app/frontend/templates/home/members.html","webpack://fab-manager/./app/frontend/templates/home/news.html","webpack://fab-manager/./app/frontend/templates/home/projects.html","webpack://fab-manager/./app/frontend/templates/home/twitter.html","webpack://fab-manager/./app/frontend/templates/machines/_form.html","webpack://fab-manager/./app/frontend/templates/machines/edit.html","webpack://fab-manager/./app/frontend/templates/machines/index.html","webpack://fab-manager/./app/frontend/templates/machines/new.html","webpack://fab-manager/./app/frontend/templates/machines/reserve.html","webpack://fab-manager/./app/frontend/templates/machines/show.html","webpack://fab-manager/./app/frontend/templates/members/index.html","webpack://fab-manager/./app/frontend/templates/members/show.html","webpack://fab-manager/./app/frontend/templates/notifications/index.html","webpack://fab-manager/./app/frontend/templates/orders/show.html","webpack://fab-manager/./app/frontend/templates/plans/_plan.html","webpack://fab-manager/./app/frontend/templates/plans/index.html","webpack://fab-manager/./app/frontend/templates/products/show.html","webpack://fab-manager/./app/frontend/templates/profile/_token.html","webpack://fab-manager/./app/frontend/templates/profile/complete.html","webpack://fab-manager/./app/frontend/templates/profile/resend_code_modal.html","webpack://fab-manager/./app/frontend/templates/projects/_form.html","webpack://fab-manager/./app/frontend/templates/projects/edit.html","webpack://fab-manager/./app/frontend/templates/projects/index.html","webpack://fab-manager/./app/frontend/templates/projects/new.html","webpack://fab-manager/./app/frontend/templates/projects/show.html","webpack://fab-manager/./app/frontend/templates/shared/ConfirmationNewModal.html","webpack://fab-manager/./app/frontend/templates/shared/_admin_form.html","webpack://fab-manager/./app/frontend/templates/shared/_cart.html","webpack://fab-manager/./app/frontend/templates/shared/_coupon.html","webpack://fab-manager/./app/frontend/templates/shared/_manager_form.html","webpack://fab-manager/./app/frontend/templates/shared/_member_select.html","webpack://fab-manager/./app/frontend/templates/shared/_partner_new_modal.html","webpack://fab-manager/./app/frontend/templates/shared/_reserve_slot_same_time.html","webpack://fab-manager/./app/frontend/templates/shared/_reserve_slot_tags_mismatch.html","webpack://fab-manager/./app/frontend/templates/shared/_reserve_slot_without_plan.html","webpack://fab-manager/./app/frontend/templates/shared/_social_link.html","webpack://fab-manager/./app/frontend/templates/shared/_user_avatar.html","webpack://fab-manager/./app/frontend/templates/shared/about.html","webpack://fab-manager/./app/frontend/templates/shared/confirm_modal.html","webpack://fab-manager/./app/frontend/templates/shared/confirm_modify_slot_modal.html","webpack://fab-manager/./app/frontend/templates/shared/cookies.html","webpack://fab-manager/./app/frontend/templates/shared/deviseModal.html","webpack://fab-manager/./app/frontend/templates/shared/help_modal.html","webpack://fab-manager/./app/frontend/templates/shared/leftnav.html","webpack://fab-manager/./app/frontend/templates/shared/passwordEditModal.html","webpack://fab-manager/./app/frontend/templates/shared/passwordNewModal.html","webpack://fab-manager/./app/frontend/templates/shared/privacy.html","webpack://fab-manager/./app/frontend/templates/shared/signalAbuseModal.html","webpack://fab-manager/./app/frontend/templates/shared/signupModal.html","webpack://fab-manager/./app/frontend/templates/shared/tour-step-template.html","webpack://fab-manager/./app/frontend/templates/shared/valid_reservation_modal.html","webpack://fab-manager/./app/frontend/templates/spaces/_form.html","webpack://fab-manager/./app/frontend/templates/spaces/edit.html","webpack://fab-manager/./app/frontend/templates/spaces/index.html","webpack://fab-manager/./app/frontend/templates/spaces/new.html","webpack://fab-manager/./app/frontend/templates/spaces/reserve.html","webpack://fab-manager/./app/frontend/templates/spaces/show.html","webpack://fab-manager/./app/frontend/templates/store/index.html","webpack://fab-manager/./app/frontend/templates/trainings/index.html","webpack://fab-manager/./app/frontend/templates/trainings/reserve.html","webpack://fab-manager/./app/frontend/templates/trainings/show.html","webpack://fab-manager/./app/frontend/templates/wallet/credit_modal.html","webpack://fab-manager/./app/frontend/templates/wallet/show.html","webpack://fab-manager/./app/frontend/templates/wallet/transactions.html"],"sourcesContent":["var map = {\n\t\"./arrow-left\": 80231,\n\t\"./arrow-left.png\": 80231,\n\t\"./default-image\": 967,\n\t\"./default-image.png\": 967,\n\t\"./fabmanager-logo\": 89928,\n\t\"./fabmanager-logo.png\": 89928,\n\t\"./github\": 96783,\n\t\"./github.svg\": 96783,\n\t\"./icons\": 22513,\n\t\"./icons.svg\": 22513,\n\t\"./mastercard\": 37160,\n\t\"./mastercard.png\": 37160,\n\t\"./no_avatar\": 83682,\n\t\"./no_avatar.png\": 83682,\n\t\"./no_image\": 835,\n\t\"./no_image.png\": 835,\n\t\"./payzen-secure\": 53436,\n\t\"./payzen-secure.png\": 53436,\n\t\"./powered_by_stripe\": 88930,\n\t\"./powered_by_stripe.png\": 88930,\n\t\"./social-icons\": 9661,\n\t\"./social-icons.svg\": 9661,\n\t\"./social/dailymotion\": 19873,\n\t\"./social/dailymotion.png\": 19873,\n\t\"./social/echosciences\": 26474,\n\t\"./social/echosciences.png\": 26474,\n\t\"./visa\": 88635,\n\t\"./visa.png\": 88635\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 33345;","var map = {\n\t\"./angular/switch.ts\": 5749,\n\t\"./authentication-provider/boolean-mapping-form.tsx\": 88149,\n\t\"./authentication-provider/data-mapping-form.tsx\": 79266,\n\t\"./authentication-provider/database-form.tsx\": 21205,\n\t\"./authentication-provider/date-mapping-form.tsx\": 660,\n\t\"./authentication-provider/integer-mapping-form.tsx\": 92423,\n\t\"./authentication-provider/oauth2-data-mapping-form.tsx\": 27776,\n\t\"./authentication-provider/oauth2-form.tsx\": 52042,\n\t\"./authentication-provider/openid-connect-data-mapping-form.tsx\": 71187,\n\t\"./authentication-provider/openid-connect-form.tsx\": 55171,\n\t\"./authentication-provider/provider-form.tsx\": 71296,\n\t\"./authentication-provider/string-mapping-form.tsx\": 72701,\n\t\"./authentication-provider/type-mapping-modal.tsx\": 71321,\n\t\"./base/accordion-item.tsx\": 58351,\n\t\"./base/error-boundary.tsx\": 7818,\n\t\"./base/fab-alert.tsx\": 34693,\n\t\"./base/fab-button.tsx\": 90408,\n\t\"./base/fab-input.tsx\": 54471,\n\t\"./base/fab-modal.tsx\": 22720,\n\t\"./base/fab-output-copy.tsx\": 16581,\n\t\"./base/fab-pagination.tsx\": 84242,\n\t\"./base/fab-panel.tsx\": 21654,\n\t\"./base/fab-popover.tsx\": 50068,\n\t\"./base/fab-state-label.tsx\": 70860,\n\t\"./base/html-translate.tsx\": 58887,\n\t\"./base/labelled-input.tsx\": 70042,\n\t\"./base/loader.tsx\": 90295,\n\t\"./base/text-editor/fab-text-editor.tsx\": 8541,\n\t\"./base/text-editor/iframe.tsx\": 73073,\n\t\"./base/text-editor/menu-bar.tsx\": 94730,\n\t\"./cart/cart-button.tsx\": 56085,\n\t\"./cart/store-cart.tsx\": 99985,\n\t\"./coupon/coupon-input.tsx\": 85034,\n\t\"./dashboard/orders/orders-dashboard.tsx\": 40430,\n\t\"./dashboard/reservations/credits-panel.tsx\": 84647,\n\t\"./dashboard/reservations/reservations-dashboard.tsx\": 82643,\n\t\"./dashboard/reservations/reservations-panel.tsx\": 17046,\n\t\"./document-filters.tsx\": 56225,\n\t\"./events/event-card.tsx\": 36220,\n\t\"./events/event-themes.tsx\": 96099,\n\t\"./form/abstract-form-item.tsx\": 77560,\n\t\"./form/form-checklist.tsx\": 98917,\n\t\"./form/form-file-upload.tsx\": 70652,\n\t\"./form/form-image-upload.tsx\": 47183,\n\t\"./form/form-input.tsx\": 41073,\n\t\"./form/form-multi-file-upload.tsx\": 89411,\n\t\"./form/form-multi-image-upload.tsx\": 89426,\n\t\"./form/form-multi-select.tsx\": 48717,\n\t\"./form/form-rich-text.tsx\": 3042,\n\t\"./form/form-select.tsx\": 76058,\n\t\"./form/form-switch.tsx\": 9583,\n\t\"./form/unsaved-form-alert.tsx\": 57909,\n\t\"./group/change-group.tsx\": 84817,\n\t\"./machines/machine-card.tsx\": 57703,\n\t\"./machines/machine-form.tsx\": 5739,\n\t\"./machines/machines-filters.tsx\": 79441,\n\t\"./machines/machines-list.tsx\": 63342,\n\t\"./machines/pending-training-modal.tsx\": 5124,\n\t\"./machines/required-training-modal.tsx\": 26984,\n\t\"./machines/reserve-button.tsx\": 34168,\n\t\"./payment-schedule/payment-schedule-item-actions.tsx\": 98478,\n\t\"./payment-schedule/payment-schedule-summary.tsx\": 64561,\n\t\"./payment-schedule/payment-schedules-dashboard.tsx\": 41616,\n\t\"./payment-schedule/payment-schedules-list.tsx\": 10051,\n\t\"./payment-schedule/payment-schedules-table.tsx\": 15950,\n\t\"./payment-schedule/select-schedule.tsx\": 64374,\n\t\"./payment-schedule/update-payment-mean-modal.tsx\": 41499,\n\t\"./payment/abstract-payment-modal.tsx\": 97367,\n\t\"./payment/card-payment-modal.tsx\": 51364,\n\t\"./payment/local-payment/local-payment-form.tsx\": 82238,\n\t\"./payment/local-payment/local-payment-modal.tsx\": 46823,\n\t\"./payment/payzen/payzen-card-update-modal.tsx\": 79263,\n\t\"./payment/payzen/payzen-form.tsx\": 16042,\n\t\"./payment/payzen/payzen-keys-form.tsx\": 48055,\n\t\"./payment/payzen/payzen-modal.tsx\": 28691,\n\t\"./payment/payzen/payzen-settings.tsx\": 62978,\n\t\"./payment/select-gateway-modal.tsx\": 2321,\n\t\"./payment/stripe/payment-modal.tsx\": 58504,\n\t\"./payment/stripe/stripe-card-update-modal.tsx\": 32586,\n\t\"./payment/stripe/stripe-card-update.tsx\": 60750,\n\t\"./payment/stripe/stripe-confirm-modal.tsx\": 71008,\n\t\"./payment/stripe/stripe-confirm.tsx\": 16275,\n\t\"./payment/stripe/stripe-elements.tsx\": 10143,\n\t\"./payment/stripe/stripe-form.tsx\": 49689,\n\t\"./payment/stripe/stripe-keys-form.tsx\": 90730,\n\t\"./payment/stripe/stripe-modal.tsx\": 96464,\n\t\"./payment/update-card-modal.tsx\": 78258,\n\t\"./payment/wallet-info.tsx\": 47683,\n\t\"./plan-categories/delete-plan-category.tsx\": 32796,\n\t\"./plan-categories/manage-plan-category.tsx\": 4025,\n\t\"./plan-categories/plan-categories-list.tsx\": 13724,\n\t\"./plan-categories/plan-category-form.tsx\": 73193,\n\t\"./plans/plan-card.tsx\": 92217,\n\t\"./plans/plans-filter.tsx\": 64560,\n\t\"./plans/plans-list.tsx\": 78189,\n\t\"./prepaid-packs/packs-summary.tsx\": 71437,\n\t\"./prepaid-packs/propose-packs-modal.tsx\": 28553,\n\t\"./pricing/editable-price.tsx\": 53871,\n\t\"./pricing/machines/configure-packs-button.tsx\": 63424,\n\t\"./pricing/machines/create-pack.tsx\": 8044,\n\t\"./pricing/machines/delete-pack.tsx\": 74014,\n\t\"./pricing/machines/edit-pack.tsx\": 57492,\n\t\"./pricing/machines/machines-pricing.tsx\": 32075,\n\t\"./pricing/machines/pack-form.tsx\": 90536,\n\t\"./pricing/spaces/configure-extended-prices-button.tsx\": 75872,\n\t\"./pricing/spaces/create-extended-price.tsx\": 83738,\n\t\"./pricing/spaces/delete-extended-price.tsx\": 31896,\n\t\"./pricing/spaces/edit-extended-price.tsx\": 65134,\n\t\"./pricing/spaces/extended-price-form.tsx\": 65302,\n\t\"./pricing/spaces/spaces-pricing.tsx\": 7201,\n\t\"./profile-completion/completion-header-info.tsx\": 11691,\n\t\"./profile-completion/profile-form-option.tsx\": 82808,\n\t\"./profile-custom-fields/profile-custom-fields-list.tsx\": 9655,\n\t\"./settings/boolean-setting.tsx\": 86449,\n\t\"./settings/check-list-setting.tsx\": 4167,\n\t\"./settings/user-validation-setting.tsx\": 48872,\n\t\"./socials/edit-socials.tsx\": 38463,\n\t\"./socials/fab-socials.tsx\": 98859,\n\t\"./store/categories/manage-product-category.tsx\": 22797,\n\t\"./store/categories/product-categories-item.tsx\": 54162,\n\t\"./store/categories/product-categories-tree.tsx\": 36792,\n\t\"./store/categories/product-categories.tsx\": 76475,\n\t\"./store/categories/product-category-form.tsx\": 98539,\n\t\"./store/clone-product-modal.tsx\": 24749,\n\t\"./store/edit-product.tsx\": 74361,\n\t\"./store/filters/active-filters-tags.tsx\": 959,\n\t\"./store/filters/categories-filter.tsx\": 83280,\n\t\"./store/filters/keyword-filter.tsx\": 52635,\n\t\"./store/filters/machines-filter.tsx\": 3825,\n\t\"./store/filters/stock-filter.tsx\": 42858,\n\t\"./store/new-product.tsx\": 82804,\n\t\"./store/order-actions.tsx\": 45145,\n\t\"./store/order-item.tsx\": 38072,\n\t\"./store/orders.tsx\": 91243,\n\t\"./store/product-form.tsx\": 67516,\n\t\"./store/product-item.tsx\": 78697,\n\t\"./store/product-price.tsx\": 26822,\n\t\"./store/product-stock-form.tsx\": 40268,\n\t\"./store/product-stock-modal.tsx\": 57771,\n\t\"./store/products.tsx\": 74823,\n\t\"./store/show-order.tsx\": 35622,\n\t\"./store/store-list-header.tsx\": 75488,\n\t\"./store/store-product-item.tsx\": 56233,\n\t\"./store/store-product.tsx\": 93467,\n\t\"./store/store-settings.tsx\": 21326,\n\t\"./store/store.tsx\": 40978,\n\t\"./subscriptions/free-extend-modal.tsx\": 26614,\n\t\"./subscriptions/renew-modal.tsx\": 79283,\n\t\"./subscriptions/subscribe-modal.tsx\": 86050,\n\t\"./supporting-documents/delete-supporting-documents-type-modal.tsx\": 28550,\n\t\"./supporting-documents/supporting-documents-files.tsx\": 66144,\n\t\"./supporting-documents/supporting-documents-refusal-form.tsx\": 33121,\n\t\"./supporting-documents/supporting-documents-refusal-modal.tsx\": 98013,\n\t\"./supporting-documents/supporting-documents-type-form.tsx\": 23678,\n\t\"./supporting-documents/supporting-documents-type-modal.tsx\": 61624,\n\t\"./supporting-documents/supporting-documents-types-list.tsx\": 59716,\n\t\"./supporting-documents/supporting-documents-validation.tsx\": 13157,\n\t\"./user/avatar-input.tsx\": 44737,\n\t\"./user/avatar.tsx\": 93414,\n\t\"./user/change-password.tsx\": 25902,\n\t\"./user/change-role-modal.tsx\": 10874,\n\t\"./user/gender-input.tsx\": 30260,\n\t\"./user/member-select.tsx\": 42026,\n\t\"./user/password-input.tsx\": 46135,\n\t\"./user/user-profile-form.tsx\": 71448,\n\t\"./user/user-validation.tsx\": 30957,\n\t\"src/javascript/components/angular/switch.ts\": 5749,\n\t\"src/javascript/components/authentication-provider/boolean-mapping-form.tsx\": 88149,\n\t\"src/javascript/components/authentication-provider/data-mapping-form.tsx\": 79266,\n\t\"src/javascript/components/authentication-provider/database-form.tsx\": 21205,\n\t\"src/javascript/components/authentication-provider/date-mapping-form.tsx\": 660,\n\t\"src/javascript/components/authentication-provider/integer-mapping-form.tsx\": 92423,\n\t\"src/javascript/components/authentication-provider/oauth2-data-mapping-form.tsx\": 27776,\n\t\"src/javascript/components/authentication-provider/oauth2-form.tsx\": 52042,\n\t\"src/javascript/components/authentication-provider/openid-connect-data-mapping-form.tsx\": 71187,\n\t\"src/javascript/components/authentication-provider/openid-connect-form.tsx\": 55171,\n\t\"src/javascript/components/authentication-provider/provider-form.tsx\": 71296,\n\t\"src/javascript/components/authentication-provider/string-mapping-form.tsx\": 72701,\n\t\"src/javascript/components/authentication-provider/type-mapping-modal.tsx\": 71321,\n\t\"src/javascript/components/base/accordion-item.tsx\": 58351,\n\t\"src/javascript/components/base/error-boundary.tsx\": 7818,\n\t\"src/javascript/components/base/fab-alert.tsx\": 34693,\n\t\"src/javascript/components/base/fab-button.tsx\": 90408,\n\t\"src/javascript/components/base/fab-input.tsx\": 54471,\n\t\"src/javascript/components/base/fab-modal.tsx\": 22720,\n\t\"src/javascript/components/base/fab-output-copy.tsx\": 16581,\n\t\"src/javascript/components/base/fab-pagination.tsx\": 84242,\n\t\"src/javascript/components/base/fab-panel.tsx\": 21654,\n\t\"src/javascript/components/base/fab-popover.tsx\": 50068,\n\t\"src/javascript/components/base/fab-state-label.tsx\": 70860,\n\t\"src/javascript/components/base/html-translate.tsx\": 58887,\n\t\"src/javascript/components/base/labelled-input.tsx\": 70042,\n\t\"src/javascript/components/base/loader.tsx\": 90295,\n\t\"src/javascript/components/base/text-editor/fab-text-editor.tsx\": 8541,\n\t\"src/javascript/components/base/text-editor/iframe.tsx\": 73073,\n\t\"src/javascript/components/base/text-editor/menu-bar.tsx\": 94730,\n\t\"src/javascript/components/cart/cart-button.tsx\": 56085,\n\t\"src/javascript/components/cart/store-cart.tsx\": 99985,\n\t\"src/javascript/components/coupon/coupon-input.tsx\": 85034,\n\t\"src/javascript/components/dashboard/orders/orders-dashboard.tsx\": 40430,\n\t\"src/javascript/components/dashboard/reservations/credits-panel.tsx\": 84647,\n\t\"src/javascript/components/dashboard/reservations/reservations-dashboard.tsx\": 82643,\n\t\"src/javascript/components/dashboard/reservations/reservations-panel.tsx\": 17046,\n\t\"src/javascript/components/document-filters.tsx\": 56225,\n\t\"src/javascript/components/events/event-card.tsx\": 36220,\n\t\"src/javascript/components/events/event-themes.tsx\": 96099,\n\t\"src/javascript/components/form/abstract-form-item.tsx\": 77560,\n\t\"src/javascript/components/form/form-checklist.tsx\": 98917,\n\t\"src/javascript/components/form/form-file-upload.tsx\": 70652,\n\t\"src/javascript/components/form/form-image-upload.tsx\": 47183,\n\t\"src/javascript/components/form/form-input.tsx\": 41073,\n\t\"src/javascript/components/form/form-multi-file-upload.tsx\": 89411,\n\t\"src/javascript/components/form/form-multi-image-upload.tsx\": 89426,\n\t\"src/javascript/components/form/form-multi-select.tsx\": 48717,\n\t\"src/javascript/components/form/form-rich-text.tsx\": 3042,\n\t\"src/javascript/components/form/form-select.tsx\": 76058,\n\t\"src/javascript/components/form/form-switch.tsx\": 9583,\n\t\"src/javascript/components/form/unsaved-form-alert.tsx\": 57909,\n\t\"src/javascript/components/group/change-group.tsx\": 84817,\n\t\"src/javascript/components/machines/machine-card.tsx\": 57703,\n\t\"src/javascript/components/machines/machine-form.tsx\": 5739,\n\t\"src/javascript/components/machines/machines-filters.tsx\": 79441,\n\t\"src/javascript/components/machines/machines-list.tsx\": 63342,\n\t\"src/javascript/components/machines/pending-training-modal.tsx\": 5124,\n\t\"src/javascript/components/machines/required-training-modal.tsx\": 26984,\n\t\"src/javascript/components/machines/reserve-button.tsx\": 34168,\n\t\"src/javascript/components/payment-schedule/payment-schedule-item-actions.tsx\": 98478,\n\t\"src/javascript/components/payment-schedule/payment-schedule-summary.tsx\": 64561,\n\t\"src/javascript/components/payment-schedule/payment-schedules-dashboard.tsx\": 41616,\n\t\"src/javascript/components/payment-schedule/payment-schedules-list.tsx\": 10051,\n\t\"src/javascript/components/payment-schedule/payment-schedules-table.tsx\": 15950,\n\t\"src/javascript/components/payment-schedule/select-schedule.tsx\": 64374,\n\t\"src/javascript/components/payment-schedule/update-payment-mean-modal.tsx\": 41499,\n\t\"src/javascript/components/payment/abstract-payment-modal.tsx\": 97367,\n\t\"src/javascript/components/payment/card-payment-modal.tsx\": 51364,\n\t\"src/javascript/components/payment/local-payment/local-payment-form.tsx\": 82238,\n\t\"src/javascript/components/payment/local-payment/local-payment-modal.tsx\": 46823,\n\t\"src/javascript/components/payment/payzen/payzen-card-update-modal.tsx\": 79263,\n\t\"src/javascript/components/payment/payzen/payzen-form.tsx\": 16042,\n\t\"src/javascript/components/payment/payzen/payzen-keys-form.tsx\": 48055,\n\t\"src/javascript/components/payment/payzen/payzen-modal.tsx\": 28691,\n\t\"src/javascript/components/payment/payzen/payzen-settings.tsx\": 62978,\n\t\"src/javascript/components/payment/select-gateway-modal.tsx\": 2321,\n\t\"src/javascript/components/payment/stripe/payment-modal.tsx\": 58504,\n\t\"src/javascript/components/payment/stripe/stripe-card-update-modal.tsx\": 32586,\n\t\"src/javascript/components/payment/stripe/stripe-card-update.tsx\": 60750,\n\t\"src/javascript/components/payment/stripe/stripe-confirm-modal.tsx\": 71008,\n\t\"src/javascript/components/payment/stripe/stripe-confirm.tsx\": 16275,\n\t\"src/javascript/components/payment/stripe/stripe-elements.tsx\": 10143,\n\t\"src/javascript/components/payment/stripe/stripe-form.tsx\": 49689,\n\t\"src/javascript/components/payment/stripe/stripe-keys-form.tsx\": 90730,\n\t\"src/javascript/components/payment/stripe/stripe-modal.tsx\": 96464,\n\t\"src/javascript/components/payment/update-card-modal.tsx\": 78258,\n\t\"src/javascript/components/payment/wallet-info.tsx\": 47683,\n\t\"src/javascript/components/plan-categories/delete-plan-category.tsx\": 32796,\n\t\"src/javascript/components/plan-categories/manage-plan-category.tsx\": 4025,\n\t\"src/javascript/components/plan-categories/plan-categories-list.tsx\": 13724,\n\t\"src/javascript/components/plan-categories/plan-category-form.tsx\": 73193,\n\t\"src/javascript/components/plans/plan-card.tsx\": 92217,\n\t\"src/javascript/components/plans/plans-filter.tsx\": 64560,\n\t\"src/javascript/components/plans/plans-list.tsx\": 78189,\n\t\"src/javascript/components/prepaid-packs/packs-summary.tsx\": 71437,\n\t\"src/javascript/components/prepaid-packs/propose-packs-modal.tsx\": 28553,\n\t\"src/javascript/components/pricing/editable-price.tsx\": 53871,\n\t\"src/javascript/components/pricing/machines/configure-packs-button.tsx\": 63424,\n\t\"src/javascript/components/pricing/machines/create-pack.tsx\": 8044,\n\t\"src/javascript/components/pricing/machines/delete-pack.tsx\": 74014,\n\t\"src/javascript/components/pricing/machines/edit-pack.tsx\": 57492,\n\t\"src/javascript/components/pricing/machines/machines-pricing.tsx\": 32075,\n\t\"src/javascript/components/pricing/machines/pack-form.tsx\": 90536,\n\t\"src/javascript/components/pricing/spaces/configure-extended-prices-button.tsx\": 75872,\n\t\"src/javascript/components/pricing/spaces/create-extended-price.tsx\": 83738,\n\t\"src/javascript/components/pricing/spaces/delete-extended-price.tsx\": 31896,\n\t\"src/javascript/components/pricing/spaces/edit-extended-price.tsx\": 65134,\n\t\"src/javascript/components/pricing/spaces/extended-price-form.tsx\": 65302,\n\t\"src/javascript/components/pricing/spaces/spaces-pricing.tsx\": 7201,\n\t\"src/javascript/components/profile-completion/completion-header-info.tsx\": 11691,\n\t\"src/javascript/components/profile-completion/profile-form-option.tsx\": 82808,\n\t\"src/javascript/components/profile-custom-fields/profile-custom-fields-list.tsx\": 9655,\n\t\"src/javascript/components/settings/boolean-setting.tsx\": 86449,\n\t\"src/javascript/components/settings/check-list-setting.tsx\": 4167,\n\t\"src/javascript/components/settings/user-validation-setting.tsx\": 48872,\n\t\"src/javascript/components/socials/edit-socials.tsx\": 38463,\n\t\"src/javascript/components/socials/fab-socials.tsx\": 98859,\n\t\"src/javascript/components/store/categories/manage-product-category.tsx\": 22797,\n\t\"src/javascript/components/store/categories/product-categories-item.tsx\": 54162,\n\t\"src/javascript/components/store/categories/product-categories-tree.tsx\": 36792,\n\t\"src/javascript/components/store/categories/product-categories.tsx\": 76475,\n\t\"src/javascript/components/store/categories/product-category-form.tsx\": 98539,\n\t\"src/javascript/components/store/clone-product-modal.tsx\": 24749,\n\t\"src/javascript/components/store/edit-product.tsx\": 74361,\n\t\"src/javascript/components/store/filters/active-filters-tags.tsx\": 959,\n\t\"src/javascript/components/store/filters/categories-filter.tsx\": 83280,\n\t\"src/javascript/components/store/filters/keyword-filter.tsx\": 52635,\n\t\"src/javascript/components/store/filters/machines-filter.tsx\": 3825,\n\t\"src/javascript/components/store/filters/stock-filter.tsx\": 42858,\n\t\"src/javascript/components/store/new-product.tsx\": 82804,\n\t\"src/javascript/components/store/order-actions.tsx\": 45145,\n\t\"src/javascript/components/store/order-item.tsx\": 38072,\n\t\"src/javascript/components/store/orders.tsx\": 91243,\n\t\"src/javascript/components/store/product-form.tsx\": 67516,\n\t\"src/javascript/components/store/product-item.tsx\": 78697,\n\t\"src/javascript/components/store/product-price.tsx\": 26822,\n\t\"src/javascript/components/store/product-stock-form.tsx\": 40268,\n\t\"src/javascript/components/store/product-stock-modal.tsx\": 57771,\n\t\"src/javascript/components/store/products.tsx\": 74823,\n\t\"src/javascript/components/store/show-order.tsx\": 35622,\n\t\"src/javascript/components/store/store-list-header.tsx\": 75488,\n\t\"src/javascript/components/store/store-product-item.tsx\": 56233,\n\t\"src/javascript/components/store/store-product.tsx\": 93467,\n\t\"src/javascript/components/store/store-settings.tsx\": 21326,\n\t\"src/javascript/components/store/store.tsx\": 40978,\n\t\"src/javascript/components/subscriptions/free-extend-modal.tsx\": 26614,\n\t\"src/javascript/components/subscriptions/renew-modal.tsx\": 79283,\n\t\"src/javascript/components/subscriptions/subscribe-modal.tsx\": 86050,\n\t\"src/javascript/components/supporting-documents/delete-supporting-documents-type-modal.tsx\": 28550,\n\t\"src/javascript/components/supporting-documents/supporting-documents-files.tsx\": 66144,\n\t\"src/javascript/components/supporting-documents/supporting-documents-refusal-form.tsx\": 33121,\n\t\"src/javascript/components/supporting-documents/supporting-documents-refusal-modal.tsx\": 98013,\n\t\"src/javascript/components/supporting-documents/supporting-documents-type-form.tsx\": 23678,\n\t\"src/javascript/components/supporting-documents/supporting-documents-type-modal.tsx\": 61624,\n\t\"src/javascript/components/supporting-documents/supporting-documents-types-list.tsx\": 59716,\n\t\"src/javascript/components/supporting-documents/supporting-documents-validation.tsx\": 13157,\n\t\"src/javascript/components/user/avatar-input.tsx\": 44737,\n\t\"src/javascript/components/user/avatar.tsx\": 93414,\n\t\"src/javascript/components/user/change-password.tsx\": 25902,\n\t\"src/javascript/components/user/change-role-modal.tsx\": 10874,\n\t\"src/javascript/components/user/gender-input.tsx\": 30260,\n\t\"src/javascript/components/user/member-select.tsx\": 42026,\n\t\"src/javascript/components/user/password-input.tsx\": 46135,\n\t\"src/javascript/components/user/user-profile-form.tsx\": 71448,\n\t\"src/javascript/components/user/user-validation.tsx\": 30957\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 60562;","var map = {\n\t\"./about\": 77177,\n\t\"./about.js\": 77177,\n\t\"./admin/abuses\": 82088,\n\t\"./admin/abuses.js\": 82088,\n\t\"./admin/authentications\": 22196,\n\t\"./admin/authentications.js\": 22196,\n\t\"./admin/calendar\": 79051,\n\t\"./admin/calendar.js\": 79051,\n\t\"./admin/coupons\": 45500,\n\t\"./admin/coupons.js\": 45500,\n\t\"./admin/events\": 23705,\n\t\"./admin/events.js\": 23705,\n\t\"./admin/graphs\": 72307,\n\t\"./admin/graphs.js\": 72307,\n\t\"./admin/groups\": 74400,\n\t\"./admin/groups.js\": 74400,\n\t\"./admin/invoices\": 86926,\n\t\"./admin/invoices.js\": 86926,\n\t\"./admin/members\": 24972,\n\t\"./admin/members.js\": 24972,\n\t\"./admin/open_api_clients\": 3008,\n\t\"./admin/open_api_clients.js\": 3008,\n\t\"./admin/orders\": 77385,\n\t\"./admin/orders.js\": 77385,\n\t\"./admin/plans\": 86920,\n\t\"./admin/plans.js\": 86920,\n\t\"./admin/price_category\": 63172,\n\t\"./admin/price_category.js\": 63172,\n\t\"./admin/pricing\": 34627,\n\t\"./admin/pricing.js\": 34627,\n\t\"./admin/projects\": 19258,\n\t\"./admin/projects.js\": 19258,\n\t\"./admin/settings\": 69259,\n\t\"./admin/settings.js\": 69259,\n\t\"./admin/statistics\": 24736,\n\t\"./admin/statistics.js\": 24736,\n\t\"./admin/store\": 64284,\n\t\"./admin/store.js\": 64284,\n\t\"./admin/store_products\": 16839,\n\t\"./admin/store_products.js\": 16839,\n\t\"./admin/tags\": 94618,\n\t\"./admin/tags.js\": 94618,\n\t\"./admin/trainings\": 74604,\n\t\"./admin/trainings.js\": 74604,\n\t\"./application\": 97615,\n\t\"./application.js\": 97615,\n\t\"./calendar\": 38691,\n\t\"./calendar.js\": 38691,\n\t\"./cart\": 10199,\n\t\"./cart.js\": 10199,\n\t\"./cookies\": 65009,\n\t\"./cookies.js\": 65009,\n\t\"./dashboard\": 71735,\n\t\"./dashboard.js\": 71735,\n\t\"./events.js\": 37140,\n\t\"./events.js.erb\": 37140,\n\t\"./header\": 5220,\n\t\"./header.js\": 5220,\n\t\"./home\": 47714,\n\t\"./home.js\": 47714,\n\t\"./machines.js\": 72338,\n\t\"./machines.js.erb\": 72338,\n\t\"./main_nav\": 35464,\n\t\"./main_nav.js\": 35464,\n\t\"./members\": 34520,\n\t\"./members.js\": 34520,\n\t\"./notifications\": 6250,\n\t\"./notifications.js\": 6250,\n\t\"./orders\": 98522,\n\t\"./orders.js\": 98522,\n\t\"./plans\": 2812,\n\t\"./plans.js\": 2812,\n\t\"./privacy\": 83140,\n\t\"./privacy.js\": 83140,\n\t\"./products\": 45416,\n\t\"./products.js\": 45416,\n\t\"./profile\": 3861,\n\t\"./profile.js\": 3861,\n\t\"./projects\": 56593,\n\t\"./projects.js\": 56593,\n\t\"./spaces.js\": 84047,\n\t\"./spaces.js.erb\": 84047,\n\t\"./store\": 89596,\n\t\"./store.js\": 89596,\n\t\"./trainings.js\": 32291,\n\t\"./trainings.js.erb\": 32291,\n\t\"./wallet\": 74474,\n\t\"./wallet.js\": 74474,\n\t\"src/javascript/controllers/about\": 77177,\n\t\"src/javascript/controllers/about.js\": 77177,\n\t\"src/javascript/controllers/admin/abuses\": 82088,\n\t\"src/javascript/controllers/admin/abuses.js\": 82088,\n\t\"src/javascript/controllers/admin/authentications\": 22196,\n\t\"src/javascript/controllers/admin/authentications.js\": 22196,\n\t\"src/javascript/controllers/admin/calendar\": 79051,\n\t\"src/javascript/controllers/admin/calendar.js\": 79051,\n\t\"src/javascript/controllers/admin/coupons\": 45500,\n\t\"src/javascript/controllers/admin/coupons.js\": 45500,\n\t\"src/javascript/controllers/admin/events\": 23705,\n\t\"src/javascript/controllers/admin/events.js\": 23705,\n\t\"src/javascript/controllers/admin/graphs\": 72307,\n\t\"src/javascript/controllers/admin/graphs.js\": 72307,\n\t\"src/javascript/controllers/admin/groups\": 74400,\n\t\"src/javascript/controllers/admin/groups.js\": 74400,\n\t\"src/javascript/controllers/admin/invoices\": 86926,\n\t\"src/javascript/controllers/admin/invoices.js\": 86926,\n\t\"src/javascript/controllers/admin/members\": 24972,\n\t\"src/javascript/controllers/admin/members.js\": 24972,\n\t\"src/javascript/controllers/admin/open_api_clients\": 3008,\n\t\"src/javascript/controllers/admin/open_api_clients.js\": 3008,\n\t\"src/javascript/controllers/admin/orders\": 77385,\n\t\"src/javascript/controllers/admin/orders.js\": 77385,\n\t\"src/javascript/controllers/admin/plans\": 86920,\n\t\"src/javascript/controllers/admin/plans.js\": 86920,\n\t\"src/javascript/controllers/admin/price_category\": 63172,\n\t\"src/javascript/controllers/admin/price_category.js\": 63172,\n\t\"src/javascript/controllers/admin/pricing\": 34627,\n\t\"src/javascript/controllers/admin/pricing.js\": 34627,\n\t\"src/javascript/controllers/admin/projects\": 19258,\n\t\"src/javascript/controllers/admin/projects.js\": 19258,\n\t\"src/javascript/controllers/admin/settings\": 69259,\n\t\"src/javascript/controllers/admin/settings.js\": 69259,\n\t\"src/javascript/controllers/admin/statistics\": 24736,\n\t\"src/javascript/controllers/admin/statistics.js\": 24736,\n\t\"src/javascript/controllers/admin/store\": 64284,\n\t\"src/javascript/controllers/admin/store.js\": 64284,\n\t\"src/javascript/controllers/admin/store_products\": 16839,\n\t\"src/javascript/controllers/admin/store_products.js\": 16839,\n\t\"src/javascript/controllers/admin/tags\": 94618,\n\t\"src/javascript/controllers/admin/tags.js\": 94618,\n\t\"src/javascript/controllers/admin/trainings\": 74604,\n\t\"src/javascript/controllers/admin/trainings.js\": 74604,\n\t\"src/javascript/controllers/application\": 97615,\n\t\"src/javascript/controllers/application.js\": 97615,\n\t\"src/javascript/controllers/calendar\": 38691,\n\t\"src/javascript/controllers/calendar.js\": 38691,\n\t\"src/javascript/controllers/cart\": 10199,\n\t\"src/javascript/controllers/cart.js\": 10199,\n\t\"src/javascript/controllers/cookies\": 65009,\n\t\"src/javascript/controllers/cookies.js\": 65009,\n\t\"src/javascript/controllers/dashboard\": 71735,\n\t\"src/javascript/controllers/dashboard.js\": 71735,\n\t\"src/javascript/controllers/events.js\": 37140,\n\t\"src/javascript/controllers/events.js.erb\": 37140,\n\t\"src/javascript/controllers/header\": 5220,\n\t\"src/javascript/controllers/header.js\": 5220,\n\t\"src/javascript/controllers/home\": 47714,\n\t\"src/javascript/controllers/home.js\": 47714,\n\t\"src/javascript/controllers/machines.js\": 72338,\n\t\"src/javascript/controllers/machines.js.erb\": 72338,\n\t\"src/javascript/controllers/main_nav\": 35464,\n\t\"src/javascript/controllers/main_nav.js\": 35464,\n\t\"src/javascript/controllers/members\": 34520,\n\t\"src/javascript/controllers/members.js\": 34520,\n\t\"src/javascript/controllers/notifications\": 6250,\n\t\"src/javascript/controllers/notifications.js\": 6250,\n\t\"src/javascript/controllers/orders\": 98522,\n\t\"src/javascript/controllers/orders.js\": 98522,\n\t\"src/javascript/controllers/plans\": 2812,\n\t\"src/javascript/controllers/plans.js\": 2812,\n\t\"src/javascript/controllers/privacy\": 83140,\n\t\"src/javascript/controllers/privacy.js\": 83140,\n\t\"src/javascript/controllers/products\": 45416,\n\t\"src/javascript/controllers/products.js\": 45416,\n\t\"src/javascript/controllers/profile\": 3861,\n\t\"src/javascript/controllers/profile.js\": 3861,\n\t\"src/javascript/controllers/projects\": 56593,\n\t\"src/javascript/controllers/projects.js\": 56593,\n\t\"src/javascript/controllers/spaces.js\": 84047,\n\t\"src/javascript/controllers/spaces.js.erb\": 84047,\n\t\"src/javascript/controllers/store\": 89596,\n\t\"src/javascript/controllers/store.js\": 89596,\n\t\"src/javascript/controllers/trainings.js\": 32291,\n\t\"src/javascript/controllers/trainings.js.erb\": 32291,\n\t\"src/javascript/controllers/wallet\": 74474,\n\t\"src/javascript/controllers/wallet.js\": 74474\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 56364;","var map = {\n\t\"./bs-jasny-fileinput\": 76791,\n\t\"./bs-jasny-fileinput.js\": 76791,\n\t\"./cart\": 51277,\n\t\"./cart.js\": 51277,\n\t\"./compile\": 68271,\n\t\"./compile.js\": 68271,\n\t\"./confirmation_needed\": 11102,\n\t\"./confirmation_needed.js\": 11102,\n\t\"./coupon\": 18346,\n\t\"./coupon.js\": 18346,\n\t\"./directives\": 49557,\n\t\"./directives.js\": 49557,\n\t\"./fab_user_avatar\": 73426,\n\t\"./fab_user_avatar.js\": 73426,\n\t\"./home/events\": 45874,\n\t\"./home/events.js\": 45874,\n\t\"./home/news\": 50943,\n\t\"./home/news.js\": 50943,\n\t\"./home/projects\": 92156,\n\t\"./home/projects.js\": 92156,\n\t\"./home/twitter\": 74917,\n\t\"./home/twitter.js\": 74917,\n\t\"./members\": 22519,\n\t\"./members.js\": 22519,\n\t\"./post_render\": 11842,\n\t\"./post_render.js\": 11842,\n\t\"./selectMember\": 97741,\n\t\"./selectMember.js\": 97741,\n\t\"./settings/number-setting\": 6163,\n\t\"./settings/number-setting.js\": 6163,\n\t\"./settings/select-multiple-setting\": 86884,\n\t\"./settings/select-multiple-setting.js\": 86884,\n\t\"./settings/select-setting\": 5845,\n\t\"./settings/select-setting.js\": 5845,\n\t\"./settings/text-setting\": 55869,\n\t\"./settings/text-setting.js\": 55869,\n\t\"./socialLink\": 22055,\n\t\"./socialLink.js\": 22055,\n\t\"./validators\": 86859,\n\t\"./validators.js\": 86859,\n\t\"src/javascript/directives/bs-jasny-fileinput\": 76791,\n\t\"src/javascript/directives/bs-jasny-fileinput.js\": 76791,\n\t\"src/javascript/directives/cart\": 51277,\n\t\"src/javascript/directives/cart.js\": 51277,\n\t\"src/javascript/directives/compile\": 68271,\n\t\"src/javascript/directives/compile.js\": 68271,\n\t\"src/javascript/directives/confirmation_needed\": 11102,\n\t\"src/javascript/directives/confirmation_needed.js\": 11102,\n\t\"src/javascript/directives/coupon\": 18346,\n\t\"src/javascript/directives/coupon.js\": 18346,\n\t\"src/javascript/directives/directives\": 49557,\n\t\"src/javascript/directives/directives.js\": 49557,\n\t\"src/javascript/directives/fab_user_avatar\": 73426,\n\t\"src/javascript/directives/fab_user_avatar.js\": 73426,\n\t\"src/javascript/directives/home/events\": 45874,\n\t\"src/javascript/directives/home/events.js\": 45874,\n\t\"src/javascript/directives/home/news\": 50943,\n\t\"src/javascript/directives/home/news.js\": 50943,\n\t\"src/javascript/directives/home/projects\": 92156,\n\t\"src/javascript/directives/home/projects.js\": 92156,\n\t\"src/javascript/directives/home/twitter\": 74917,\n\t\"src/javascript/directives/home/twitter.js\": 74917,\n\t\"src/javascript/directives/members\": 22519,\n\t\"src/javascript/directives/members.js\": 22519,\n\t\"src/javascript/directives/post_render\": 11842,\n\t\"src/javascript/directives/post_render.js\": 11842,\n\t\"src/javascript/directives/selectMember\": 97741,\n\t\"src/javascript/directives/selectMember.js\": 97741,\n\t\"src/javascript/directives/settings/number-setting\": 6163,\n\t\"src/javascript/directives/settings/number-setting.js\": 6163,\n\t\"src/javascript/directives/settings/select-multiple-setting\": 86884,\n\t\"src/javascript/directives/settings/select-multiple-setting.js\": 86884,\n\t\"src/javascript/directives/settings/select-setting\": 5845,\n\t\"src/javascript/directives/settings/select-setting.js\": 5845,\n\t\"src/javascript/directives/settings/text-setting\": 55869,\n\t\"src/javascript/directives/settings/text-setting.js\": 55869,\n\t\"src/javascript/directives/socialLink\": 22055,\n\t\"src/javascript/directives/socialLink.js\": 22055,\n\t\"src/javascript/directives/validators\": 86859,\n\t\"src/javascript/directives/validators.js\": 86859\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 35474;","var map = {\n\t\"./filters\": 18735,\n\t\"./filters.js\": 18735,\n\t\"src/javascript/filters/filters\": 18735,\n\t\"src/javascript/filters/filters.js\": 18735\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 23546;","var map = {\n\t\"./_t\": 9120,\n\t\"./_t.js\": 9120,\n\t\"./abuse\": 11397,\n\t\"./abuse.js\": 11397,\n\t\"./accounting_period\": 82069,\n\t\"./accounting_period.js\": 82069,\n\t\"./admin\": 3844,\n\t\"./admin.js\": 3844,\n\t\"./age_range\": 54911,\n\t\"./age_range.js\": 54911,\n\t\"./auth\": 35026,\n\t\"./auth.js\": 35026,\n\t\"./authProvider\": 20981,\n\t\"./authProvider.js\": 20981,\n\t\"./availability\": 88023,\n\t\"./availability.js\": 88023,\n\t\"./calendar\": 16329,\n\t\"./calendar.js\": 16329,\n\t\"./category\": 17916,\n\t\"./category.js\": 17916,\n\t\"./component\": 56513,\n\t\"./component.js\": 56513,\n\t\"./coupon\": 34372,\n\t\"./coupon.js\": 34372,\n\t\"./credit\": 93015,\n\t\"./credit.js\": 93015,\n\t\"./csrf\": 69120,\n\t\"./csrf.js\": 69120,\n\t\"./customAsset\": 60921,\n\t\"./customAsset.js\": 60921,\n\t\"./diacritics\": 43011,\n\t\"./diacritics.js\": 43011,\n\t\"./dialogs\": 91104,\n\t\"./dialogs.js\": 91104,\n\t\"./elastic\": 99852,\n\t\"./elastic.js\": 99852,\n\t\"./event\": 35371,\n\t\"./event.js\": 35371,\n\t\"./event_theme\": 96930,\n\t\"./event_theme.js\": 96930,\n\t\"./export\": 36895,\n\t\"./export.js\": 36895,\n\t\"./fab_analytics\": 21293,\n\t\"./fab_analytics.js\": 21293,\n\t\"./group\": 23307,\n\t\"./group.js\": 23307,\n\t\"./help\": 51560,\n\t\"./help.js\": 51560,\n\t\"./helpers\": 38557,\n\t\"./helpers.js\": 38557,\n\t\"./ical\": 69230,\n\t\"./ical.js\": 69230,\n\t\"./icalendar\": 86756,\n\t\"./icalendar.js\": 86756,\n\t\"./import\": 51116,\n\t\"./import.js\": 51116,\n\t\"./invoice\": 50352,\n\t\"./invoice.js\": 50352,\n\t\"./licence\": 69874,\n\t\"./licence.js\": 69874,\n\t\"./local_payment\": 20018,\n\t\"./local_payment.js\": 20018,\n\t\"./machine\": 79072,\n\t\"./machine.js\": 79072,\n\t\"./member\": 59213,\n\t\"./member.js\": 59213,\n\t\"./notification\": 78080,\n\t\"./notification.js\": 78080,\n\t\"./open_api_client\": 80335,\n\t\"./open_api_client.js\": 80335,\n\t\"./openlab_project\": 89849,\n\t\"./openlab_project.js\": 89849,\n\t\"./pagination_service\": 935,\n\t\"./pagination_service.js\": 935,\n\t\"./payment\": 53264,\n\t\"./payment.js\": 53264,\n\t\"./plan\": 41355,\n\t\"./plan.js\": 41355,\n\t\"./plan_category\": 86949,\n\t\"./plan_category.js\": 86949,\n\t\"./price\": 68748,\n\t\"./price.js\": 68748,\n\t\"./price_category\": 69455,\n\t\"./price_category.js\": 69455,\n\t\"./pricing\": 16389,\n\t\"./pricing.js\": 16389,\n\t\"./profile_custom_field\": 48158,\n\t\"./profile_custom_field.js\": 48158,\n\t\"./project\": 51685,\n\t\"./project.js\": 51685,\n\t\"./proof_of_identity_type\": 10444,\n\t\"./proof_of_identity_type.js\": 10444,\n\t\"./reservation\": 71929,\n\t\"./reservation.js\": 71929,\n\t\"./session\": 3928,\n\t\"./session.js\": 3928,\n\t\"./setting\": 15292,\n\t\"./setting.js\": 15292,\n\t\"./slots_reservation\": 64262,\n\t\"./slots_reservation.js\": 64262,\n\t\"./socialNetworks\": 31476,\n\t\"./socialNetworks.js\": 31476,\n\t\"./space\": 39419,\n\t\"./space.js\": 39419,\n\t\"./statistics\": 3466,\n\t\"./statistics.js\": 3466,\n\t\"./subscription\": 26762,\n\t\"./subscription.js\": 26762,\n\t\"./tag\": 6877,\n\t\"./tag.js\": 6877,\n\t\"./theme\": 97618,\n\t\"./theme.js\": 97618,\n\t\"./training\": 27201,\n\t\"./training.js\": 27201,\n\t\"./trainings_pricing\": 88426,\n\t\"./trainings_pricing.js\": 88426,\n\t\"./translations\": 90310,\n\t\"./translations.js\": 90310,\n\t\"./user\": 83688,\n\t\"./user.js\": 83688,\n\t\"./version\": 46676,\n\t\"./version.js\": 46676,\n\t\"./wallet\": 12260,\n\t\"./wallet.js\": 12260,\n\t\"src/javascript/services/_t\": 9120,\n\t\"src/javascript/services/_t.js\": 9120,\n\t\"src/javascript/services/abuse\": 11397,\n\t\"src/javascript/services/abuse.js\": 11397,\n\t\"src/javascript/services/accounting_period\": 82069,\n\t\"src/javascript/services/accounting_period.js\": 82069,\n\t\"src/javascript/services/admin\": 3844,\n\t\"src/javascript/services/admin.js\": 3844,\n\t\"src/javascript/services/age_range\": 54911,\n\t\"src/javascript/services/age_range.js\": 54911,\n\t\"src/javascript/services/auth\": 35026,\n\t\"src/javascript/services/auth.js\": 35026,\n\t\"src/javascript/services/authProvider\": 20981,\n\t\"src/javascript/services/authProvider.js\": 20981,\n\t\"src/javascript/services/availability\": 88023,\n\t\"src/javascript/services/availability.js\": 88023,\n\t\"src/javascript/services/calendar\": 16329,\n\t\"src/javascript/services/calendar.js\": 16329,\n\t\"src/javascript/services/category\": 17916,\n\t\"src/javascript/services/category.js\": 17916,\n\t\"src/javascript/services/component\": 56513,\n\t\"src/javascript/services/component.js\": 56513,\n\t\"src/javascript/services/coupon\": 34372,\n\t\"src/javascript/services/coupon.js\": 34372,\n\t\"src/javascript/services/credit\": 93015,\n\t\"src/javascript/services/credit.js\": 93015,\n\t\"src/javascript/services/csrf\": 69120,\n\t\"src/javascript/services/csrf.js\": 69120,\n\t\"src/javascript/services/customAsset\": 60921,\n\t\"src/javascript/services/customAsset.js\": 60921,\n\t\"src/javascript/services/diacritics\": 43011,\n\t\"src/javascript/services/diacritics.js\": 43011,\n\t\"src/javascript/services/dialogs\": 91104,\n\t\"src/javascript/services/dialogs.js\": 91104,\n\t\"src/javascript/services/elastic\": 99852,\n\t\"src/javascript/services/elastic.js\": 99852,\n\t\"src/javascript/services/event\": 35371,\n\t\"src/javascript/services/event.js\": 35371,\n\t\"src/javascript/services/event_theme\": 96930,\n\t\"src/javascript/services/event_theme.js\": 96930,\n\t\"src/javascript/services/export\": 36895,\n\t\"src/javascript/services/export.js\": 36895,\n\t\"src/javascript/services/fab_analytics\": 21293,\n\t\"src/javascript/services/fab_analytics.js\": 21293,\n\t\"src/javascript/services/group\": 23307,\n\t\"src/javascript/services/group.js\": 23307,\n\t\"src/javascript/services/help\": 51560,\n\t\"src/javascript/services/help.js\": 51560,\n\t\"src/javascript/services/helpers\": 38557,\n\t\"src/javascript/services/helpers.js\": 38557,\n\t\"src/javascript/services/ical\": 69230,\n\t\"src/javascript/services/ical.js\": 69230,\n\t\"src/javascript/services/icalendar\": 86756,\n\t\"src/javascript/services/icalendar.js\": 86756,\n\t\"src/javascript/services/import\": 51116,\n\t\"src/javascript/services/import.js\": 51116,\n\t\"src/javascript/services/invoice\": 50352,\n\t\"src/javascript/services/invoice.js\": 50352,\n\t\"src/javascript/services/licence\": 69874,\n\t\"src/javascript/services/licence.js\": 69874,\n\t\"src/javascript/services/local_payment\": 20018,\n\t\"src/javascript/services/local_payment.js\": 20018,\n\t\"src/javascript/services/machine\": 79072,\n\t\"src/javascript/services/machine.js\": 79072,\n\t\"src/javascript/services/member\": 59213,\n\t\"src/javascript/services/member.js\": 59213,\n\t\"src/javascript/services/notification\": 78080,\n\t\"src/javascript/services/notification.js\": 78080,\n\t\"src/javascript/services/open_api_client\": 80335,\n\t\"src/javascript/services/open_api_client.js\": 80335,\n\t\"src/javascript/services/openlab_project\": 89849,\n\t\"src/javascript/services/openlab_project.js\": 89849,\n\t\"src/javascript/services/pagination_service\": 935,\n\t\"src/javascript/services/pagination_service.js\": 935,\n\t\"src/javascript/services/payment\": 53264,\n\t\"src/javascript/services/payment.js\": 53264,\n\t\"src/javascript/services/plan\": 41355,\n\t\"src/javascript/services/plan.js\": 41355,\n\t\"src/javascript/services/plan_category\": 86949,\n\t\"src/javascript/services/plan_category.js\": 86949,\n\t\"src/javascript/services/price\": 68748,\n\t\"src/javascript/services/price.js\": 68748,\n\t\"src/javascript/services/price_category\": 69455,\n\t\"src/javascript/services/price_category.js\": 69455,\n\t\"src/javascript/services/pricing\": 16389,\n\t\"src/javascript/services/pricing.js\": 16389,\n\t\"src/javascript/services/profile_custom_field\": 48158,\n\t\"src/javascript/services/profile_custom_field.js\": 48158,\n\t\"src/javascript/services/project\": 51685,\n\t\"src/javascript/services/project.js\": 51685,\n\t\"src/javascript/services/proof_of_identity_type\": 10444,\n\t\"src/javascript/services/proof_of_identity_type.js\": 10444,\n\t\"src/javascript/services/reservation\": 71929,\n\t\"src/javascript/services/reservation.js\": 71929,\n\t\"src/javascript/services/session\": 3928,\n\t\"src/javascript/services/session.js\": 3928,\n\t\"src/javascript/services/setting\": 15292,\n\t\"src/javascript/services/setting.js\": 15292,\n\t\"src/javascript/services/slots_reservation\": 64262,\n\t\"src/javascript/services/slots_reservation.js\": 64262,\n\t\"src/javascript/services/socialNetworks\": 31476,\n\t\"src/javascript/services/socialNetworks.js\": 31476,\n\t\"src/javascript/services/space\": 39419,\n\t\"src/javascript/services/space.js\": 39419,\n\t\"src/javascript/services/statistics\": 3466,\n\t\"src/javascript/services/statistics.js\": 3466,\n\t\"src/javascript/services/subscription\": 26762,\n\t\"src/javascript/services/subscription.js\": 26762,\n\t\"src/javascript/services/tag\": 6877,\n\t\"src/javascript/services/tag.js\": 6877,\n\t\"src/javascript/services/theme\": 97618,\n\t\"src/javascript/services/theme.js\": 97618,\n\t\"src/javascript/services/training\": 27201,\n\t\"src/javascript/services/training.js\": 27201,\n\t\"src/javascript/services/trainings_pricing\": 88426,\n\t\"src/javascript/services/trainings_pricing.js\": 88426,\n\t\"src/javascript/services/translations\": 90310,\n\t\"src/javascript/services/translations.js\": 90310,\n\t\"src/javascript/services/user\": 83688,\n\t\"src/javascript/services/user.js\": 83688,\n\t\"src/javascript/services/version\": 46676,\n\t\"src/javascript/services/version.js\": 46676,\n\t\"src/javascript/services/wallet\": 12260,\n\t\"src/javascript/services/wallet.js\": 12260\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 49577;","var map = {\n\t\"./date-iso.d\": 21905,\n\t\"./date-iso.d.ts\": 21905,\n\t\"./import-png.d\": 30283,\n\t\"./import-png.d.ts\": 30283,\n\t\"./import-svg.d\": 80365,\n\t\"./import-svg.d.ts\": 80365,\n\t\"src/javascript/typings/date-iso.d\": 21905,\n\t\"src/javascript/typings/date-iso.d.ts\": 21905,\n\t\"src/javascript/typings/import-png.d\": 30283,\n\t\"src/javascript/typings/import-png.d.ts\": 30283,\n\t\"src/javascript/typings/import-svg.d\": 80365,\n\t\"src/javascript/typings/import-svg.d.ts\": 80365\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 79057;","var map = {\n\t\"./admin/abuses\": 9878,\n\t\"./admin/abuses/\": 9878,\n\t\"./admin/abuses/index\": 9878,\n\t\"./admin/abuses/index.html\": 9878,\n\t\"./admin/admins/new\": 96276,\n\t\"./admin/admins/new.html\": 96276,\n\t\"./admin/authentications\": 69597,\n\t\"./admin/authentications/\": 69597,\n\t\"./admin/authentications/edit\": 81896,\n\t\"./admin/authentications/edit.html\": 81896,\n\t\"./admin/authentications/index\": 69597,\n\t\"./admin/authentications/index.html\": 69597,\n\t\"./admin/authentications/new\": 32787,\n\t\"./admin/authentications/new.html\": 32787,\n\t\"./admin/calendar/calendar\": 25353,\n\t\"./admin/calendar/calendar.html\": 25353,\n\t\"./admin/calendar/deleteRecurrent\": 24761,\n\t\"./admin/calendar/deleteRecurrent.html\": 24761,\n\t\"./admin/calendar/eventModal\": 57386,\n\t\"./admin/calendar/eventModal.html\": 57386,\n\t\"./admin/calendar/icalendar\": 84801,\n\t\"./admin/calendar/icalendar.html\": 84801,\n\t\"./admin/coupons/_form\": 36988,\n\t\"./admin/coupons/_form.html\": 36988,\n\t\"./admin/coupons/edit\": 80524,\n\t\"./admin/coupons/edit.html\": 80524,\n\t\"./admin/coupons/new\": 58324,\n\t\"./admin/coupons/new.html\": 58324,\n\t\"./admin/events\": 46848,\n\t\"./admin/events/\": 46848,\n\t\"./admin/events/filters\": 69704,\n\t\"./admin/events/filters.html\": 69704,\n\t\"./admin/events/index\": 46848,\n\t\"./admin/events/index.html\": 46848,\n\t\"./admin/events/monitoring\": 10587,\n\t\"./admin/events/monitoring.html\": 10587,\n\t\"./admin/events/price_form\": 83000,\n\t\"./admin/events/price_form.html\": 83000,\n\t\"./admin/events/prices\": 83269,\n\t\"./admin/events/prices.html\": 83269,\n\t\"./admin/events/reservations\": 56697,\n\t\"./admin/events/reservations.html\": 56697,\n\t\"./admin/groups\": 9596,\n\t\"./admin/groups/\": 9596,\n\t\"./admin/groups/index\": 9596,\n\t\"./admin/groups/index.html\": 9596,\n\t\"./admin/invoices\": 95123,\n\t\"./admin/invoices/\": 95123,\n\t\"./admin/invoices/_period\": 91804,\n\t\"./admin/invoices/_period.html\": 91804,\n\t\"./admin/invoices/accountingExportModal\": 12443,\n\t\"./admin/invoices/accountingExportModal.html\": 12443,\n\t\"./admin/invoices/avoirModal\": 99413,\n\t\"./admin/invoices/avoirModal.html\": 99413,\n\t\"./admin/invoices/closePeriodModal\": 79844,\n\t\"./admin/invoices/closePeriodModal.html\": 79844,\n\t\"./admin/invoices/codes\": 81505,\n\t\"./admin/invoices/codes.html\": 81505,\n\t\"./admin/invoices/index\": 95123,\n\t\"./admin/invoices/index.html\": 95123,\n\t\"./admin/invoices/list\": 72863,\n\t\"./admin/invoices/list.html\": 72863,\n\t\"./admin/invoices/payment\": 86261,\n\t\"./admin/invoices/payment.html\": 86261,\n\t\"./admin/invoices/settings\": 57835,\n\t\"./admin/invoices/settings.html\": 57835,\n\t\"./admin/invoices/settings/editCode\": 7727,\n\t\"./admin/invoices/settings/editCode.html\": 7727,\n\t\"./admin/invoices/settings/editMultiVAT\": 62484,\n\t\"./admin/invoices/settings/editMultiVAT.html\": 62484,\n\t\"./admin/invoices/settings/editNumber\": 17769,\n\t\"./admin/invoices/settings/editNumber.html\": 17769,\n\t\"./admin/invoices/settings/editPrefix\": 50472,\n\t\"./admin/invoices/settings/editPrefix.html\": 50472,\n\t\"./admin/invoices/settings/editReference\": 3609,\n\t\"./admin/invoices/settings/editReference.html\": 3609,\n\t\"./admin/invoices/settings/editSchedulePrefix\": 86055,\n\t\"./admin/invoices/settings/editSchedulePrefix.html\": 86055,\n\t\"./admin/invoices/settings/editVAT\": 34408,\n\t\"./admin/invoices/settings/editVAT.html\": 34408,\n\t\"./admin/invoices/settings/multiVATHistory\": 70743,\n\t\"./admin/invoices/settings/multiVATHistory.html\": 70743,\n\t\"./admin/invoices/settings/stripeKeys\": 75597,\n\t\"./admin/invoices/settings/stripeKeys.html\": 75597,\n\t\"./admin/managers/new\": 57407,\n\t\"./admin/managers/new.html\": 57407,\n\t\"./admin/members\": 12113,\n\t\"./admin/members/\": 12113,\n\t\"./admin/members/_form\": 81467,\n\t\"./admin/members/_form.html\": 81467,\n\t\"./admin/members/administrators\": 80476,\n\t\"./admin/members/administrators.html\": 80476,\n\t\"./admin/members/change_role_modal\": 41295,\n\t\"./admin/members/change_role_modal.html\": 41295,\n\t\"./admin/members/edit\": 34771,\n\t\"./admin/members/edit.html\": 34771,\n\t\"./admin/members/import\": 48884,\n\t\"./admin/members/import.html\": 48884,\n\t\"./admin/members/import_result\": 11927,\n\t\"./admin/members/import_result.html\": 11927,\n\t\"./admin/members/index\": 12113,\n\t\"./admin/members/index.html\": 12113,\n\t\"./admin/members/managers\": 18018,\n\t\"./admin/members/managers.html\": 18018,\n\t\"./admin/members/members\": 71007,\n\t\"./admin/members/members.html\": 71007,\n\t\"./admin/members/new\": 18149,\n\t\"./admin/members/new.html\": 18149,\n\t\"./admin/members/partners\": 74285,\n\t\"./admin/members/partners.html\": 74285,\n\t\"./admin/members/users\": 64714,\n\t\"./admin/members/users.html\": 64714,\n\t\"./admin/open_api_clients/index.html\": 45488,\n\t\"./admin/open_api_clients/index.html.erb\": 45488,\n\t\"./admin/orders/show\": 23813,\n\t\"./admin/orders/show.html\": 23813,\n\t\"./admin/plans/_form\": 70825,\n\t\"./admin/plans/_form.html\": 70825,\n\t\"./admin/plans/categories\": 89693,\n\t\"./admin/plans/categories.html\": 89693,\n\t\"./admin/plans/edit\": 89442,\n\t\"./admin/plans/edit.html\": 89442,\n\t\"./admin/plans/new\": 58415,\n\t\"./admin/plans/new.html\": 58415,\n\t\"./admin/pricing\": 35646,\n\t\"./admin/pricing/\": 35646,\n\t\"./admin/pricing/coupons\": 44054,\n\t\"./admin/pricing/coupons.html\": 44054,\n\t\"./admin/pricing/credits\": 35149,\n\t\"./admin/pricing/credits.html\": 35149,\n\t\"./admin/pricing/index\": 35646,\n\t\"./admin/pricing/index.html\": 35646,\n\t\"./admin/pricing/machine_hours\": 8376,\n\t\"./admin/pricing/machine_hours.html\": 8376,\n\t\"./admin/pricing/sendCoupon\": 22951,\n\t\"./admin/pricing/sendCoupon.html\": 22951,\n\t\"./admin/pricing/spaces\": 66430,\n\t\"./admin/pricing/spaces.html\": 66430,\n\t\"./admin/pricing/subscriptions\": 56430,\n\t\"./admin/pricing/subscriptions.html\": 56430,\n\t\"./admin/pricing/trainings\": 61138,\n\t\"./admin/pricing/trainings.html\": 61138,\n\t\"./admin/projects\": 43606,\n\t\"./admin/projects/\": 43606,\n\t\"./admin/projects/index\": 43606,\n\t\"./admin/projects/index.html\": 43606,\n\t\"./admin/projects/licences\": 24358,\n\t\"./admin/projects/licences.html\": 24358,\n\t\"./admin/projects/materials\": 25319,\n\t\"./admin/projects/materials.html\": 25319,\n\t\"./admin/projects/settings\": 23206,\n\t\"./admin/projects/settings.html\": 23206,\n\t\"./admin/projects/themes\": 94822,\n\t\"./admin/projects/themes.html\": 94822,\n\t\"./admin/settings\": 75677,\n\t\"./admin/settings/\": 75677,\n\t\"./admin/settings/about\": 24539,\n\t\"./admin/settings/about.html\": 24539,\n\t\"./admin/settings/analyticsModal\": 42966,\n\t\"./admin/settings/analyticsModal.html\": 42966,\n\t\"./admin/settings/compte\": 92578,\n\t\"./admin/settings/compte.html\": 92578,\n\t\"./admin/settings/general\": 13847,\n\t\"./admin/settings/general.html\": 13847,\n\t\"./admin/settings/home_page\": 86339,\n\t\"./admin/settings/home_page.html\": 86339,\n\t\"./admin/settings/index\": 75677,\n\t\"./admin/settings/index.html\": 75677,\n\t\"./admin/settings/newSelectOption\": 74760,\n\t\"./admin/settings/newSelectOption.html\": 74760,\n\t\"./admin/settings/number\": 78292,\n\t\"./admin/settings/number.html\": 78292,\n\t\"./admin/settings/privacy\": 19838,\n\t\"./admin/settings/privacy.html\": 19838,\n\t\"./admin/settings/reservations\": 19799,\n\t\"./admin/settings/reservations.html\": 19799,\n\t\"./admin/settings/save_policy\": 11502,\n\t\"./admin/settings/save_policy.html\": 11502,\n\t\"./admin/settings/select\": 52983,\n\t\"./admin/settings/select-multiple\": 67176,\n\t\"./admin/settings/select-multiple.html\": 67176,\n\t\"./admin/settings/select.html\": 52983,\n\t\"./admin/settings/text\": 18708,\n\t\"./admin/settings/text.html\": 18708,\n\t\"./admin/statistics\": 34723,\n\t\"./admin/statistics/\": 34723,\n\t\"./admin/statistics/export\": 98488,\n\t\"./admin/statistics/export.html\": 98488,\n\t\"./admin/statistics/graphs\": 89284,\n\t\"./admin/statistics/graphs.html\": 89284,\n\t\"./admin/statistics/index\": 34723,\n\t\"./admin/statistics/index.html\": 34723,\n\t\"./admin/store\": 27408,\n\t\"./admin/store/\": 27408,\n\t\"./admin/store/categories\": 25683,\n\t\"./admin/store/categories.html\": 25683,\n\t\"./admin/store/index\": 27408,\n\t\"./admin/store/index.html\": 27408,\n\t\"./admin/store/orders\": 66117,\n\t\"./admin/store/orders.html\": 66117,\n\t\"./admin/store/product_edit\": 10568,\n\t\"./admin/store/product_edit.html\": 10568,\n\t\"./admin/store/product_new\": 9198,\n\t\"./admin/store/product_new.html\": 9198,\n\t\"./admin/store/products\": 10122,\n\t\"./admin/store/products.html\": 10122,\n\t\"./admin/store/settings\": 26508,\n\t\"./admin/store/settings.html\": 26508,\n\t\"./admin/tags\": 62034,\n\t\"./admin/tags/\": 62034,\n\t\"./admin/tags/index\": 62034,\n\t\"./admin/tags/index.html\": 62034,\n\t\"./admin/trainings\": 44819,\n\t\"./admin/trainings/\": 44819,\n\t\"./admin/trainings/_form\": 44707,\n\t\"./admin/trainings/_form.html\": 44707,\n\t\"./admin/trainings/edit\": 56820,\n\t\"./admin/trainings/edit.html\": 56820,\n\t\"./admin/trainings/index\": 44819,\n\t\"./admin/trainings/index.html\": 44819,\n\t\"./admin/trainings/modal_edit\": 72663,\n\t\"./admin/trainings/modal_edit.html\": 72663,\n\t\"./admin/trainings/new\": 90549,\n\t\"./admin/trainings/new.html\": 90549,\n\t\"./admin/trainings/validTrainingModal\": 58770,\n\t\"./admin/trainings/validTrainingModal.html\": 58770,\n\t\"./admin/versions/upgradeModal\": 98692,\n\t\"./admin/versions/upgradeModal.html\": 98692,\n\t\"./calendar/calendar\": 77344,\n\t\"./calendar/calendar.html\": 77344,\n\t\"./calendar/filter\": 74706,\n\t\"./calendar/filter.html\": 74706,\n\t\"./calendar/filterAside\": 20585,\n\t\"./calendar/filterAside.html\": 20585,\n\t\"./cart\": 16177,\n\t\"./cart/\": 16177,\n\t\"./cart/index\": 16177,\n\t\"./cart/index.html\": 16177,\n\t\"./dashboard/events\": 78341,\n\t\"./dashboard/events.html\": 78341,\n\t\"./dashboard/invoices\": 62657,\n\t\"./dashboard/invoices.html\": 62657,\n\t\"./dashboard/nav\": 72505,\n\t\"./dashboard/nav.html\": 72505,\n\t\"./dashboard/orders\": 84297,\n\t\"./dashboard/orders.html\": 84297,\n\t\"./dashboard/payment_schedules\": 29972,\n\t\"./dashboard/payment_schedules.html\": 29972,\n\t\"./dashboard/profile\": 18880,\n\t\"./dashboard/profile.html\": 18880,\n\t\"./dashboard/projects\": 46083,\n\t\"./dashboard/projects.html\": 46083,\n\t\"./dashboard/proof_of_identity_files\": 34502,\n\t\"./dashboard/proof_of_identity_files.html\": 34502,\n\t\"./dashboard/reservations\": 27805,\n\t\"./dashboard/reservations.html\": 27805,\n\t\"./dashboard/settings\": 67784,\n\t\"./dashboard/settings.html\": 67784,\n\t\"./dashboard/trainings\": 36114,\n\t\"./dashboard/trainings.html\": 36114,\n\t\"./dashboard/wallet\": 59689,\n\t\"./dashboard/wallet.html\": 59689,\n\t\"./events\": 56244,\n\t\"./events/\": 56244,\n\t\"./events/_form\": 52881,\n\t\"./events/_form.html\": 52881,\n\t\"./events/deleteRecurrent\": 40720,\n\t\"./events/deleteRecurrent.html\": 40720,\n\t\"./events/edit\": 54310,\n\t\"./events/edit.html\": 54310,\n\t\"./events/editRecurrent\": 80899,\n\t\"./events/editRecurrent.html\": 80899,\n\t\"./events/index\": 56244,\n\t\"./events/index.html\": 56244,\n\t\"./events/modify_event_reservation_modal\": 38422,\n\t\"./events/modify_event_reservation_modal.html\": 38422,\n\t\"./events/new\": 50722,\n\t\"./events/new.html\": 50722,\n\t\"./events/show\": 95330,\n\t\"./events/show.html\": 95330,\n\t\"./home\": 72141,\n\t\"./home.html\": 72141,\n\t\"./home/events\": 4126,\n\t\"./home/events.html\": 4126,\n\t\"./home/members\": 94987,\n\t\"./home/members.html\": 94987,\n\t\"./home/news\": 84942,\n\t\"./home/news.html\": 84942,\n\t\"./home/projects\": 41542,\n\t\"./home/projects.html\": 41542,\n\t\"./home/twitter\": 36599,\n\t\"./home/twitter.html\": 36599,\n\t\"./machines\": 15956,\n\t\"./machines/\": 15956,\n\t\"./machines/_form\": 89138,\n\t\"./machines/_form.html\": 89138,\n\t\"./machines/edit\": 70295,\n\t\"./machines/edit.html\": 70295,\n\t\"./machines/index\": 15956,\n\t\"./machines/index.html\": 15956,\n\t\"./machines/new\": 82649,\n\t\"./machines/new.html\": 82649,\n\t\"./machines/reserve\": 2371,\n\t\"./machines/reserve.html\": 2371,\n\t\"./machines/show\": 45744,\n\t\"./machines/show.html\": 45744,\n\t\"./members\": 70015,\n\t\"./members/\": 70015,\n\t\"./members/index\": 70015,\n\t\"./members/index.html\": 70015,\n\t\"./members/show\": 32239,\n\t\"./members/show.html\": 32239,\n\t\"./notifications\": 82751,\n\t\"./notifications/\": 82751,\n\t\"./notifications/index\": 82751,\n\t\"./notifications/index.html\": 82751,\n\t\"./orders/show\": 99710,\n\t\"./orders/show.html\": 99710,\n\t\"./plans\": 20507,\n\t\"./plans/\": 20507,\n\t\"./plans/_plan\": 38403,\n\t\"./plans/_plan.html\": 38403,\n\t\"./plans/index\": 20507,\n\t\"./plans/index.html\": 20507,\n\t\"./products/show\": 53152,\n\t\"./products/show.html\": 53152,\n\t\"./profile/_token\": 30278,\n\t\"./profile/_token.html\": 30278,\n\t\"./profile/complete\": 2318,\n\t\"./profile/complete.html\": 2318,\n\t\"./profile/resend_code_modal\": 14077,\n\t\"./profile/resend_code_modal.html\": 14077,\n\t\"./projects\": 62888,\n\t\"./projects/\": 62888,\n\t\"./projects/_form\": 59137,\n\t\"./projects/_form.html\": 59137,\n\t\"./projects/edit\": 18141,\n\t\"./projects/edit.html\": 18141,\n\t\"./projects/index\": 62888,\n\t\"./projects/index.html\": 62888,\n\t\"./projects/new\": 34886,\n\t\"./projects/new.html\": 34886,\n\t\"./projects/show\": 61049,\n\t\"./projects/show.html\": 61049,\n\t\"./shared/ConfirmationNewModal\": 4920,\n\t\"./shared/ConfirmationNewModal.html\": 4920,\n\t\"./shared/_admin_form\": 98393,\n\t\"./shared/_admin_form.html\": 98393,\n\t\"./shared/_cart\": 8932,\n\t\"./shared/_cart.html\": 8932,\n\t\"./shared/_coupon\": 8642,\n\t\"./shared/_coupon.html\": 8642,\n\t\"./shared/_manager_form\": 97082,\n\t\"./shared/_manager_form.html\": 97082,\n\t\"./shared/_member_select\": 42672,\n\t\"./shared/_member_select.html\": 42672,\n\t\"./shared/_partner_new_modal\": 82010,\n\t\"./shared/_partner_new_modal.html\": 82010,\n\t\"./shared/_reserve_slot_same_time\": 32856,\n\t\"./shared/_reserve_slot_same_time.html\": 32856,\n\t\"./shared/_reserve_slot_tags_mismatch\": 57744,\n\t\"./shared/_reserve_slot_tags_mismatch.html\": 57744,\n\t\"./shared/_reserve_slot_without_plan\": 6880,\n\t\"./shared/_reserve_slot_without_plan.html\": 6880,\n\t\"./shared/_social_link\": 23518,\n\t\"./shared/_social_link.html\": 23518,\n\t\"./shared/_user_avatar\": 79109,\n\t\"./shared/_user_avatar.html\": 79109,\n\t\"./shared/about\": 88145,\n\t\"./shared/about.html\": 88145,\n\t\"./shared/confirm_modal\": 32870,\n\t\"./shared/confirm_modal.html\": 32870,\n\t\"./shared/confirm_modify_slot_modal\": 82199,\n\t\"./shared/confirm_modify_slot_modal.html\": 82199,\n\t\"./shared/cookies\": 55147,\n\t\"./shared/cookies.html\": 55147,\n\t\"./shared/deviseModal\": 86002,\n\t\"./shared/deviseModal.html\": 86002,\n\t\"./shared/header.html\": 78169,\n\t\"./shared/header.html.erb\": 78169,\n\t\"./shared/help_modal\": 74,\n\t\"./shared/help_modal.html\": 74,\n\t\"./shared/leftnav\": 13880,\n\t\"./shared/leftnav.html\": 13880,\n\t\"./shared/passwordEditModal\": 33840,\n\t\"./shared/passwordEditModal.html\": 33840,\n\t\"./shared/passwordNewModal\": 31209,\n\t\"./shared/passwordNewModal.html\": 31209,\n\t\"./shared/privacy\": 30591,\n\t\"./shared/privacy.html\": 30591,\n\t\"./shared/publicProfile.html\": 96190,\n\t\"./shared/publicProfile.html.erb\": 96190,\n\t\"./shared/signalAbuseModal\": 34882,\n\t\"./shared/signalAbuseModal.html\": 34882,\n\t\"./shared/signupModal\": 34835,\n\t\"./shared/signupModal.html\": 34835,\n\t\"./shared/tour-step-template\": 27010,\n\t\"./shared/tour-step-template.html\": 27010,\n\t\"./shared/valid_reservation_modal\": 74186,\n\t\"./shared/valid_reservation_modal.html\": 74186,\n\t\"./spaces\": 51092,\n\t\"./spaces/\": 51092,\n\t\"./spaces/_form\": 3161,\n\t\"./spaces/_form.html\": 3161,\n\t\"./spaces/edit\": 27344,\n\t\"./spaces/edit.html\": 27344,\n\t\"./spaces/index\": 51092,\n\t\"./spaces/index.html\": 51092,\n\t\"./spaces/new\": 33382,\n\t\"./spaces/new.html\": 33382,\n\t\"./spaces/reserve\": 1044,\n\t\"./spaces/reserve.html\": 1044,\n\t\"./spaces/show\": 28311,\n\t\"./spaces/show.html\": 28311,\n\t\"./store\": 2535,\n\t\"./store/\": 2535,\n\t\"./store/index\": 2535,\n\t\"./store/index.html\": 2535,\n\t\"./trainings\": 76844,\n\t\"./trainings/\": 76844,\n\t\"./trainings/index\": 76844,\n\t\"./trainings/index.html\": 76844,\n\t\"./trainings/reserve\": 6933,\n\t\"./trainings/reserve.html\": 6933,\n\t\"./trainings/show\": 94222,\n\t\"./trainings/show.html\": 94222,\n\t\"./wallet/credit_modal\": 36861,\n\t\"./wallet/credit_modal.html\": 36861,\n\t\"./wallet/show\": 80007,\n\t\"./wallet/show.html\": 80007,\n\t\"./wallet/transactions\": 48591,\n\t\"./wallet/transactions.html\": 48591\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 90829;","import { ActiveProviderResponse, AuthenticationProvider, MappingFields } from '../models/authentication-provider';\nimport { AxiosResponse } from 'axios';\nimport apiClient from './clients/api-client';\n\nexport default class AuthProviderAPI {\n static async index (): Promise> {\n const res: AxiosResponse> = await apiClient.get('/api/auth_providers');\n return res?.data;\n }\n\n static async get (id: number): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/auth_providers/${id}`);\n return res?.data;\n }\n\n static async create (authProvider: AuthenticationProvider): Promise {\n const res: AxiosResponse = await apiClient.post('/api/auth_providers', authProvider);\n return res?.data;\n }\n\n static async update (authProvider: AuthenticationProvider): Promise {\n const res: AxiosResponse = await apiClient.put(`/api/auth_providers/${authProvider.id}`, authProvider);\n return res?.data;\n }\n\n static async delete (id: number): Promise {\n await apiClient.delete(`/api/auth_providers/${id}`);\n }\n\n static async mappingFields (): Promise {\n const res: AxiosResponse = await apiClient.get('/api/auth_providers/mapping_fields');\n return res?.data;\n }\n\n static async strategyName (authProvider: AuthenticationProvider): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/auth_providers/strategy_name?providable_type=${authProvider.providable_type}&name=${authProvider.name}`);\n return res?.data;\n }\n\n static async active (): Promise {\n const res: AxiosResponse = await apiClient.get('/api/auth_providers/active');\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { User } from '../models/user';\n\nexport default class Authentication {\n static async login (email: string, password: string): Promise {\n const res: AxiosResponse = await apiClient.post('/users/sign_in.json', { email, password });\n return res?.data;\n }\n\n static async logout (): Promise {\n return apiClient.delete('/users/sign_out.json');\n }\n\n static async verifyPassword (password: string): Promise {\n try {\n const res: AxiosResponse = await apiClient.post('/password/verify.json', { password });\n return (res.status === 200);\n } catch (e) {\n return false;\n }\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { Order, OrderErrors } from '../models/order';\n\nexport default class CartAPI {\n static async create (token?: string): Promise {\n const res: AxiosResponse = await apiClient.post('/api/cart', { order_token: token });\n return res?.data;\n }\n\n static async addItem (order: Order, orderableId: number, quantity: number): Promise {\n const res: AxiosResponse = await apiClient.put('/api/cart/add_item', { order_token: order.token, orderable_id: orderableId, quantity });\n return res?.data;\n }\n\n static async removeItem (order: Order, orderableId: number): Promise {\n const res: AxiosResponse = await apiClient.put('/api/cart/remove_item', { order_token: order.token, orderable_id: orderableId });\n return res?.data;\n }\n\n static async setQuantity (order: Order, orderableId: number, quantity: number): Promise {\n const res: AxiosResponse = await apiClient.put('/api/cart/set_quantity', { order_token: order.token, orderable_id: orderableId, quantity });\n return res?.data;\n }\n\n static async setOffer (order: Order, orderableId: number, isOffered: boolean): Promise {\n const res: AxiosResponse = await apiClient.put('/api/cart/set_offer', { order_token: order.token, orderable_id: orderableId, is_offered: isOffered, customer_id: order.user?.id });\n return res?.data;\n }\n\n static async refreshItem (order: Order, orderableId: number): Promise {\n const res: AxiosResponse = await apiClient.put('/api/cart/refresh_item', { order_token: order.token, orderable_id: orderableId });\n return res?.data;\n }\n\n static async validate (order: Order): Promise {\n const res: AxiosResponse = await apiClient.post('/api/cart/validate', { order_token: order.token });\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { OrderPayment, Order } from '../models/order';\n\nexport default class CheckoutAPI {\n static async payment (order: Order, paymentId?: string): Promise {\n const res: AxiosResponse = await apiClient.post('/api/checkout/payment', {\n order_token: order.token,\n coupon_code: order.coupon?.code,\n payment_id: paymentId,\n customer_id: order.user.id\n });\n return res?.data;\n }\n\n static async confirmPayment (order: Order, paymentId: string): Promise {\n const res: AxiosResponse = await apiClient.post('/api/checkout/confirm_payment', {\n order_token: order.token,\n coupon_code: order.coupon?.code,\n payment_id: paymentId,\n customer_id: order.user.id\n });\n return res?.data;\n }\n}\n","import axios, { AxiosInstance } from 'axios';\nimport ParsingLib from '../../lib/parsing';\n\ntype Error = { error: string };\n\nconst token: HTMLMetaElement = document.querySelector('[name=\"csrf-token\"]');\nconst client: AxiosInstance = axios.create({\n headers: {\n common: {\n 'X-CSRF-Token': token?.content || 'no-csrf-token'\n }\n }\n});\n\nclient.interceptors.response.use(function (response) {\n // Any status code that lie within the range of 2xx cause this function to trigger\n return response;\n}, function (error) {\n // 304 Not Modified should be considered as a success\n if (error.response?.status === 304) { return Promise.resolve(error.response); }\n\n // Any status codes that falls outside the range of 2xx cause this function to trigger\n const message = error.response?.data || error.message || error;\n return Promise.reject(extractHumanReadableMessage(message));\n});\n\nfunction extractHumanReadableMessage (error: string|Error): string {\n if (typeof error === 'string') {\n if (error.match(/^/)) {\n // parse ruby error pages\n const parser = new DOMParser();\n const htmlDoc = parser.parseFromString(error, 'text/html');\n if (htmlDoc.querySelectorAll('h2').length > 2) {\n return htmlDoc.querySelector('h2').textContent;\n } else {\n return htmlDoc.querySelector('h1').textContent;\n }\n }\n return error;\n }\n\n // parse Rails errors (as JSON) or API errors\n let message = '';\n if (error instanceof Object) {\n // API errors\n if (Object.prototype.hasOwnProperty.call(error, 'error') && typeof error.error === 'string') {\n return error.error;\n }\n // iterate through all the keys to build the message\n for (const key in error) {\n if (Object.prototype.hasOwnProperty.call(error, key)) {\n if (!ParsingLib.isInteger(key)) {\n message += `${key} : `;\n }\n if (error[key] instanceof Array) {\n // standard rails messages are stored as {field: [error1, error2]}\n // we rebuild them as \"field: error1, error2\"\n message += error[key].join(', ');\n } else {\n message += error[key];\n }\n }\n }\n return message;\n }\n\n return JSON.stringify(error);\n}\n\nexport default client;\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { CustomAsset, CustomAssetName } from '../models/custom-asset';\n\nexport default class CustomAssetAPI {\n static async get (name: CustomAssetName): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/custom_assets/${name}`);\n return res?.data?.custom_asset;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { Group, GroupIndexFilter } from '../models/group';\nimport ApiLib from '../lib/api';\n\nexport default class GroupAPI {\n static async index (filters?: GroupIndexFilter): Promise> {\n const res: AxiosResponse> = await apiClient.get(`/api/groups${ApiLib.filtersToQuery(filters)}`);\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { ShoppingCart } from '../models/payment';\nimport { PaymentSchedule } from '../models/payment-schedule';\nimport { Invoice } from '../models/invoice';\n\nexport default class LocalPaymentAPI {\n static async confirmPayment (cartItems: ShoppingCart): Promise {\n const res: AxiosResponse = await apiClient.post('/api/local_payment/confirm_payment', cartItems);\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { Machine, MachineIndexFilter } from '../models/machine';\nimport ApiLib from '../lib/api';\n\nexport default class MachineAPI {\n static async index (filters?: MachineIndexFilter): Promise> {\n const res: AxiosResponse> = await apiClient.get(`/api/machines${ApiLib.filtersToQuery(filters)}`);\n return res?.data;\n }\n\n static async get (id: number): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/machines/${id}`);\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { serialize } from 'object-to-formdata';\nimport { User, UserIndexFilter, UserRole } from '../models/user';\n\nexport default class MemberAPI {\n static async list (filters: UserIndexFilter): Promise> {\n const res: AxiosResponse> = await apiClient.post('/api/members/list', filters);\n return res?.data;\n }\n\n static async search (name: string): Promise> {\n const res: AxiosResponse> = await apiClient.get(`/api/members/search/${name}`);\n return res?.data;\n }\n\n static async get (id: number): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/members/${id}`);\n return res?.data;\n }\n\n static async create (user: User): Promise {\n const data = serialize({ user });\n if (user.profile_attributes?.user_avatar_attributes?.attachment_files[0]) {\n data.set('user[profile_attributes][user_avatar_attributes][attachment]', user.profile_attributes.user_avatar_attributes.attachment_files[0]);\n }\n const res: AxiosResponse = await apiClient.post('/api/members', data, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n });\n return res?.data;\n }\n\n static async update (user: User): Promise {\n const data = serialize({ user }, { allowEmptyArrays: true });\n if (user.profile_attributes?.user_avatar_attributes?.attachment_files[0]) {\n data.set('user[profile_attributes][user_avatar_attributes][attachment]', user.profile_attributes.user_avatar_attributes.attachment_files[0]);\n }\n const res: AxiosResponse = await apiClient.patch(`/api/members/${user.id}`, data, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n });\n return res?.data;\n }\n\n static async updateRole (user: User, role: UserRole, groupId?: number): Promise {\n const res: AxiosResponse = await apiClient.patch(`/api/members/${user.id}/update_role`, { role, group_id: groupId });\n return res?.data;\n }\n\n static async current (): Promise {\n const res: AxiosResponse = await apiClient.get('/api/members/current');\n return res?.data;\n }\n\n static async validate (member: User): Promise {\n const res: AxiosResponse = await apiClient.patch(`/api/members/${member.id}/validate`, { user: member });\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { Order, OrderIndexFilter, OrderIndex } from '../models/order';\nimport ApiLib from '../lib/api';\n\nexport default class OrderAPI {\n static async index (filters?: OrderIndexFilter): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/orders${ApiLib.filtersToQuery(filters, false)}`);\n return res?.data;\n }\n\n static async get (id: number | string): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/orders/${id}`);\n return res?.data;\n }\n\n static async updateState (order: Order, state: string, note?: string): Promise {\n const res: AxiosResponse = await apiClient.patch(`/api/orders/${order.id}`, { order: { state, note } });\n return res?.data;\n }\n\n static async withdrawalInstructions (order?: Order): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/orders/${order?.id}/withdrawal_instructions`);\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport {\n CancelScheduleResponse,\n CashCheckResponse, PayItemResponse,\n PaymentSchedule,\n PaymentScheduleIndexRequest, PaymentScheduleItem, RefreshItemResponse\n} from '../models/payment-schedule';\n\nexport default class PaymentScheduleAPI {\n static async list (query: PaymentScheduleIndexRequest): Promise> {\n const res: AxiosResponse = await apiClient.post('/api/payment_schedules/list', query);\n return res?.data;\n }\n\n static async index (query: PaymentScheduleIndexRequest): Promise> {\n const res: AxiosResponse = await apiClient.get(`/api/payment_schedules?page=${query.query.page}&size=${query.query.size}`);\n return res?.data;\n }\n\n static async cashCheck (paymentScheduleItemId: number): Promise {\n const res: AxiosResponse = await apiClient.post(`/api/payment_schedules/items/${paymentScheduleItemId}/cash_check`);\n return res?.data;\n }\n\n static async confirmTransfer (paymentScheduleItemId: number): Promise {\n const res: AxiosResponse = await apiClient.post(`/api/payment_schedules/items/${paymentScheduleItemId}/confirm_transfer`);\n return res?.data;\n }\n\n static async getItem (paymentScheduleItemId: number): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/payment_schedules/items/${paymentScheduleItemId}`);\n return res?.data;\n }\n\n static async refreshItem (paymentScheduleItemId: number): Promise {\n const res: AxiosResponse = await apiClient.post(`/api/payment_schedules/items/${paymentScheduleItemId}/refresh_item`);\n return res?.data;\n }\n\n static async payItem (paymentScheduleItemId: number): Promise {\n const res: AxiosResponse = await apiClient.post(`/api/payment_schedules/items/${paymentScheduleItemId}/pay_item`);\n return res?.data;\n }\n\n static async cancel (paymentScheduleId: number): Promise {\n const res: AxiosResponse = await apiClient.put(`/api/payment_schedules/${paymentScheduleId}/cancel`);\n return res?.data;\n }\n\n static async update (paymentSchedule: PaymentSchedule): Promise {\n const res:AxiosResponse = await apiClient.patch(`/api/payment_schedules/${paymentSchedule.id}`, paymentSchedule);\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { ShoppingCart } from '../models/payment';\nimport { User } from '../models/user';\nimport {\n CheckHashResponse,\n CreatePaymentResponse,\n CreateTokenResponse,\n SdkTestResponse\n} from '../models/payzen';\nimport { Invoice } from '../models/invoice';\nimport { PaymentSchedule } from '../models/payment-schedule';\n\nexport default class PayzenAPI {\n static async chargeSDKTest (baseURL: string, username: string, password: string): Promise {\n const res: AxiosResponse = await apiClient.post('/api/payzen/sdk_test', { base_url: baseURL, username, password });\n return res?.data;\n }\n\n static async chargeCreatePayment (cart: ShoppingCart, customer: User): Promise {\n const res: AxiosResponse = await apiClient.post('/api/payzen/create_payment', { cart_items: cart, customer_id: customer.id });\n return res?.data;\n }\n\n static async chargeCreateToken (cart: ShoppingCart, customer: User): Promise {\n const res: AxiosResponse = await apiClient.post('/api/payzen/create_token', { cart_items: cart, customer_id: customer.id });\n return res?.data;\n }\n\n static async checkHash (algorithm: string, hashKey: string, hash: string, data: string): Promise {\n const res: AxiosResponse = await apiClient.post('/api/payzen/check_hash', { algorithm, hash_key: hashKey, hash, data });\n return res?.data;\n }\n\n static async confirm (orderId: string, cart: ShoppingCart): Promise {\n const res: AxiosResponse = await apiClient.post('/api/payzen/confirm_payment', { cart_items: cart, order_id: orderId });\n return res?.data;\n }\n\n static async confirmPaymentSchedule (orderId: string, transactionUuid: string, cart: ShoppingCart): Promise {\n const res: AxiosResponse = await apiClient.post('/api/payzen/confirm_payment_schedule', { cart_items: cart, order_id: orderId, transaction_uuid: transactionUuid });\n return res?.data;\n }\n\n static async updateToken (paymentScheduleId: number): Promise {\n const res: AxiosResponse = await apiClient.post('/api/payzen/update_token', { payment_schedule_id: paymentScheduleId });\n return res?.data;\n }\n\n static async checkCart (cart: ShoppingCart, customer: User): Promise {\n const res: AxiosResponse = await apiClient.post('/api/payzen/check_cart', { cart_items: cart, customer_id: customer.id });\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { PlanCategory } from '../models/plan-category';\n\nexport default class PlanCategoryAPI {\n static async index (): Promise> {\n const res: AxiosResponse> = await apiClient.get('/api/plan_categories');\n return res?.data;\n }\n\n static async create (category: PlanCategory): Promise {\n const res: AxiosResponse = await apiClient.post('/api/plan_categories', { plan_category: category });\n return res?.data;\n }\n\n static async update (category: PlanCategory): Promise {\n const res: AxiosResponse = await apiClient.patch(`/api/plan_categories/${category.id}`, { plan_category: category });\n return res?.data;\n }\n\n static async destroy (categoryId: number): Promise {\n const res: AxiosResponse = await apiClient.delete(`/api/plan_categories/${categoryId}`);\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { Plan, PlansDuration } from '../models/plan';\n\nexport default class PlanAPI {\n static async index (): Promise> {\n const res: AxiosResponse> = await apiClient.get('/api/plans');\n return res?.data;\n }\n\n static async durations (): Promise> {\n const res: AxiosResponse> = await apiClient.get('/api/plans/durations');\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { PackIndexFilter, PrepaidPack } from '../models/prepaid-pack';\nimport ApiLib from '../lib/api';\n\nexport default class PrepaidPackAPI {\n static async index (filters?: PackIndexFilter): Promise> {\n const res: AxiosResponse> = await apiClient.get(`/api/prepaid_packs${ApiLib.filtersToQuery(filters)}`);\n return res?.data;\n }\n\n static async get (id: number): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/prepaid_packs/${id}`);\n return res?.data;\n }\n\n static async create (pack: PrepaidPack): Promise {\n const res: AxiosResponse = await apiClient.post('/api/prepaid_packs', { pack });\n return res?.data;\n }\n\n static async update (pack: PrepaidPack): Promise {\n const res: AxiosResponse = await apiClient.patch(`/api/prepaid_packs/${pack.id}`, { pack });\n return res?.data;\n }\n\n static async destroy (packId: number): Promise {\n const res: AxiosResponse = await apiClient.delete(`/api/prepaid_packs/${packId}`);\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { ShoppingCart } from '../models/payment';\nimport { ComputePriceResult, Price, PriceIndexFilter } from '../models/price';\nimport ApiLib from '../lib/api';\n\nexport default class PriceAPI {\n static async compute (cart: ShoppingCart): Promise {\n const res: AxiosResponse = await apiClient.post('/api/prices/compute', cart);\n return res?.data;\n }\n\n static async index (filters?: PriceIndexFilter): Promise> {\n const res: AxiosResponse = await apiClient.get(`/api/prices${ApiLib.filtersToQuery(filters)}`);\n return res?.data;\n }\n\n static async create (price: Price): Promise {\n const res: AxiosResponse = await apiClient.post('/api/prices', { price });\n return res?.data;\n }\n\n static async update (price: Price): Promise {\n const res: AxiosResponse = await apiClient.patch(`/api/prices/${price.id}`, { price });\n return res?.data;\n }\n\n static async destroy (priceId: number): Promise {\n const res: AxiosResponse = await apiClient.delete(`/api/prices/${priceId}`);\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { ProductCategory } from '../models/product-category';\n\nexport default class ProductCategoryAPI {\n static async index (): Promise> {\n const res: AxiosResponse> = await apiClient.get('/api/product_categories');\n return res?.data;\n }\n\n static async get (id: number): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/product_categories/${id}`);\n return res?.data;\n }\n\n static async create (productCategory: ProductCategory): Promise {\n const res: AxiosResponse = await apiClient.post('/api/product_categories', { product_category: productCategory });\n return res?.data;\n }\n\n static async update (productCategory: ProductCategory): Promise {\n const res: AxiosResponse = await apiClient.patch(`/api/product_categories/${productCategory.id}`, { product_category: productCategory });\n return res?.data;\n }\n\n static async destroy (productCategoryId: number): Promise {\n const res: AxiosResponse = await apiClient.delete(`/api/product_categories/${productCategoryId}`);\n return res?.data;\n }\n\n static async updatePosition (productCategory: ProductCategory, position: number): Promise {\n const res: AxiosResponse = await apiClient.patch(`/api/product_categories/${productCategory.id}/position`, { position });\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { serialize } from 'object-to-formdata';\nimport {\n Product,\n ProductIndexFilter,\n ProductsIndex,\n StockMovementIndex, StockMovementIndexFilter\n} from '../models/product';\nimport ApiLib from '../lib/api';\nimport ProductLib from '../lib/product';\n\nexport default class ProductAPI {\n static async index (filters?: ProductIndexFilter): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/products${ApiLib.filtersToQuery(ProductLib.indexFiltersToIds(filters), false)}`);\n return res?.data;\n }\n\n static async get (id: number | string): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/products/${id}`);\n return res?.data;\n }\n\n static async create (product: Product): Promise {\n const data = serialize({\n product: {\n ...product,\n product_files_attributes: null,\n product_images_attributes: null\n }\n });\n data.delete('product[product_files_attributes]');\n data.delete('product[product_images_attributes]');\n product.product_files_attributes?.forEach((file, i) => {\n if (file?.attachment_files && file?.attachment_files[0]) {\n data.set(`product[product_files_attributes][${i}][attachment]`, file.attachment_files[0]);\n }\n });\n product.product_images_attributes?.forEach((image, i) => {\n if (image?.attachment_files && image?.attachment_files[0]) {\n data.set(`product[product_images_attributes][${i}][attachment]`, image.attachment_files[0]);\n data.set(`product[product_images_attributes][${i}][is_main]`, (!!image.is_main).toString());\n }\n });\n const res: AxiosResponse = await apiClient.post('/api/products', data, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n });\n return res?.data;\n }\n\n static async update (product: Product): Promise {\n const data = serialize({\n product: {\n ...product,\n product_files_attributes: null,\n product_images_attributes: null\n }\n });\n data.delete('product[product_files_attributes]');\n data.delete('product[product_images_attributes]');\n product.product_files_attributes?.forEach((file, i) => {\n if (file?.attachment_files && file?.attachment_files[0]) {\n data.set(`product[product_files_attributes][${i}][attachment]`, file.attachment_files[0]);\n }\n if (file?.id) {\n data.set(`product[product_files_attributes][${i}][id]`, file.id.toString());\n }\n if (file?._destroy) {\n data.set(`product[product_files_attributes][${i}][_destroy]`, file._destroy.toString());\n }\n });\n product.product_images_attributes?.forEach((image, i) => {\n if (image?.attachment_files && image?.attachment_files[0]) {\n data.set(`product[product_images_attributes][${i}][attachment]`, image.attachment_files[0]);\n }\n if (image?.id) {\n data.set(`product[product_images_attributes][${i}][id]`, image.id.toString());\n }\n if (image?._destroy) {\n data.set(`product[product_images_attributes][${i}][_destroy]`, image._destroy.toString());\n }\n data.set(`product[product_images_attributes][${i}][is_main]`, (!!image.is_main).toString());\n });\n const res: AxiosResponse = await apiClient.patch(`/api/products/${product.id}`, data, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n }\n });\n return res?.data;\n }\n\n static async clone (product: Product, data: Product): Promise {\n const res: AxiosResponse = await apiClient.put(`/api/products/${product.id}/clone`, {\n product: data\n });\n return res?.data;\n }\n\n static async destroy (productId: number): Promise {\n const res: AxiosResponse = await apiClient.delete(`/api/products/${productId}`);\n return res?.data;\n }\n\n static async stockMovements (productId: number, filters: StockMovementIndexFilter): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/products/${productId}/stock_movements${ApiLib.filtersToQuery(filters)}`);\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { ProfileCustomField } from '../models/profile-custom-field';\n\nexport default class ProfileCustomFieldAPI {\n static async index (): Promise> {\n const res: AxiosResponse> = await apiClient.get('/api/profile_custom_fields');\n return res?.data;\n }\n\n static async get (id: number): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/profile_custom_fields/${id}`);\n return res?.data;\n }\n\n static async create (profileCustomField: ProfileCustomField): Promise {\n const res: AxiosResponse = await apiClient.post('/api/profile_custom_fields', { profile_custom_field: profileCustomField });\n return res?.data;\n }\n\n static async update (profileCustomField: ProfileCustomField): Promise {\n const res: AxiosResponse = await apiClient.patch(`/api/profile_custom_fields/${profileCustomField.id}`, { profile_custom_field: profileCustomField });\n return res?.data;\n }\n\n static async destroy (profileCustomFieldId: number): Promise {\n const res: AxiosResponse = await apiClient.delete(`/api/profile_custom_fields/${profileCustomFieldId}`);\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { ProofOfIdentityFile, ProofOfIdentityFileIndexFilter } from '../models/proof-of-identity-file';\nimport ApiLib from '../lib/api';\n\nexport default class ProofOfIdentityFileAPI {\n static async index (filters?: ProofOfIdentityFileIndexFilter): Promise> {\n const res: AxiosResponse> = await apiClient.get(`/api/proof_of_identity_files${ApiLib.filtersToQuery(filters)}`);\n return res?.data;\n }\n\n static async get (id: number): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/proof_of_identity_files/${id}`);\n return res?.data;\n }\n\n static async create (proofOfIdentityFile: FormData): Promise {\n const res: AxiosResponse = await apiClient.post('/api/proof_of_identity_files', proofOfIdentityFile);\n return res?.data;\n }\n\n static async update (id: number, proofOfIdentityFile: FormData): Promise {\n const res: AxiosResponse = await apiClient.patch(`/api/proof_of_identity_files/${id}`, proofOfIdentityFile);\n return res?.data;\n }\n\n static async destroy (proofOfIdentityFileId: number): Promise {\n const res: AxiosResponse = await apiClient.delete(`/api/proof_of_identity_files/${proofOfIdentityFileId}`);\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { ProofOfIdentityType, ProofOfIdentityTypeIndexfilter } from '../models/proof-of-identity-type';\nimport ApiLib from '../lib/api';\n\nexport default class ProofOfIdentityTypeAPI {\n static async index (filters?: ProofOfIdentityTypeIndexfilter): Promise> {\n const res: AxiosResponse> = await apiClient.get(`/api/proof_of_identity_types${ApiLib.filtersToQuery(filters)}`);\n return res?.data;\n }\n\n static async get (id: number): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/proof_of_identity_types/${id}`);\n return res?.data;\n }\n\n static async create (proofOfIdentityType: ProofOfIdentityType): Promise {\n const res: AxiosResponse = await apiClient.post('/api/proof_of_identity_types', { proof_of_identity_type: proofOfIdentityType });\n return res?.data;\n }\n\n static async update (proofOfIdentityType: ProofOfIdentityType): Promise {\n const res: AxiosResponse = await apiClient.patch(`/api/proof_of_identity_types/${proofOfIdentityType.id}`, { proof_of_identity_type: proofOfIdentityType });\n return res?.data;\n }\n\n static async destroy (proofOfIdentityTypeId: number): Promise {\n const res: AxiosResponse = await apiClient.delete(`/api/proof_of_identity_types/${proofOfIdentityTypeId}`);\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport {\n Setting,\n SettingBulkArray,\n SettingBulkResult,\n SettingError,\n SettingName,\n SettingValue\n} from '../models/setting';\n\nexport default class SettingAPI {\n static async get (name: SettingName): Promise {\n const res: AxiosResponse<{setting: Setting}> = await apiClient.get(`/api/settings/${name}`);\n return res?.data?.setting;\n }\n\n static async query (names: readonly SettingName[]): Promise> {\n const params = new URLSearchParams();\n params.append('names', `['${names.join(\"','\")}']`);\n\n const res: AxiosResponse = await apiClient.get(`/api/settings?${params.toString()}`);\n return SettingAPI.toSettingsMap(names, res?.data);\n }\n\n static async update (name: SettingName, value: SettingValue): Promise {\n const res: AxiosResponse = await apiClient.patch(`/api/settings/${name}`, { setting: { value } });\n if (res.status === 304) { return { name, value: `${value}` }; }\n return res?.data?.setting;\n }\n\n static async bulkUpdate (settings: Map, transactional = false): Promise> {\n const res: AxiosResponse = await apiClient.patch(`/api/settings/bulk_update?transactional=${transactional}`, { settings: SettingAPI.toObjectArray(settings) });\n return SettingAPI.toBulkMap(res?.data?.settings);\n }\n\n static async isPresent (name: SettingName): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/settings/is_present/${name}`);\n return res?.data?.isPresent;\n }\n\n private static toSettingsMap (names: readonly SettingName[], data: Record): Map {\n const map = new Map();\n names.forEach(name => {\n map.set(name, data[name] || '');\n });\n return map;\n }\n\n private static toBulkMap (data: Array): Map {\n const map = new Map();\n data.forEach(item => {\n const itemData: SettingBulkResult = { status: true };\n if ('error' in item) {\n itemData.error = item.error;\n itemData.status = false;\n }\n if ('value' in item) {\n itemData.value = item.value;\n }\n if ('localized' in item) {\n itemData.localized = item.localized;\n }\n\n map.set(item.name, itemData);\n });\n return map;\n }\n\n private static toObjectArray (data: Map): SettingBulkArray {\n const array = [];\n data.forEach((value, key) => {\n array.push({\n name: key,\n value\n });\n });\n return array;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { ShoppingCart, IntentConfirmation, PaymentConfirmation, UpdateCardResponse } from '../models/payment';\nimport { PaymentSchedule } from '../models/payment-schedule';\nimport { Invoice } from '../models/invoice';\n\nexport default class StripeAPI {\n static async confirmMethod (paymentMethodId: string, cartItems: ShoppingCart): Promise {\n const res: AxiosResponse = await apiClient.post('/api/stripe/confirm_payment', {\n payment_method_id: paymentMethodId,\n cart_items: cartItems\n });\n return res?.data;\n }\n\n static async confirmIntent (paymentMethodId: string, cartItems: ShoppingCart): Promise {\n const res: AxiosResponse = await apiClient.post('/api/stripe/confirm_payment', {\n payment_intent_id: paymentMethodId,\n cart_items: cartItems\n });\n return res?.data;\n }\n\n static async setupSubscription (paymentMethodId: string, cartItems: ShoppingCart): Promise {\n const res: AxiosResponse = await apiClient.post('/api/stripe/setup_subscription', {\n payment_method_id: paymentMethodId,\n cart_items: cartItems\n });\n return res?.data;\n }\n\n static async setupIntent (userId: number): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/stripe/setup_intent/${userId}`);\n return res?.data;\n }\n\n static async confirmSubscription (subscriptionId: string, cartItems: ShoppingCart): Promise {\n const res: AxiosResponse = await apiClient.post('/api/stripe/confirm_subscription', {\n subscription_id: subscriptionId,\n cart_items: cartItems\n });\n return res?.data;\n }\n\n static async updateCard (userId: number, paymentMethodId: string, paymentScheduleId?: number): Promise {\n const res: AxiosResponse = await apiClient.post('/api/stripe/update_card', {\n user_id: userId,\n payment_method_id: paymentMethodId,\n payment_schedule_id: paymentScheduleId\n });\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { Subscription, SubscriptionPaymentDetails, UpdateSubscriptionRequest } from '../models/subscription';\nimport { AxiosResponse } from 'axios';\n\nexport default class SubscriptionAPI {\n static async update (request: UpdateSubscriptionRequest): Promise {\n const res: AxiosResponse = await apiClient.patch(`/api/subscriptions/${request.id}`, { subscription: request });\n return res?.data;\n }\n\n static async get (id: number): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/subscriptions/${id}`);\n return res?.data;\n }\n\n static async paymentsDetails (id: number): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/subscriptions/${id}/payment_details`);\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { Wallet } from '../models/wallet';\n\nexport default class WalletAPI {\n static async getByUser (userId: number): Promise {\n const res: AxiosResponse = await apiClient.get(`/api/wallet/by_user/${userId}`);\n return res?.data;\n }\n}\n","'use strict';\n\n/**\n* The application file bootstraps the angular app by initializing the main module and\n* creating namespaces and moduled for controllers, filters, services, and directives.\n*/\n\n// eslint-disable-next-line no-var -- Application is a global variable.\nvar Application = Application || {};\n\nApplication.Components = angular.module('application.components', []);\nApplication.Services = angular.module('application.services', []);\nApplication.Controllers = angular.module('application.controllers', []);\nApplication.Filters = angular.module('application.filters', []);\nApplication.Directives = angular.module('application.directives', []);\n\nangular.module('application', ['ngCookies', 'ngResource', 'ngSanitize', 'ui.router', 'ui.bootstrap',\n 'ngUpload', 'duScroll', 'application.filters', 'application.services', 'application.directives',\n 'frapontillo.bootstrap-switch', 'application.controllers', 'application.router', 'application.components',\n 'ui.select', 'ui.calendar', 'angularMoment', 'Devise', 'angular-growl', 'xeditable',\n 'checklist-model', 'unsavedChanges', 'angular-loading-bar', 'ngTouch',\n 'angularUtils.directives.dirDisqus', 'summernote', 'elasticsearch', 'angular-medium-editor', 'naif.base64',\n 'minicolors', 'pascalprecht.translate', 'ngFitText', 'ngAside', 'ngCapsLock', 'vcRecaptcha', 'ui.codemirror',\n 'bm.uiTour'])\n .config(['$httpProvider', 'AuthProvider', 'growlProvider', 'unsavedWarningsConfigProvider', 'uibDatepickerPopupConfig', '$provide', '$translateProvider', 'TourConfigProvider', '$sceDelegateProvider',\n function ($httpProvider, AuthProvider, growlProvider, unsavedWarningsConfigProvider, uibDatepickerPopupConfig, $provide, $translateProvider, TourConfigProvider, $sceDelegateProvider) {\n // Google analytics\n // first we check the user acceptance\n const cookiesConsent = document.cookie.replace(/(?:(?:^|.*;\\s*)fab-manager-cookies-consent\\s*=\\s*([^;]*).*$)|^.*$/, '$1');\n if (cookiesConsent === 'accept') {\n GTM.enableAnalytics(Fablab.trackingId);\n } else {\n // if the cookies were not explicitly accepted, delete them\n document.cookie = '_ga=; expires=Thu, 01 Jan 1970 00:00:00 GMT';\n document.cookie = '_gid=; expires=Thu, 01 Jan 1970 00:00:00 GMT';\n }\n\n // Custom messages for the date-picker widget\n uibDatepickerPopupConfig.closeText = Fablab.translations.app.shared.buttons.close;\n uibDatepickerPopupConfig.clearText = Fablab.translations.app.shared.buttons.clear;\n uibDatepickerPopupConfig.currentText = Fablab.translations.app.shared.buttons.today;\n\n // Custom messages for angular-unsavedChanges\n unsavedWarningsConfigProvider.navigateMessage = Fablab.translations.app.shared.messages.you_will_lose_any_unsaved_modification_if_you_quit_this_page;\n unsavedWarningsConfigProvider.reloadMessage = Fablab.translations.app.shared.messages.you_will_lose_any_unsaved_modification_if_you_reload_this_page;\n\n // Set how long the popup messages (growl) will remain\n growlProvider.globalTimeToLive(5000);\n\n // Configure the i18n module to load the partial translations from the given API URL\n $translateProvider.useLoader('$translatePartialLoader', {\n urlTemplate: '/api/translations/{lang}/{part}'\n });\n // Enable the cache to speed-up the loading times on already seen pages\n $translateProvider.useLoaderCache(true);\n // Secure i18n module against XSS attacks by escaping the output\n $translateProvider.useSanitizeValueStrategy('escapeParameters');\n // Use the MessageFormat interpolation by default (used for pluralization)\n $translateProvider.useMessageFormatInterpolation();\n // Set the language of the instance (from ruby configuration)\n $translateProvider.preferredLanguage(Fablab.locale);\n // End the tour when the user clicks the forward or back buttons of the browser\n TourConfigProvider.enableNavigationInterceptors();\n\n $sceDelegateProvider.resourceUrlWhitelist(['self']);\n }]).run(['$rootScope', '$transitions', '$log', 'Auth', 'amMoment', '$state', 'editableOptions',\n function ($rootScope, $transitions, $log, Auth, amMoment, $state, editableOptions) {\n // Angular-moment (date-time manipulations library)\n amMoment.changeLocale(Fablab.moment_locale);\n\n // Angular-xeditable (click-to-edit elements, used in admin backoffice)\n editableOptions.theme = 'bs3';\n\n // Alter the UI-Router's $state, registering into some information concerning the previous $state.\n // This is used to allow the user to navigate to the previous state\n $transitions.onSuccess({ }, function (trans) {\n $state.prevState = trans.$from().name;\n $state.prevParams = Object.fromEntries(\n Object.keys(trans.$from().params).map(k => {\n return [k, trans.$from().params[k].value()];\n })\n );\n\n const path = trans.router.stateService.href(trans.$to(), {}, { absolute: true });\n GTM.trackPage(path, trans.$to().name);\n });\n\n // Global function to allow the user to navigate to the previous screen (ie. $state).\n // If no previous $state were recorded, navigate to the home page\n $rootScope.backPrevLocation = function (event) {\n event.preventDefault();\n event.stopPropagation();\n if ($state.prevState === '') {\n $state.prevState = 'app.public.home';\n }\n $state.go($state.prevState, $state.prevParams);\n };\n\n // Configuration of the summernote editor (used in project edition)\n $rootScope.summernoteOpts = {\n lang: Fablab.summernote_locale,\n height: 200,\n toolbar: [\n ['style', ['style']],\n ['font', ['bold', 'italic', 'underline', 'clear']],\n ['color', ['color']],\n ['para', ['ul', 'ol', 'paragraph']],\n ['table', ['table']],\n ['insert', ['link', 'picture', 'hr']],\n ['view', ['fullscreen', 'codeview']],\n ['group', ['video']],\n ['help', ['help']]\n ],\n styleTags: ['p', 'blockquote', 'pre', 'h4', 'h5', 'h6'],\n maximumImageFileSize: 4096\n };\n\n // Prevent the usage of the application for members with incomplete profiles: they will be redirected to\n // the 'profile completion' page. This is especially useful for user's accounts imported through SSO.\n $transitions.onStart({}, function (trans) {\n Auth.currentUser().then(function (currentUser) {\n if (currentUser.need_completion && trans.$to().name !== 'app.logged.profileCompletion') {\n $state.go('app.logged.profileCompletion');\n }\n }).catch(() => {\n // no one is logged, just ignore\n });\n });\n\n /**\n * This helper method builds and return an array containing every integers between\n * the provided start and end.\n * @param start {number}\n * @param end {number}\n * @return {Array} [start .. end]\n */\n $rootScope.intArray = function (start, end) {\n const arr = [];\n for (let i = start; i < end; i++) { arr.push(i); }\n return arr;\n };\n }]).constant('angularMomentConfig', {\n timezone: Fablab.timezone\n }).constant('moment', require('moment-timezone'));\n\nangular.isUndefinedOrNull = function (val) {\n return angular.isUndefined(val) || val === null;\n};\n\nmodule.exports = { Application };\n","/**\n * This is a compatibility wrapper to allow usage of react-switch inside the angular.js app\n */\nimport Switch from 'react-switch';\nimport { react2angular } from 'react2angular';\nimport { IApplication } from '../../models/application';\n\ndeclare const Application: IApplication;\n\nApplication.Components.component('switch', react2angular(Switch, ['checked', 'onChange', 'id', 'className', 'disabled']));\n","import React from 'react';\nimport { UseFormRegister } from 'react-hook-form';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { useTranslation } from 'react-i18next';\nimport { FormInput } from '../form/form-input';\n\nexport interface BooleanMappingFormProps {\n register: UseFormRegister,\n fieldMappingId: number,\n}\n\n/**\n * Partial form to map an internal boolean field to an external API providing a string value.\n */\nexport const BooleanMappingForm = ({ register, fieldMappingId }: BooleanMappingFormProps) => {\n const { t } = useTranslation('admin');\n\n return (\n
\n

{t('app.admin.authentication.boolean_mapping_form.mappings')}

\n \n \n
\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { UseFormRegister, useFieldArray, ArrayPath, useWatch, Path, FieldPathValue } from 'react-hook-form';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport AuthProviderAPI from '../../api/auth-provider';\nimport { AuthenticationProviderMapping, MappingFields, mappingType, ProvidableType } from '../../models/authentication-provider';\nimport { Control, UnpackNestedValue, UseFormSetValue } from 'react-hook-form/dist/types/form';\nimport { FormSelect } from '../form/form-select';\nimport { FormInput } from '../form/form-input';\nimport { useTranslation } from 'react-i18next';\nimport { FabButton } from '../base/fab-button';\nimport { TypeMappingModal } from './type-mapping-modal';\nimport { useImmer } from 'use-immer';\nimport { Oauth2DataMappingForm } from './oauth2-data-mapping-form';\nimport { OpenidConnectDataMappingForm } from './openid-connect-data-mapping-form';\n\nexport interface DataMappingFormProps {\n register: UseFormRegister,\n control: Control,\n providerType: ProvidableType,\n setValue: UseFormSetValue,\n currentFormValues: Array,\n}\n\ntype selectModelFieldOption = { value: string, label: string };\n\n/**\n * Partial form to define the mapping of the data between the API of the authentication provider and the application internals.\n */\nexport const DataMappingForm = ({ register, control, providerType, setValue, currentFormValues }: DataMappingFormProps) => {\n const { t } = useTranslation('admin');\n const [dataMapping, setDataMapping] = useState(null);\n const [isOpenTypeMappingModal, updateIsOpenTypeMappingModal] = useImmer>(new Map());\n\n const { fields, append, remove } = useFieldArray({ control, name: 'auth_provider_mappings_attributes' as ArrayPath });\n const output = useWatch({ name: 'auth_provider_mappings_attributes' as Path, control });\n\n /**\n * Build the list of available models for the data mapping\n */\n const buildModelOptions = (): Array => {\n if (!dataMapping) return [];\n\n return Object.keys(dataMapping).map(model => {\n return {\n label: model,\n value: model\n };\n }) || [];\n };\n\n /**\n * Build the list of fields of the current model for the data mapping\n */\n const buildFieldOptions = (formData: Array, index: number): Array => {\n if (!dataMapping) return [];\n\n return dataMapping[getModel(formData, index)]?.map(field => {\n return {\n label: field[0],\n value: field[0]\n };\n }) || [];\n };\n\n /**\n * Return the name of the modal for the given index, in the current data-mapping form\n */\n const getModel = (formData: Array, index: number): string => {\n return formData ? formData[index]?.local_model : undefined;\n };\n\n /**\n * Return the name of the field for the given index, in the current data-mapping form\n */\n const getField = (formData: Array, index: number): string => {\n return formData ? formData[index]?.local_field : undefined;\n };\n\n /**\n * Return the type of data expected for the given index, in the current data-mapping form\n */\n const getDataType = (formData: Array, index: number): mappingType => {\n const model = getModel(formData, index);\n const field = getField(formData, index);\n if (model && field && dataMapping) {\n return dataMapping[model]?.find(f => f[0] === field)?.[1];\n }\n };\n\n /**\n * Open/closes the \"edit type mapping\" modal dialog for the given mapping index\n */\n const toggleTypeMappingModal = (index: number): () => void => {\n return () => {\n updateIsOpenTypeMappingModal(draft => draft.set(index, !draft.get(index)));\n };\n };\n\n /**\n * Remove the data whom index is provided: mark it as \"to destroy\" or simply remove it if it was unsaved\n */\n const removeMapping = (index: number): void => {\n if (currentFormValues[index].id) {\n setValue(\n `auth_provider_mappings_attributes.${index}._destroy` as Path,\n true as UnpackNestedValue>>\n );\n } else {\n remove(index);\n }\n };\n\n /**\n * Return a className based on the current mapping-item status\n */\n const itemStatus = (index: number): string => {\n if (currentFormValues[index]?.id) {\n if (currentFormValues[index]._destroy) return 'destroyed-item';\n return 'saved-item';\n }\n return 'new-item';\n };\n\n // fetch the mapping data from the API on mount\n useEffect(() => {\n AuthProviderAPI.mappingFields().then((data) => {\n setDataMapping(data);\n });\n }, []);\n\n return (\n
\n

{t('app.admin.authentication.data_mapping_form.define_the_fields_mapping')}

\n
\n }\n onClick={() => append({})}>\n {t('app.admin.authentication.data_mapping_form.add_a_match')}\n \n
\n {fields.map((item, index) => (\n
\n
\n \n
\n \n \n
\n
\n {providerType === 'OAuth2Provider' && }\n {providerType === 'OpenIdConnectProvider' && }\n
\n
\n
\n }\n onClick={toggleTypeMappingModal(index)}\n disabled={getField(output, index) === undefined}\n tooltip={t('app.admin.authentication.data_mapping_form.data_mapping')} />\n } onClick={() => removeMapping(index)} className=\"delete-button\" />\n \n
\n
\n ))}\n
\n );\n};\n","import React from 'react';\nimport { FormInput } from '../form/form-input';\nimport { UseFormRegister } from 'react-hook-form';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\n\ninterface DatabaseFormProps {\n register: UseFormRegister,\n}\n\n/**\n * Partial form to fill the settings for a new/existing database provider.\n */\nexport const DatabaseForm = ({ register }: DatabaseFormProps) => {\n return (\n
\n \n
\n );\n};\n","import React from 'react';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { useTranslation } from 'react-i18next';\nimport { FormSelect } from '../form/form-select';\nimport { Control } from 'react-hook-form/dist/types/form';\n\nexport interface DateMappingFormProps {\n control: Control,\n fieldMappingId: number,\n}\n\n/**\n * Partial form for mapping an internal date field to an external API.\n */\nexport const DateMappingForm = ({ control, fieldMappingId }: DateMappingFormProps) => {\n const { t } = useTranslation('admin');\n\n // available date formats\n const dateFormats = [\n {\n label: 'ISO 8601',\n value: 'iso8601'\n },\n {\n label: 'RFC 2822',\n value: 'rfc2822'\n },\n {\n label: 'RFC 3339',\n value: 'rfc3339'\n },\n {\n label: 'Timestamp (s)',\n value: 'timestamp-s'\n },\n {\n label: 'Timestamp (ms)',\n value: 'timestamp-ms'\n }\n ];\n\n return (\n
\n

{t('app.admin.authentication.date_mapping_form.input_format')}

\n \n
\n );\n};\n","import React from 'react';\nimport { ArrayPath, useFieldArray, UseFormRegister } from 'react-hook-form';\nimport { Control } from 'react-hook-form/dist/types/form';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { useTranslation } from 'react-i18next';\nimport { FabButton } from '../base/fab-button';\nimport { FormInput } from '../form/form-input';\n\nexport interface IntegerMappingFormProps {\n register: UseFormRegister,\n control: Control,\n fieldMappingId: number,\n}\n\n/**\n * Partial for to map an internal integer field to an external API providing a string value.\n */\nexport const IntegerMappingForm = ({ register, control, fieldMappingId }: IntegerMappingFormProps) => {\n const { t } = useTranslation('admin');\n\n const { fields, append, remove } = useFieldArray({ control, name: 'auth_provider_mappings_attributes_transformation_mapping' as ArrayPath });\n\n return (\n
\n

{t('app.admin.authentication.integer_mapping_form.mappings')}

\n
\n }\n onClick={() => append({})} />\n
\n {fields.map((item, index) => (\n
\n
\n \n \n
\n
\n } onClick={() => remove(index)} className=\"delete-button\" />\n
\n
\n ))}\n
\n );\n};\n","import React from 'react';\nimport { UseFormRegister } from 'react-hook-form';\nimport { Control } from 'react-hook-form/dist/types/form';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { FormInput } from '../form/form-input';\nimport { FormSelect } from '../form/form-select';\nimport { HtmlTranslate } from '../base/html-translate';\nimport { useTranslation } from 'react-i18next';\n\ninterface Oauth2DataMappingFormProps {\n register: UseFormRegister,\n control: Control,\n index: number,\n}\n\n/**\n * Partial form to set the data mapping for an OAuth 2.0 provider.\n * The data mapping is the way to bind data from the authentication provider API to the Fab-manager's database\n */\nexport const Oauth2DataMappingForm = ({ register, control, index }: Oauth2DataMappingFormProps) => {\n const { t } = useTranslation('admin');\n\n return (\n
\n \n \n }\n label={t('app.admin.authentication.oauth2_data_mapping_form.api_field')} />\n
\n );\n};\n","import React from 'react';\nimport { FormInput } from '../form/form-input';\nimport { UseFormRegister } from 'react-hook-form';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { useTranslation } from 'react-i18next';\nimport { FabOutputCopy } from '../base/fab-output-copy';\n\ninterface Oauth2FormProps {\n register: UseFormRegister,\n strategyName?: string,\n}\n\n/**\n * Partial form to fill the OAuth2 settings for a new/existing authentication provider.\n */\nexport const Oauth2Form = ({ register, strategyName }: Oauth2FormProps) => {\n const { t } = useTranslation('admin');\n\n // regular expression to validate the input fields\n const endpointRegex = /^\\/?([-._~:?#[\\]@!$&'()*+,;=%\\w]+\\/?)*$/;\n const urlRegex = /^(https?:\\/\\/)([^.]+)\\.(.{2,30})(\\/.*)*\\/?$/;\n\n /**\n * Build the callback URL, based on the strategy name.\n */\n const buildCallbackUrl = (): string => {\n return `${window.location.origin}/users/auth/${strategyName}/callback`;\n };\n\n return (\n
\n
\n \n \n \n \n \n \n \n \n
\n );\n};\n","import React from 'react';\nimport { Path, UseFormRegister } from 'react-hook-form';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { FormInput } from '../form/form-input';\nimport { HtmlTranslate } from '../base/html-translate';\nimport { useTranslation } from 'react-i18next';\nimport { UnpackNestedValue, UseFormSetValue } from 'react-hook-form/dist/types/form';\nimport { FabButton } from '../base/fab-button';\nimport { FieldPathValue } from 'react-hook-form/dist/types/path';\nimport { AuthenticationProviderMapping } from '../../models/authentication-provider';\n\ninterface OpenidConnectDataMappingFormProps {\n register: UseFormRegister,\n setValue: UseFormSetValue,\n currentFormValues: Array,\n index: number,\n}\n\n/**\n * Partial form to set the data mapping for an OpenID Connect provider.\n * The data mapping is the way to bind data from the OIDC claims to the Fab-manager's database\n */\nexport const OpenidConnectDataMappingForm = ({ register, setValue, currentFormValues, index }: OpenidConnectDataMappingFormProps) => {\n const { t } = useTranslation('admin');\n\n const standardConfiguration = {\n 'user.uid': { api_field: 'sub' },\n 'user.email': { api_field: 'email' },\n 'user.username': { api_field: 'preferred_username' },\n 'profile.first_name': { api_field: 'given_name' },\n 'profile.last_name': { api_field: 'family_name' },\n 'profile.avatar': { api_field: 'picture' },\n 'profile.website': { api_field: 'website' },\n 'profile.gender': { api_field: 'gender', transformation: { true_value: 'male', false_value: 'female' } },\n 'profile.birthday': { api_field: 'birthdate', transformation: { format: 'iso8601' } },\n 'profile.phone': { api_field: 'phone_number' },\n 'profile.address': { api_field: 'address.formatted' }\n };\n\n /**\n * Set the data mapping according to the standard OpenID Connect specification\n */\n const openIdStandardConfiguration = (): void => {\n const model = currentFormValues[index]?.local_model;\n const field = currentFormValues[index]?.local_field;\n const configuration = standardConfiguration[`${model}.${field}`];\n if (configuration) {\n setValue(\n `auth_provider_mappings_attributes.${index}.api_field` as Path,\n configuration.api_field as UnpackNestedValue>>\n );\n if (configuration.transformation) {\n Object.keys(configuration.transformation).forEach((key) => {\n setValue(\n `auth_provider_mappings_attributes.${index}.transformation.${key}` as Path,\n configuration.transformation[key] as UnpackNestedValue>>\n );\n });\n }\n }\n };\n\n return (\n
\n \n \n }\n label={t('app.admin.authentication.openid_connect_data_mapping_form.api_field')} />\n }\n className=\"auto-configure-button\"\n onClick={openIdStandardConfiguration}\n tooltip={t('app.admin.authentication.openid_connect_data_mapping_form.openid_standard_configuration')} />\n
\n );\n};\n","import axios, { AxiosInstance } from 'axios';\n\nfunction client (host: string): AxiosInstance {\n return axios.create({\n baseURL: host\n });\n}\n\nexport default client;\n","import ssoClient from '../clients/sso-client';\nimport { AxiosResponse } from 'axios';\nimport { OpenIdConfiguration } from '../../models/sso';\n\nexport default class SsoClient {\n /**\n * @see https://openid.net/specs/openid-connect-discovery-1_0.html\n */\n static async openIdConfiguration (host: string): Promise {\n const res: AxiosResponse = await ssoClient(host).get('.well-known/openid-configuration');\n return res?.data;\n }\n}\n","import React, { useEffect, useState } from 'react';\nimport { Path, UseFormRegister } from 'react-hook-form';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { useTranslation } from 'react-i18next';\nimport { FormInput } from '../form/form-input';\nimport { FormSelect } from '../form/form-select';\nimport { Control, FormState, UnpackNestedValue, UseFormSetValue } from 'react-hook-form/dist/types/form';\nimport { HtmlTranslate } from '../base/html-translate';\nimport { OpenIdConnectProvider } from '../../models/authentication-provider';\nimport SsoClient from '../../api/external/sso';\nimport { FieldPathValue } from 'react-hook-form/dist/types/path';\nimport { FormMultiSelect } from '../form/form-multi-select';\nimport { difference } from 'lodash';\n\ninterface OpenidConnectFormProps {\n register: UseFormRegister,\n control: Control,\n currentFormValues: OpenIdConnectProvider,\n formState: FormState,\n setValue: UseFormSetValue,\n}\n\n/**\n * Partial form to fill the OpenID Connect (OIDC) settings for a new/existing authentication provider.\n */\nexport const OpenidConnectForm = ({ register, control, currentFormValues, formState, setValue }: OpenidConnectFormProps) => {\n const { t } = useTranslation('admin');\n\n // saves the state of the discovery endpoint\n const [discoveryAvailable, setDiscoveryAvailable] = useState(false);\n const [scopesAvailable, setScopesAvailable] = useState(null);\n // this is a workaround for https://github.com/JedWatson/react-select/issues/1879\n const [selectKey, setSelectKey] = useState(0);\n\n // when we have detected a discovery endpoint, we mark it as available\n useEffect(() => {\n setValue(\n 'providable_attributes.discovery' as Path,\n discoveryAvailable as UnpackNestedValue>>\n );\n }, [discoveryAvailable]);\n\n // this will force the scope \"select\" to re-fetch the options\n useEffect(() => {\n setSelectKey(selectKey + 1);\n }, [scopesAvailable]);\n\n // when the component is mounted, we try to discover the discovery endpoint for the current configuration (if any)\n useEffect(() => {\n checkForDiscoveryEndpoint({ target: { value: currentFormValues?.issuer } } as React.ChangeEvent);\n }, []);\n\n // regular expression to validate the input fields\n const endpointRegex = /^\\/?([-._~:?#[\\]@!$&'()*+,;=%\\w]+\\/?)*$/;\n const urlRegex = /^(https?:\\/\\/)([^.]+)\\.(.{2,30})(\\/.*)*\\/?$/;\n\n /**\n * If the discovery endpoint is available, the user will be able to choose to use it or not.\n * Otherwise, he will need to end the client configuration manually.\n */\n const buildDiscoveryOptions = () => {\n if (discoveryAvailable) {\n return [\n { value: true, label: t('app.admin.authentication.openid_connect_form.discovery_enabled') },\n { value: false, label: t('app.admin.authentication.openid_connect_form.discovery_disabled') }\n ];\n }\n\n return [\n { value: false, label: t('app.admin.authentication.openid_connect_form.discovery_disabled') }\n ];\n };\n\n /**\n * Return the list of scopes that are available for the current configuration.\n * The resulting list is provided through the callback parameter.\n */\n const loadScopes = (inputValue: string, callback: (options: Array<{ value: string, label: string }>) => void): void => {\n const current = currentFormValues?.scope || [];\n if (scopesAvailable) {\n // add custom scopes to the list of available scopes\n const unlisted = difference(current, scopesAvailable);\n callback(scopesAvailable.concat(unlisted).map(scope => ({ value: scope, label: scope })));\n } else {\n callback(current.map(scope => ({ value: scope, label: scope })));\n }\n };\n\n /**\n * Callback that check for the existence of the .well-known/openid-configuration endpoint, for the given issuer.\n * This callback is triggered when the user changes the issuer field.\n */\n const checkForDiscoveryEndpoint = (e: React.ChangeEvent) => {\n SsoClient.openIdConfiguration(e.target.value).then((configuration) => {\n setDiscoveryAvailable(true);\n setScopesAvailable(configuration.scopes_supported);\n }).catch(() => {\n setDiscoveryAvailable(false);\n setScopesAvailable(null);\n });\n };\n\n return (\n
\n
\n \n \n \n }\n loadOptions={loadScopes}\n selectKey={selectKey.toString()}\n creatable\n control={control} />\n }\n options={[\n { value: 'none', label: t('app.admin.authentication.openid_connect_form.prompt_none') },\n { value: 'login', label: t('app.admin.authentication.openid_connect_form.prompt_login') },\n { value: 'consent', label: t('app.admin.authentication.openid_connect_form.prompt_consent') },\n { value: 'select_account', label: t('app.admin.authentication.openid_connect_form.prompt_select_account') }\n ]}\n clearable\n control={control} />\n \n \n

{t('app.admin.authentication.openid_connect_form.client_options')}

\n \n \n {!currentFormValues?.discovery &&
\n \n \n \n {currentFormValues?.client_auth_method === 'jwks' && }\n \n
}\n
\n );\n};\n","import React, { useCallback, useEffect, useState } from 'react';\nimport { useForm, SubmitHandler, useWatch } from 'react-hook-form';\nimport { react2angular } from 'react2angular';\nimport { debounce as _debounce } from 'lodash';\nimport {\n AuthenticationProvider,\n AuthenticationProviderMapping,\n OpenIdConnectProvider,\n ProvidableType\n} from '../../models/authentication-provider';\nimport { Loader } from '../base/loader';\nimport { IApplication } from '../../models/application';\nimport { FormInput } from '../form/form-input';\nimport { useTranslation } from 'react-i18next';\nimport { FormSelect } from '../form/form-select';\nimport { Oauth2Form } from './oauth2-form';\nimport { DataMappingForm } from './data-mapping-form';\nimport { FabButton } from '../base/fab-button';\nimport AuthProviderAPI from '../../api/auth-provider';\nimport { OpenidConnectForm } from './openid-connect-form';\nimport { DatabaseForm } from './database-form';\n\ndeclare const Application: IApplication;\n\n// list of supported authentication methods\nconst METHODS = {\n DatabaseProvider: 'local_database',\n OAuth2Provider: 'oauth2',\n OpenIdConnectProvider: 'openid_connect'\n};\n\ninterface ProviderFormProps {\n action: 'create' | 'update',\n provider?: AuthenticationProvider,\n onError: (message: string) => void,\n onSuccess: (message: string) => void,\n}\n\ntype selectProvidableTypeOption = { value: string, label: string };\n\n/**\n * Form to create or update an authentication provider.\n */\nexport const ProviderForm: React.FC = ({ action, provider, onError, onSuccess }) => {\n const { handleSubmit, register, control, formState, setValue } = useForm({ defaultValues: { ...provider } });\n const output = useWatch({ control });\n const [providableType, setProvidableType] = useState(provider?.providable_type);\n const [strategyName, setStrategyName] = useState(provider?.strategy_name);\n\n const { t } = useTranslation('admin');\n\n useEffect(() => {\n updateStrategyName(output as AuthenticationProvider);\n }, [output?.providable_type, output?.name]);\n\n /**\n * Callback triggered when the form is submitted: process with the provider creation or update.\n */\n const onSubmit: SubmitHandler = (data: AuthenticationProvider) => {\n AuthProviderAPI[action](data).then(() => {\n onSuccess(t(`app.admin.authentication.provider_form.${action}_success`));\n }).catch(error => {\n onError(error);\n });\n };\n\n /**\n * Build the list of available authentication methods to match with react-select requirements.\n */\n const buildProvidableTypeOptions = (): Array => {\n return Object.keys(METHODS).map((method: string) => {\n return { value: method, label: t(`app.admin.authentication.provider_form.methods.${METHODS[method]}`) };\n });\n };\n\n /**\n * Callback triggered when the providable type is changed.\n * Changing the providable type will change the form to match the new type.\n */\n const onProvidableTypeChange = (type: ProvidableType) => {\n setProvidableType(type);\n };\n\n /**\n * Request the API the strategy name for the current \"in-progress\" provider.\n */\n const updateStrategyName = useCallback(_debounce((provider: AuthenticationProvider): void => {\n AuthProviderAPI.strategyName(provider).then(strategyName => {\n setStrategyName(strategyName);\n }).catch(error => {\n onError(error);\n });\n }, 400), []);\n\n return (\n
\n \n \n {providableType === 'DatabaseProvider' && }\n {providableType === 'OAuth2Provider' && }\n {providableType === 'OpenIdConnectProvider' && }\n {providableType && providableType !== 'DatabaseProvider' && } />}\n
\n {t('app.admin.authentication.provider_form.save')}\n
\n \n );\n};\n\nconst ProviderFormWrapper: React.FC = ({ action, provider, onError, onSuccess }) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('providerForm', react2angular(ProviderFormWrapper, ['action', 'provider', 'onSuccess', 'onError']));\n","import React from 'react';\nimport { ArrayPath, useFieldArray, UseFormRegister } from 'react-hook-form';\nimport { Control } from 'react-hook-form/dist/types/form';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { useTranslation } from 'react-i18next';\nimport { FabButton } from '../base/fab-button';\nimport { FormInput } from '../form/form-input';\n\nexport interface StringMappingFormProps {\n register: UseFormRegister,\n control: Control,\n fieldMappingId: number,\n}\n\n/**\n * Partial form to map an internal string field to an external API.\n */\nexport const StringMappingForm = ({ register, control, fieldMappingId }: StringMappingFormProps) => {\n const { t } = useTranslation('admin');\n\n const { fields, append, remove } = useFieldArray({ control, name: 'auth_provider_mappings_attributes_transformation_mapping' as ArrayPath });\n\n return (\n
\n

{t('app.admin.authentication.string_mapping_form.mappings')}

\n
\n }\n onClick={() => append({})} />\n
\n {fields.map((item, index) => (\n
\n
\n \n \n
\n
\n } onClick={() => remove(index)} className=\"delete-button\" />\n
\n
\n ))}\n
\n );\n};\n","import React from 'react';\nimport { FabModal } from '../base/fab-modal';\nimport { useTranslation } from 'react-i18next';\nimport { IntegerMappingForm } from './integer-mapping-form';\nimport { UseFormRegister } from 'react-hook-form';\nimport { Control } from 'react-hook-form/dist/types/form';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { mappingType } from '../../models/authentication-provider';\nimport { BooleanMappingForm } from './boolean-mapping-form';\nimport { DateMappingForm } from './date-mapping-form';\nimport { StringMappingForm } from './string-mapping-form';\nimport { FormInput } from '../form/form-input';\n\ninterface TypeMappingModalProps {\n model: string,\n field: string,\n type: mappingType,\n isOpen: boolean,\n toggleModal: () => void,\n register: UseFormRegister,\n control: Control,\n fieldMappingId: number,\n}\n\n/**\n * Modal dialog to display the expected type for the current data field.\n * Also allows to map the incoming data (from the authentication provider API) to the expected type/data.\n *\n * This component is intended to be used in a react-hook-form context.\n */\nexport const TypeMappingModal = ({ model, field, type, isOpen, toggleModal, register, control, fieldMappingId }:TypeMappingModalProps) => {\n const { t } = useTranslation('admin');\n\n return (\n }\n onConfirm={toggleModal}>\n {model} > {field} ({t('app.admin.authentication.type_mapping_modal.TYPE_expected', { TYPE: t(`app.admin.authentication.type_mapping_modal.types.${type}`) })})\n \n {type === 'integer' && }\n {type === 'boolean' && }\n {type === 'date' && }\n {type === 'string' && }\n \n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { CaretDown } from 'phosphor-react';\n\ninterface AccordionItemProps {\n isOpen: boolean,\n onChange: (id: number, isOpen: boolean) => void,\n id: number,\n label: string\n}\n\n/**\n * Renders an accordion item\n */\nexport const AccordionItem: React.FC = ({ isOpen, onChange, id, label, children }) => {\n const [state, setState] = useState(isOpen);\n\n useEffect(() => {\n onChange(id, state);\n }, [state]);\n\n return (\n
\n
setState(!state)}>\n {label}\n \n
\n {children}\n
\n );\n};\n","import React from 'react';\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n}\n\n/**\n * This component will catch javascript errors anywhere in their child component tree and display a message to the user.\n * @see https://reactjs.org/docs/error-boundaries.html\n */\nexport class ErrorBoundary extends React.Component {\n constructor (props) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError () {\n return { hasError: true };\n }\n\n componentDidCatch (error, errorInfo) {\n console.error(error, errorInfo);\n }\n\n render () {\n if (this.state.hasError) {\n return

Something went wrong.

;\n }\n\n return this.props.children;\n }\n}\n","import React from 'react';\n\ninterface FabAlertProps {\n level: 'info' | 'warning' | 'danger',\n className?: string,\n}\n\n/**\n * This component shows a styled text paragraph, useful to display important information messages.\n */\nexport const FabAlert: React.FC = ({ level, className, children }) => {\n return (\n
\n {children}\n
\n );\n};\n","import React, { ReactNode, BaseSyntheticEvent } from 'react';\n\ninterface FabButtonProps {\n onClick?: (event: BaseSyntheticEvent) => void,\n icon?: ReactNode,\n className?: string,\n disabled?: boolean,\n type?: 'submit' | 'reset' | 'button',\n form?: string,\n tooltip?: string,\n}\n\n/**\n * This component is a template for a clickable button that wraps the application style\n */\nexport const FabButton: React.FC = ({ onClick, icon, className, disabled, type, form, tooltip, children }) => {\n /**\n * Check if the current component was provided an icon to display\n */\n const hasIcon = (): boolean => {\n return !!icon;\n };\n\n /**\n * Check if the current button has children properties (like some text)\n */\n const hasChildren = (): boolean => {\n return !!children;\n };\n\n /**\n * Handle the action of the button\n */\n const handleClick = (e: BaseSyntheticEvent): void => {\n if (typeof onClick === 'function') {\n onClick(e);\n }\n };\n\n return (\n \n );\n};\n\nFabButton.defaultProps = { type: 'button' };\n","import React, { BaseSyntheticEvent, ReactNode, useCallback, useEffect, useState } from 'react';\nimport { debounce as _debounce } from 'lodash';\n\ntype inputType = string|number|readonly string [];\n\ninterface FabInputProps {\n id: string,\n onChange?: (value: inputType, validity?: ValidityState) => void,\n defaultValue?: inputType,\n icon?: ReactNode,\n addOn?: ReactNode,\n addOnClassName?: string,\n className?: string,\n disabled?: boolean,\n required?: boolean,\n debounce?: number,\n readOnly?: boolean,\n maxLength?: number,\n pattern?: string,\n placeholder?: string,\n error?: string,\n type?: 'text' | 'date' | 'password' | 'url' | 'time' | 'tel' | 'search' | 'number' | 'month' | 'email' | 'datetime-local' | 'week',\n step?: number | 'any',\n min?: number,\n max?: number,\n}\n\n/**\n * This component is a template for an input component that wraps the application style\n */\nexport const FabInput: React.FC = ({ id, onChange, defaultValue, icon, className, disabled, type, required, debounce, addOn, addOnClassName, readOnly, maxLength, pattern, placeholder, error, step, min, max }) => {\n const [inputValue, setInputValue] = useState(defaultValue);\n\n /**\n * When the component is mounted, initialize the default value for the input.\n * If the default value changes, update the value of the input until there's no content in it.\n */\n useEffect(() => {\n setInputValue(defaultValue);\n if (typeof onChange === 'function') {\n onChange(defaultValue);\n }\n }, [defaultValue]);\n\n /**\n * Check if the current component was provided an icon to display\n */\n const hasIcon = (): boolean => {\n return !!icon;\n };\n\n /**\n * Check if the current component was provided an add-on element to display, at the end of the input\n */\n const hasAddOn = (): boolean => {\n return !!addOn;\n };\n\n /**\n * Check if the current component was provided an error string to display, on the input\n */\n const hasError = (): boolean => {\n return !!error;\n };\n\n /**\n * Debounced (ie. temporised) version of the 'on change' callback.\n */\n const debouncedOnChange = debounce ? useCallback(_debounce(onChange, debounce), [onChange, debounce]) : null;\n\n /**\n * Handle the change of content in the input field, and trigger the parent callback, if any\n */\n const handleChange = (e: BaseSyntheticEvent): void => {\n const { value, validity } = e.target;\n setInputValue(value);\n if (typeof onChange === 'function') {\n if (debounce) {\n debouncedOnChange(value, validity);\n } else {\n onChange(value, validity);\n }\n }\n };\n\n return (\n
\n
\n {hasIcon() && {icon}}\n \n {hasAddOn() && {addOn}}\n
\n {hasError() && {error} }\n
\n );\n};\n\nFabInput.defaultProps = { type: 'text', debounce: 0 };\n","import React, { ReactNode, BaseSyntheticEvent, useEffect } from 'react';\nimport Modal from 'react-modal';\nimport { useTranslation } from 'react-i18next';\nimport { Loader } from './loader';\nimport { FabButton } from './fab-button';\n\nModal.setAppElement('body');\n\nexport enum ModalSize {\n small = 'sm',\n medium = 'md',\n large = 'lg'\n}\n\ninterface FabModalProps {\n title?: string,\n isOpen: boolean,\n toggleModal: () => void,\n confirmButton?: ReactNode,\n closeButton?: boolean,\n className?: string,\n width?: ModalSize,\n customHeader?: ReactNode,\n customFooter?: ReactNode,\n onConfirm?: (event: BaseSyntheticEvent) => void,\n onClose?: (event: BaseSyntheticEvent) => void,\n preventConfirm?: boolean,\n onCreation?: () => void,\n onConfirmSendFormId?: string,\n}\n\n/**\n * This component is a template for a modal dialog that wraps the application style\n */\nexport const FabModal: React.FC = ({ title, isOpen, toggleModal, children, confirmButton, className, width = 'sm', closeButton, customHeader, customFooter, onConfirm, onClose, preventConfirm, onCreation, onConfirmSendFormId }) => {\n const { t } = useTranslation('shared');\n\n useEffect(() => {\n if (typeof onCreation === 'function' && isOpen) {\n onCreation();\n }\n }, [isOpen]);\n\n /**\n * Callback triggered when the user request to close the modal without confirming.\n */\n const handleClose = (event) => {\n if (typeof onClose === 'function') onClose(event);\n toggleModal();\n };\n\n return (\n \n {closeButton && {t('app.shared.fab_modal.close')}}\n
\n {!customHeader &&

{ title }

}\n {customHeader && customHeader}\n
\n
\n {children}\n
\n {(customFooter || confirmButton) &&
\n \n {confirmButton && !onConfirmSendFormId && {confirmButton}}\n {confirmButton && onConfirmSendFormId && {confirmButton}}\n {customFooter && customFooter}\n \n
}\n
\n );\n};\n","import React from 'react';\n\ninterface FabOutputCopyProps {\n text: string,\n onCopy?: () => void,\n label?: string,\n}\n\n/**\n * This component shows a read-only input text filled with the provided text. A button allows to copy the text to the clipboard.\n */\nexport const FabOutputCopy: React.FC = ({ label, text, onCopy }) => {\n const [copied, setCopied] = React.useState(false);\n /**\n * Copy the given text to the clipboard.\n */\n const textToClipboard = () => {\n if (navigator?.clipboard?.writeText) {\n navigator.clipboard.writeText(text).then(() => {\n setCopied(true);\n setTimeout(() => setCopied(false), 1000);\n if (onCopy) {\n onCopy();\n }\n });\n }\n };\n\n return (\n
\n \n
\n );\n};\n","import React from 'react';\nimport { CaretDoubleLeft, CaretLeft, CaretRight, CaretDoubleRight } from 'phosphor-react';\n\ninterface FabPaginationProps {\n pageCount: number,\n currentPage: number,\n selectPage: (page: number) => void\n}\n\n/**\n * Renders a pagination navigation\n */\nexport const FabPagination: React.FC = ({ pageCount, currentPage, selectPage }) => {\n return (\n \n );\n};\n","import React, { ReactNode } from 'react';\n\ninterface FabPanelProps {\n className?: string,\n header?: ReactNode,\n size?: 'small' | 'normal'\n}\n\n/**\n * Simple styled panel component\n */\nexport const FabPanel: React.FC = ({ className, header, size, children }) => {\n return (\n
\n {header &&
\n
\n {header}\n
\n
\n {children}\n
\n
}\n {!header &&
\n {children}\n
}\n
\n );\n};\n","import React, { ReactNode } from 'react';\n\ninterface FabPopoverProps {\n title: string,\n className?: string,\n headerButton?: ReactNode,\n position?: 'bottom' | 'right' | 'left'\n}\n\n/**\n * This component is a template for a popovers (bottom) that wraps the application style.\n * Please note that the parent element must be set `position: relative;` otherwise the popover won't be placed correctly.\n */\nexport const FabPopover: React.FC = ({ title, className, headerButton, position = 'bottom', children }) => {\n /**\n * Check if the header button should be present\n */\n const hasHeaderButton = (): boolean => {\n return !!headerButton;\n };\n\n return (\n
\n
\n

{title}

\n {hasHeaderButton() && headerButton}\n
\n
\n {children}\n
\n
\n );\n};\n","import React from 'react';\n\ninterface FabStateLabelProps {\n status?: string,\n background?: boolean\n}\n\n/**\n * Render a label preceded by a bot\n */\nexport const FabStateLabel: React.FC = ({ status, background, children }) => {\n return (\n \n {children}\n \n );\n};\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\n\ninterface HtmlTranslateProps {\n trKey: string,\n options?: Record\n}\n\n/**\n * This component renders a translation with some HTML content.\n */\nexport const HtmlTranslate: React.FC = ({ trKey, options }) => {\n const { t } = useTranslation(trKey?.split('.')[1]);\n\n return (\n \n );\n};\n","import React, { BaseSyntheticEvent, ReactNode } from 'react';\n\ntype inputType = string|number|readonly string [];\n\ninterface LabelledInputProps {\n id: string,\n type?: 'text' | 'date' | 'password' | 'url' | 'time' | 'tel' | 'search' | 'number' | 'month' | 'email' | 'datetime-local' | 'week',\n label: string | ReactNode,\n value: inputType,\n onChange: (event: BaseSyntheticEvent) => void\n}\n\n/**\n * This component shows input field with its label, styled\n */\nexport const LabelledInput: React.FC = ({ id, type, label, value, onChange }) => {\n return (\n
\n \n \n
\n );\n};\n","import React, { Suspense } from 'react';\n\n/**\n * This component is a wrapper that display a loader while the children components have their rendering suspended.\n */\nexport const Loader: React.FC = ({ children }) => {\n const loading = (\n
\n \n
\n );\n return (\n \n {children}\n \n );\n};\n","import React, { forwardRef, RefObject, useEffect, useImperativeHandle, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useEditor, EditorContent, Editor } from '@tiptap/react';\nimport StarterKit from '@tiptap/starter-kit';\nimport Placeholder from '@tiptap/extension-placeholder';\nimport CharacterCount from '@tiptap/extension-character-count';\nimport Underline from '@tiptap/extension-underline';\nimport Link from '@tiptap/extension-link';\nimport Iframe from './iframe';\nimport Image from '@tiptap/extension-image';\nimport { MenuBar } from './menu-bar';\nimport { WarningOctagon } from 'phosphor-react';\n\ninterface FabTextEditorProps {\n heading?: boolean,\n bulletList?: boolean,\n blockquote?: boolean,\n link?: boolean,\n video?: boolean,\n image?: boolean,\n content?: string,\n limit?: number,\n onChange?: (content: string) => void,\n placeholder?: string,\n error?: string,\n disabled?: boolean\n}\n\nexport interface FabTextEditorRef {\n focus: () => void\n}\n\n/**\n * This component is a WYSIWYG text editor\n */\nconst FabTextEditor: React.ForwardRefRenderFunction = ({ heading, bulletList, blockquote, content, limit = 400, video, image, link, onChange, placeholder, error, disabled = false }, ref: RefObject) => {\n const { t } = useTranslation('shared');\n const placeholderText = placeholder || t('app.shared.text_editor.fab_text_editor.text_placeholder');\n // TODO: Add ctrl+click on link to visit\n\n const editorRef: React.MutableRefObject = useRef(null);\n // the methods in useImperativeHandle are exposed to the parent component\n useImperativeHandle(ref, () => ({\n focus () {\n editorRef.current?.commands?.focus();\n }\n }), []);\n\n // Setup the editor\n // Extensions add functionalities to the editor (Bold, Italic…)\n // Events fire action (onUpdate -> get the content as HTML)\n const editor = useEditor({\n extensions: [\n StarterKit.configure({\n heading: {\n levels: [3]\n }\n }),\n Underline,\n Link.configure({\n openOnClick: false\n }),\n Placeholder.configure({\n placeholder: placeholderText\n }),\n CharacterCount.configure({\n limit\n }),\n Iframe,\n Image.configure({\n HTMLAttributes: {\n class: 'fab-text-editor-image'\n }\n })\n ],\n content,\n onUpdate: ({ editor }) => {\n if (editor.isEmpty) {\n onChange('');\n } else {\n onChange(editor.getHTML());\n }\n }\n });\n\n useEffect(() => {\n editor?.setEditable(!disabled);\n }, [disabled]);\n\n useEffect(() => {\n if (editor?.getHTML() !== content) {\n editor?.commands.setContent(content);\n }\n }, [content]);\n\n // bind the editor to the ref, once it is ready\n if (!editor) return null;\n editorRef.current = editor;\n\n return (\n
\n \n \n {limit &&
\n {editor?.storage.characterCount.characters()} / {limit}\n
}\n {error &&\n
\n \n

{error}

\n
\n }\n
\n );\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default forwardRef(FabTextEditor);\n","import { Node } from '@tiptap/core';\n\nexport interface IframeOptions {\n allowFullscreen: boolean,\n HTMLAttributes: {\n [key: string]: string\n },\n}\n\ndeclare module '@tiptap/core' {\n interface Commands {\n iframe: {\n /**\n * Add an iframe to embed a video\n */\n setIframe: (options: { src: string }) => ReturnType,\n }\n }\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default Node.create({\n name: 'iframe',\n\n group: 'block',\n\n atom: true,\n\n addOptions () {\n return {\n allowFullscreen: true,\n HTMLAttributes: {\n class: 'fab-text-editor-video'\n }\n };\n },\n\n addAttributes () {\n return {\n src: {\n default: null\n },\n frameborder: {\n default: 0\n },\n allowfullscreen: {\n default: this.options.allowFullscreen,\n parseHTML: () => this.options.allowFullscreen\n }\n };\n },\n\n parseHTML () {\n return [{\n tag: 'iframe'\n }];\n },\n\n renderHTML ({ HTMLAttributes }) {\n return ['div', this.options.HTMLAttributes, ['iframe', HTMLAttributes]];\n },\n\n addCommands () {\n return {\n setIframe: (options: { src: string }) => ({ tr, dispatch }) => {\n const { selection } = tr;\n const node = this.type.create(options);\n\n if (dispatch) {\n tr.replaceRangeWith(selection.from, selection.to, node);\n }\n\n return true;\n }\n };\n }\n});\n","import React, { useCallback, useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport useOnclickOutside from 'react-cool-onclickoutside';\nimport { Editor } from '@tiptap/react';\nimport { TextAa, TextBolder, TextItalic, TextUnderline, LinkSimpleHorizontal, ListBullets, Quotes, Trash, CheckCircle, VideoCamera, Image } from 'phosphor-react';\n\ninterface MenuBarProps {\n editor?: Editor,\n heading?: boolean,\n bulletList?: boolean,\n blockquote?: boolean,\n link?: boolean,\n video?: boolean,\n image?: boolean,\n disabled?: boolean,\n}\n\n/**\n * This component is the menu bar for the WYSIWYG text editor\n */\nexport const MenuBar: React.FC = ({ editor, heading, bulletList, blockquote, link, video, image, disabled = false }) => {\n const { t } = useTranslation('shared');\n\n const [submenu, setSubmenu] = useState('');\n const resetUrl = { href: '', target: '_blank' };\n const [url, setUrl] = useState(resetUrl);\n const [videoProvider, setVideoProvider] = useState('youtube');\n const [videoId, setVideoId] = useState('');\n const [imageUrl, setImageUrl] = useState('');\n\n // Reset state values when the submenu is closed\n useEffect(() => {\n if (!submenu) {\n setUrl(resetUrl);\n setVideoProvider('youtube');\n setImageUrl('');\n }\n }, [submenu]);\n\n // Close the submenu frame on click outside\n const ref = useOnclickOutside(() => {\n setSubmenu('');\n });\n\n // Toggle submenu's visibility\n const toggleSubmenu = (type) => {\n if (submenu !== type) {\n setSubmenu(type);\n if (type === 'link') {\n if (editor.view.state.selection.from === editor.view.state.selection.to) {\n setSubmenu('');\n return;\n }\n const previousUrl = {\n href: editor.getAttributes('link').href,\n target: editor.getAttributes('link').target || ''\n };\n // display selected text's attributes if it's a link\n if (previousUrl.href) {\n setUrl(previousUrl);\n }\n }\n } else {\n setSubmenu('');\n }\n };\n\n // Set link's target\n const toggleTarget = (evt) => {\n evt.target.checked\n ? setUrl({ href: url.href, target: '_blank' })\n : setUrl({ href: url.href, target: '' });\n };\n\n // Update url\n const linkUrlChange = (evt) => {\n setUrl({ ...url, href: evt.target.value });\n };\n // Support keyboard \"Enter\" key event to validate\n const handleEnter = (evt) => {\n if (evt.keyCode === 13) {\n setLink(true);\n }\n };\n\n // Update the selected link\n const setLink = useCallback((closeLinkMenu?: boolean) => {\n if (url.href === '') {\n unsetLink();\n return;\n }\n editor.chain().focus().extendMarkRange('link').setLink({ href: url.href, target: url.target }).run();\n if (closeLinkMenu) {\n setSubmenu('');\n }\n }, [editor, url]);\n\n // Remove the link tag from the selected text\n const unsetLink = () => {\n editor.chain().focus().extendMarkRange('link').unsetLink().run();\n setSubmenu('');\n };\n\n // Store selected video provider in state\n const handleSelect = (evt) => {\n setVideoProvider(evt.target.value);\n };\n // Store video id in state\n const videoUrlChange = (evt) => {\n const id = evt.target.value.match(/([^/]+$)/g);\n setVideoId(id);\n };\n // Insert iframe containing the video player\n const addIframe = () => {\n let videoUrl = '';\n switch (videoProvider) {\n case 'youtube':\n videoUrl = `https://www.youtube.com/embed/${videoId}`;\n break;\n case 'vimeo':\n videoUrl = `https://player.vimeo.com/video/${videoId}`;\n break;\n case 'dailymotion':\n videoUrl = `https://www.dailymotion.com/embed/video/${videoId}`;\n break;\n default:\n break;\n }\n editor.chain().focus().setIframe({ src: videoUrl }).run();\n setSubmenu('');\n };\n\n // Store image url in state\n const imageUrlChange = (evt) => {\n setImageUrl(evt.target.value);\n };\n // Insert image\n const addImage = () => {\n if (imageUrl) {\n editor.chain().focus().setImage({ src: imageUrl }).run();\n setSubmenu('');\n }\n };\n\n if (!editor) {\n return null;\n }\n\n return (\n <>\n
\n {heading &&\n editor.chain().focus().toggleHeading({ level: 3 }).run()}\n disabled={disabled}\n className={editor.isActive('heading', { level: 3 }) ? 'is-active' : ''}\n >\n \n \n }\n {bulletList &&\n editor.chain().focus().toggleBulletList().run()}\n disabled={disabled}\n className={editor.isActive('bulletList') ? 'is-active' : ''}\n >\n \n \n }\n {blockquote &&\n editor.chain().focus().toggleBlockquote().run()}\n disabled={disabled}\n className={editor.isActive('blockquote') ? 'is-active' : ''}\n >\n \n \n }\n { (heading || bulletList || blockquote) && }\n editor.chain().focus().toggleBold().run()}\n disabled={disabled}\n className={editor.isActive('bold') ? 'is-active' : ''}\n >\n \n \n editor.chain().focus().toggleItalic().run()}\n disabled={disabled}\n className={editor.isActive('italic') ? 'is-active' : ''}\n >\n \n \n editor.chain().focus().toggleUnderline().run()}\n disabled={disabled}\n className={editor.isActive('underline') ? 'is-active' : ''}\n >\n \n \n {link &&\n toggleSubmenu('link')}\n disabled={disabled}\n className={`ignore-onclickoutside ${editor.isActive('link') ? 'is-active' : ''}`}\n >\n \n \n }\n { (video || image) && }\n { video &&\n (<>\n toggleSubmenu('video')}\n >\n \n \n )\n }\n { image &&\n (<>\n toggleSubmenu('image')}\n >\n \n \n )\n }\n
\n\n
\n { submenu === 'link' &&\n (<>\n
{t('app.shared.text_editor.menu_bar.add_link')}
\n
\n \n \n
\n
\n \n \n
\n )\n }\n { submenu === 'video' &&\n (<>\n
{t('app.shared.text_editor.menu_bar.add_video')}
\n \n
\n \n \n
\n )\n }\n { submenu === 'image' &&\n (<>\n
{t('app.shared.text_editor.menu_bar.add_image')}
\n
\n \n \n
\n )\n }\n
\n \n );\n};\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { react2angular } from 'react2angular';\nimport { Loader } from '../base/loader';\nimport { IApplication } from '../../models/application';\nimport { Order } from '../../models/order';\nimport { useCustomEventListener } from 'react-custom-events';\n\ndeclare const Application: IApplication;\n\n/**\n * This component shows my cart button\n */\nconst CartButton: React.FC = () => {\n const { t } = useTranslation('public');\n const [cart, setCart] = useState();\n useCustomEventListener('CartUpdate', (data) => {\n setCart(data);\n });\n\n /**\n * Goto cart page\n */\n const showCart = () => {\n window.location.href = '/#!/store/cart';\n };\n\n return (\n
\n \n {cart && cart.order_items_attributes.length > 0 &&\n {cart.order_items_attributes.length}\n }\n

{t('app.public.cart_button.my_cart')}

\n
\n );\n};\n\nconst CartButtonWrapper: React.FC = () => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('cartButton', react2angular(CartButtonWrapper));\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { react2angular } from 'react2angular';\nimport { Loader } from '../base/loader';\nimport { IApplication } from '../../models/application';\nimport { FabButton } from '../base/fab-button';\nimport useCart from '../../hooks/use-cart';\nimport FormatLib from '../../lib/format';\nimport CartAPI from '../../api/cart';\nimport { User } from '../../models/user';\nimport { PaymentModal } from '../payment/stripe/payment-modal';\nimport { PaymentMethod } from '../../models/payment';\nimport { Order, OrderErrors } from '../../models/order';\nimport { MemberSelect } from '../user/member-select';\nimport { CouponInput } from '../coupon/coupon-input';\nimport { Coupon } from '../../models/coupon';\nimport noImage from '../../../../images/no_image.png';\nimport Switch from 'react-switch';\nimport OrderLib from '../../lib/order';\nimport { CaretDown, CaretUp } from 'phosphor-react';\nimport _ from 'lodash';\nimport OrderAPI from '../../api/order';\n\ndeclare const Application: IApplication;\n\ninterface StoreCartProps {\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n userLogin: () => void,\n currentUser?: User\n}\n\n/**\n * This component shows user's cart\n */\nconst StoreCart: React.FC = ({ onSuccess, onError, currentUser, userLogin }) => {\n const { t } = useTranslation('public');\n\n const { cart, setCart, reloadCart } = useCart(currentUser);\n const [cartErrors, setCartErrors] = useState(null);\n const [noMemberError, setNoMemberError] = useState(false);\n const [paymentModal, setPaymentModal] = useState(false);\n const [withdrawalInstructions, setWithdrawalInstructions] = useState(null);\n\n useEffect(() => {\n if (cart) {\n checkCart();\n }\n if (cart && !withdrawalInstructions) {\n OrderAPI.withdrawalInstructions(cart)\n .then(setWithdrawalInstructions)\n .catch(onError);\n }\n }, [cart]);\n\n /**\n * Remove the product from cart\n */\n const removeProductFromCart = (item) => {\n return (e: React.BaseSyntheticEvent) => {\n e.preventDefault();\n e.stopPropagation();\n const errors = getItemErrors(item);\n if (errors.length === 1 && errors[0].error === 'not_found') {\n reloadCart().catch(onError);\n } else {\n CartAPI.removeItem(cart, item.orderable_id).then(data => {\n setCart(data);\n }).catch(onError);\n }\n };\n };\n\n /**\n * Change product quantity\n */\n const changeProductQuantity = (e: React.BaseSyntheticEvent, item) => {\n CartAPI.setQuantity(cart, item.orderable_id, e.target.value)\n .then(data => {\n setCart(data);\n })\n .catch(() => onError(t('app.public.store_cart.stock_limit')));\n };\n\n /**\n * Increment/decrement product quantity\n */\n const increaseOrDecreaseProductQuantity = (item, direction: 'up' | 'down') => {\n CartAPI.setQuantity(cart, item.orderable_id, direction === 'up' ? item.quantity + 1 : item.quantity - 1)\n .then(data => {\n setCart(data);\n })\n .catch(() => onError(t('app.public.store_cart.stock_limit')));\n };\n\n /**\n * Refresh product amount\n */\n const refreshItem = (item) => {\n return (e: React.BaseSyntheticEvent) => {\n e.preventDefault();\n e.stopPropagation();\n CartAPI.refreshItem(cart, item.orderable_id).then(data => {\n setCart(data);\n }).catch(onError);\n };\n };\n\n /**\n * Check the current cart's items (available, price, stock, quantity_min)\n */\n const checkCart = async (): Promise => {\n const errors = await CartAPI.validate(cart);\n setCartErrors(errors);\n return errors;\n };\n\n /**\n * Checkout cart\n */\n const checkout = () => {\n if (!currentUser) {\n userLogin();\n } else {\n if (!cart.user) {\n setNoMemberError(true);\n onError(t('app.public.store_cart.select_user'));\n } else {\n setNoMemberError(false);\n checkCart().then(errors => {\n if (!hasCartErrors(errors)) {\n setPaymentModal(true);\n }\n });\n }\n }\n };\n\n /**\n * Check if the carrent cart has any error\n */\n const hasCartErrors = (errors: OrderErrors) => {\n if (!errors) return false;\n for (const item of cart.order_items_attributes) {\n const error = _.find(errors.details, (e) => e.item_id === item.id);\n if (!error || error?.errors?.length > 0) return true;\n }\n return false;\n };\n\n /**\n * get givean item's error\n */\n const getItemErrors = (item) => {\n if (!cartErrors) return [];\n const errors = _.find(cartErrors.details, (e) => e.item_id === item.id);\n return errors?.errors || [{ error: 'not_found' }];\n };\n\n /**\n * Open/closes the payment modal\n */\n const togglePaymentModal = (): void => {\n setPaymentModal(!paymentModal);\n };\n\n /**\n * Handle payment\n */\n const handlePaymentSuccess = (data: Order): void => {\n if (data.state === 'paid') {\n setPaymentModal(false);\n window.location.href = '/#!/store';\n onSuccess(t('app.public.store_cart.checkout_success'));\n } else {\n onError(t('app.public.store_cart.checkout_error'));\n }\n };\n\n /**\n * Change cart's customer by admin/manger\n */\n const handleChangeMember = (user: User): void => {\n // if the selected user is the operator, he cannot offer products to himself\n if (user.id === currentUser.id && cart.order_items_attributes.filter(item => item.is_offered).length > 0) {\n Promise.all(cart.order_items_attributes.filter(item => item.is_offered).map(item => {\n return CartAPI.setOffer(cart, item.orderable_id, false);\n })).then((data) => setCart({ ...data[data.length - 1], user: { id: user.id, role: user.role } }));\n } else {\n setCart({ ...cart, user: { id: user.id, role: user.role } });\n }\n };\n\n /**\n * Check if the current operator has administrative rights or is a normal member\n */\n const isPrivileged = (): boolean => {\n return (currentUser?.role === 'admin' || currentUser?.role === 'manager');\n };\n\n /**\n * Check if the current cart is empty ?\n */\n const cartIsEmpty = (): boolean => {\n return cart && cart.order_items_attributes.length === 0;\n };\n\n /**\n * Toggle product offer\n */\n const toggleProductOffer = (item) => {\n return (checked: boolean) => {\n CartAPI.setOffer(cart, item.orderable_id, checked).then(data => {\n setCart(data);\n }).catch(e => {\n if (e.match(/code 403/)) {\n onError(t('app.public.store_cart.errors.unauthorized_offering_product'));\n } else {\n onError(e);\n }\n });\n };\n };\n\n /**\n * Apply coupon to current cart\n */\n const applyCoupon = (coupon?: Coupon): void => {\n if (coupon !== cart.coupon) {\n setCart({ ...cart, coupon });\n }\n };\n\n /**\n * Show item error\n */\n const itemError = (item, error) => {\n if (error.error === 'is_active' || error.error === 'not_found') {\n return

{t('app.public.store_cart.errors.product_not_found')}

;\n }\n if (error.error === 'stock' && error.value === 0) {\n return

{t('app.public.store_cart.errors.out_of_stock')}

;\n }\n if (error.error === 'stock' && error.value > 0) {\n return

{t('app.public.store_cart.errors.stock_limit_QUANTITY', { QUANTITY: error.value })}

;\n }\n if (error.error === 'quantity_min') {\n return

{t('app.public.store_cart.errors.quantity_min_QUANTITY', { QUANTITY: error.value })}

;\n }\n if (error.error === 'amount') {\n return
\n

{t('app.public.store_cart.errors.price_changed_PRICE', { PRICE: `${FormatLib.price(error.value)} / ${t('app.public.store_cart.unit')}` })}

\n {t('app.public.store_cart.update_item')}\n
;\n }\n };\n\n return (\n
\n
\n {cart && cartIsEmpty() &&

{t('app.public.store_cart.cart_is_empty')}

}\n {cart && cart.order_items_attributes.map(item => (\n
0 ? 'error' : ''}`}>\n
\n \n
\n
\n {t('app.public.store_cart.reference_short')} {item.orderable_ref || ''}\n

{item.orderable_name}

\n {item.quantity_min > 1 &&\n {t('app.public.store_cart.minimum_purchase')}{item.quantity_min}\n }\n {getItemErrors(item).map(e => {\n return itemError(item, e);\n })}\n
\n
\n
\n

{FormatLib.price(item.amount)}

\n / {t('app.public.store_cart.unit')}\n
\n
\n changeProductQuantity(e, item)}\n min={item.quantity_min}\n max={item.orderable_external_stock}\n value={item.quantity}\n />\n \n \n
\n
\n {t('app.public.store_cart.total')}\n

{FormatLib.price(OrderLib.itemAmount(item))}

\n
\n \n \n \n
\n {isPrivileged() &&\n
\n \n
\n }\n
\n ))}\n
\n\n
\n {cart && !cartIsEmpty() &&\n
\n

{t('app.public.store_cart.pickup')}

\n

\n

\n }\n\n {cart && !cartIsEmpty() &&\n
\n \n
\n }\n
\n\n \n\n {cart && !cartIsEmpty() && cart.user &&
\n 'dont need update shopping cart'} />\n
}\n
\n );\n};\n\nconst StoreCartWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('storeCart', react2angular(StoreCartWrapper, ['onSuccess', 'onError', 'currentUser', 'userLogin']));\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { Coupon } from '../models/coupon';\n\nexport default class CouponAPI {\n static async validate (code: string, amount: number, userId?: number): Promise {\n const res: AxiosResponse = await apiClient.post('/api/coupons/validate', { code, amount, user_id: userId });\n return res?.data;\n }\n}\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { FabInput } from '../base/fab-input';\nimport { FabAlert } from '../base/fab-alert';\nimport CouponAPI from '../../api/coupon';\nimport { Coupon } from '../../models/coupon';\nimport { User } from '../../models/user';\nimport FormatLib from '../../lib/format';\n\ninterface CouponInputProps {\n amount: number,\n user?: User,\n onChange?: (coupon?: Coupon) => void\n}\n\ninterface Message {\n type: 'info' | 'warning' | 'danger',\n message: string\n}\n\n/**\n * This component renders an input of coupon\n */\nexport const CouponInput: React.FC = ({ user, amount, onChange }) => {\n const { t } = useTranslation('shared');\n const [messages, setMessages] = useState>([]);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState(false);\n const [coupon, setCoupon] = useState();\n const [code, setCode] = useState();\n\n useEffect(() => {\n if (user && code) {\n handleChange(code);\n }\n }, [user?.id]);\n\n useEffect(() => {\n if (code) {\n handleChange(code);\n }\n }, [amount]);\n\n /**\n * callback for validate the code\n */\n const handleChange = (value: string) => {\n const mgs = [];\n setMessages([]);\n setError(false);\n setCoupon(null);\n setCode(value);\n if (value) {\n setLoading(true);\n CouponAPI.validate(value, amount, user?.id).then((res) => {\n setCoupon(res);\n if (res.type === 'percent_off') {\n mgs.push({ type: 'info', message: t('app.shared.coupon_input.the_coupon_has_been_applied_you_get_PERCENT_discount', { PERCENT: res.percent_off }) });\n } else {\n mgs.push({ type: 'info', message: t('app.shared.coupon_input.the_coupon_has_been_applied_you_get_AMOUNT_CURRENCY', { AMOUNT: res.amount_off, CURRENCY: FormatLib.currencySymbol() }) });\n }\n if (res.validity_per_user === 'once') {\n mgs.push({ type: 'warning', message: t('app.shared.coupon_input.coupon_validity_once') });\n }\n setMessages(mgs);\n setLoading(false);\n if (typeof onChange === 'function') {\n onChange(res);\n }\n }).catch((err) => {\n const state = err.split(':')[1].trim();\n setError(true);\n setCoupon(null);\n setLoading(false);\n setMessages([{ type: 'danger', message: t(`app.shared.coupon_input.unable_to_apply_the_coupon_because_${state}`) }]);\n onChange(null);\n });\n } else {\n onChange(null);\n }\n };\n\n // input addon\n const inputAddOn = () => {\n if (error) {\n return ;\n } else {\n if (loading) {\n return ;\n }\n if (coupon) {\n return ;\n }\n }\n };\n\n return (\n
\n \n \n {messages.map((m, i) => {\n return (\n \n {m.message}\n \n );\n })}\n
\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { react2angular } from 'react2angular';\nimport { Loader } from '../../base/loader';\nimport { IApplication } from '../../../models/application';\nimport { StoreListHeader } from '../../store/store-list-header';\nimport { OrderItem } from '../../store/order-item';\nimport { FabPagination } from '../../base/fab-pagination';\nimport OrderAPI from '../../../api/order';\nimport { Order, OrderSortOption } from '../../../models/order';\nimport { User } from '../../../models/user';\nimport { SelectOption } from '../../../models/select';\n\ndeclare const Application: IApplication;\n\ninterface OrdersDashboardProps {\n currentUser: User,\n onError: (message: string) => void\n}\n\n/**\n * This component shows a list of all orders from the store for the current user\n */\nexport const OrdersDashboard: React.FC = ({ currentUser, onError }) => {\n const { t } = useTranslation('public');\n\n const [orders, setOrders] = useState>([]);\n const [pageCount, setPageCount] = useState(0);\n const [currentPage, setCurrentPage] = useState(1);\n const [totalCount, setTotalCount] = useState(0);\n\n useEffect(() => {\n OrderAPI.index({ user_id: currentUser.id }).then(res => {\n setPageCount(res.total_pages);\n setTotalCount(res.total_count);\n setOrders(res.data);\n }).catch(onError);\n }, []);\n\n /**\n * Creates sorting options to the react-select format\n */\n const buildOptions = (): Array> => {\n return [\n { value: 'created_at-desc', label: t('app.public.orders_dashboard.sort.newest') },\n { value: 'created_at-asc', label: t('app.public.orders_dashboard.sort.oldest') }\n ];\n };\n /**\n * Display option: sorting\n */\n const handleSorting = (option: SelectOption) => {\n OrderAPI.index({ page: 1, sort: option.value }).then(res => {\n setCurrentPage(1);\n setOrders(res.data);\n setPageCount(res.total_pages);\n setTotalCount(res.total_count);\n }).catch(onError);\n };\n\n /**\n * Handle orders pagination\n */\n const handlePagination = (page: number) => {\n if (page !== currentPage) {\n OrderAPI.index({ user_id: currentUser.id, page }).then(res => {\n setCurrentPage(page);\n setOrders(res.data);\n setPageCount(res.total_pages);\n setTotalCount(res.total_count);\n }).catch(onError);\n }\n };\n\n return (\n
\n
\n

{t('app.public.orders_dashboard.heading')}

\n
\n\n
\n \n
\n {orders.map(order => (\n \n ))}\n
\n {pageCount > 1 &&\n \n }\n
\n
\n );\n};\n\nconst OrdersDashboardWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('ordersDashboard', react2angular(OrdersDashboardWrapper, ['onError', 'currentUser']));\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { Credit, CreditableType } from '../models/credit';\n\nexport default class CreditAPI {\n static async index (): Promise> {\n const res: AxiosResponse> = await apiClient.get('/api/credits');\n return res?.data;\n }\n\n static async userResource (userId: number, resource: CreditableType): Promise> {\n const res: AxiosResponse> = await apiClient.get(`/api/credits/user/${userId}/${resource}`);\n return res?.data;\n }\n}\n","import React, { ReactNode, useEffect, useState } from 'react';\nimport { FabPanel } from '../../base/fab-panel';\nimport { Loader } from '../../base/loader';\nimport { useTranslation } from 'react-i18next';\nimport { Credit, CreditableType } from '../../../models/credit';\nimport CreditAPI from '../../../api/credit';\nimport { HtmlTranslate } from '../../base/html-translate';\n\ninterface CreditsPanelProps {\n userId: number,\n onError: (message: string) => void,\n reservableType: CreditableType\n}\n\n/**\n * List all available credits for the given user and the given resource\n */\nconst CreditsPanel: React.FC = ({ userId, onError, reservableType }) => {\n const { t } = useTranslation('logged');\n\n const [credits, setCredits] = useState>([]);\n\n useEffect(() => {\n CreditAPI.userResource(userId, reservableType)\n .then(res => setCredits(res))\n .catch(error => onError(error));\n }, []);\n\n /**\n * Compute the remainings hours for the given credit\n */\n const remainingHours = (credit: Credit): number => {\n return credit.hours - credit.hours_used;\n };\n\n /**\n * Display a placeholder when there's no credits to display\n */\n const noCredits = (): ReactNode => {\n return (\n
  • {t('app.logged.dashboard.reservations.credits_panel.no_credits')}
  • \n );\n };\n\n /**\n * Panel title\n */\n const header = (): ReactNode => {\n return (\n
    \n {t(`app.logged.dashboard.reservations.credits_panel.title_${reservableType}`)}\n
    \n );\n };\n\n return (\n \n
      \n {credits.map(c =>
    • \n \n
    • )}\n {credits.length === 0 && noCredits()}\n
    \n
    \n );\n};\n\nconst CreditsPanelWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport { CreditsPanelWrapper as CreditsPanel };\n","import React, { useEffect, useState } from 'react';\nimport { IApplication } from '../../../models/application';\nimport { react2angular } from 'react2angular';\nimport { ReservationsPanel } from './reservations-panel';\nimport SettingAPI from '../../../api/setting';\nimport { SettingName } from '../../../models/setting';\nimport { CreditsPanel } from './credits-panel';\n\ndeclare const Application: IApplication;\n\ninterface ReservationsDashboardProps {\n onError: (message: string) => void,\n userId: number\n}\n\n/**\n * User dashboard showing everything about his spaces/machine reservations and also remaining credits\n */\nconst ReservationsDashboard: React.FC = ({ onError, userId }) => {\n const [modules, setModules] = useState>();\n\n useEffect(() => {\n SettingAPI.query(['spaces_module', 'machines_module'])\n .then(res => setModules(res))\n .catch(error => onError(error));\n }, []);\n\n return (\n
    \n {modules?.get('machines_module') !== 'false' && }\n {modules?.get('spaces_module') !== 'false' && }\n {modules?.get('machines_module') !== 'false' && }\n {modules?.get('spaces_module') !== 'false' && }\n
    \n );\n};\n\nApplication.Components.component('reservationsDashboard', react2angular(ReservationsDashboard, ['onError', 'userId']));\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { Reservation, ReservationIndexFilter } from '../models/reservation';\nimport ApiLib from '../lib/api';\n\nexport default class ReservationAPI {\n static async index (filters: ReservationIndexFilter): Promise> {\n const res: AxiosResponse> = await apiClient.get(`/api/reservations${ApiLib.filtersToQuery(filters)}`);\n return res?.data;\n }\n}\n","import React, { ReactNode, useEffect, useState } from 'react';\nimport { FabPanel } from '../../base/fab-panel';\nimport { Reservation, SlotsReservation } from '../../../models/reservation';\nimport ReservationAPI from '../../../api/reservation';\nimport { useTranslation } from 'react-i18next';\nimport moment from 'moment';\nimport { Loader } from '../../base/loader';\nimport FormatLib from '../../../lib/format';\nimport { FabPopover } from '../../base/fab-popover';\nimport { useImmer } from 'use-immer';\nimport _ from 'lodash';\nimport { FabButton } from '../../base/fab-button';\n\ninterface SpaceReservationsProps {\n userId: number,\n onError: (message: string) => void,\n reservableType: 'Machine' | 'Space'\n}\n\n/**\n * List all reservations for the given user and the given type\n */\nconst ReservationsPanel: React.FC = ({ userId, onError, reservableType }) => {\n const { t } = useTranslation('logged');\n\n const [reservations, setReservations] = useState>([]);\n const [details, updateDetails] = useImmer>({});\n const [showMore, setShowMore] = useState(false);\n\n useEffect(() => {\n ReservationAPI.index({ user_id: userId, reservable_type: reservableType })\n .then(res => setReservations(res))\n .catch(error => onError(error));\n }, []);\n\n /**\n * Return the reservations for the given period\n */\n const reservationsByDate = (state: 'past' | 'futur'): Array => {\n return reservations.filter(r => {\n return !!r.slots_reservations_attributes.find(s => filterSlot(s, state));\n });\n };\n\n /**\n * Check if the given slot reservation if past of futur\n */\n const filterSlot = (sr: SlotsReservation, state: 'past' | 'futur'): boolean => {\n return (state === 'past' && moment(sr.slot_attributes.start_at).isBefore()) ||\n (state === 'futur' && moment(sr.slot_attributes.start_at).isAfter());\n };\n\n /**\n * Panel title\n */\n const header = (): ReactNode => {\n return (\n
    \n {t(`app.logged.dashboard.reservations.reservations_panel.title_${reservableType}`)}\n
    \n );\n };\n\n /**\n * Show/hide the slots details for the given reservation\n */\n const toggleDetails = (reservationId: number): () => void => {\n return () => {\n updateDetails(draft => {\n draft[reservationId] = !draft[reservationId];\n });\n };\n };\n\n /**\n * Shows/hide the very old reservations list\n */\n const toggleShowMore = (): void => {\n setShowMore(!showMore);\n };\n\n /**\n * Display a placeholder when there's no reservation to display\n */\n const noReservations = (): ReactNode => {\n return (\n
  • {t('app.logged.dashboard.reservations.reservations_panel.no_reservations')}
  • \n );\n };\n\n /**\n * Render the reservation in a user-friendly way\n */\n const renderReservation = (reservation: Reservation, state: 'past' | 'futur'): ReactNode => {\n return (\n
  • \n \n {reservation.reservable.name} - {FormatLib.date(reservation.slots_reservations_attributes[0].slot_attributes.start_at)}\n \n {details[reservation.id] && \n {reservation.slots_reservations_attributes.filter(s => filterSlot(s, state)).map(\n slotReservation => \n {FormatLib.date(slotReservation.slot_attributes.start_at)}, {FormatLib.time(slotReservation.slot_attributes.start_at)} - {FormatLib.time(slotReservation.slot_attributes.end_at)}\n \n )}\n }\n
  • \n );\n };\n\n const futur = reservationsByDate('futur');\n const past = _.orderBy(reservationsByDate('past'), r => r.slots_reservations_attributes[0].slot_attributes.start_at, 'desc');\n\n return (\n \n

    {t('app.logged.dashboard.reservations.reservations_panel.upcoming')}

    \n
      \n {futur.length === 0 && noReservations()}\n {futur.map(r => renderReservation(r, 'futur'))}\n
    \n

    {t('app.logged.dashboard.reservations.reservations_panel.past')}

    \n
      \n {past.length === 0 && noReservations()}\n {past.slice(0, 10).map(r => renderReservation(r, 'past'))}\n {past.length > 10 && !showMore &&
    • \n {t('app.logged.dashboard.reservations.reservations_panel.show_more')}\n
    • }\n {past.length > 10 && showMore && past.slice(10).map(r => renderReservation(r, 'past'))}\n
    \n
    \n );\n};\n\nconst ReservationsPanelWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport { ReservationsPanelWrapper as ReservationsPanel };\n","import React, { useEffect, useState } from 'react';\nimport { LabelledInput } from './base/labelled-input';\nimport { useTranslation } from 'react-i18next';\nimport { TDateISODate } from '../typings/date-iso';\n\ninterface DocumentFiltersProps {\n onFilterChange: (value: { reference: string, customer: string, date: TDateISODate }) => void\n}\n\n/**\n * This component shows 3 input fields for filtering invoices/payment-schedules by reference, customer name and date\n */\nexport const DocumentFilters: React.FC = ({ onFilterChange }) => {\n const { t } = useTranslation('admin');\n\n // stores the value of reference input\n const [referenceFilter, setReferenceFilter] = useState('');\n // stores the value of the customer input\n const [customerFilter, setCustomerFilter] = useState('');\n // stores the value of the date input\n const [dateFilter, setDateFilter] = useState(null);\n\n /**\n * When any filter changes, trigger the callback with the current value of all filters\n */\n useEffect(() => {\n onFilterChange({ reference: referenceFilter, customer: customerFilter, date: dateFilter });\n }, [referenceFilter, customerFilter, dateFilter]);\n\n /**\n * Callback triggered when the input 'reference' is updated.\n */\n const handleReferenceUpdate = (e) => {\n setReferenceFilter(e.target.value);\n };\n\n /**\n * Callback triggered when the input 'customer' is updated.\n */\n const handleCustomerUpdate = (e) => {\n setCustomerFilter(e.target.value);\n };\n\n /**\n * Callback triggered when the input 'date' is updated.\n */\n const handleDateUpdate = (e) => {\n let date = e.target.value;\n if (e.target.value === '') date = null;\n setDateFilter(date);\n };\n\n return (\n
    \n \n \n \n
    \n );\n};\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { react2angular } from 'react2angular';\nimport { IApplication } from '../../models/application';\nimport { Loader } from '../base/loader';\nimport { Event } from '../../models/event';\nimport FormatLib from '../../lib/format';\n\ndeclare const Application: IApplication;\n\ninterface EventCardProps {\n event: Event,\n cardType: 'sm' | 'md' | 'lg'\n}\n\n/**\n * This component is a box showing the picture of the given event, and a short description of it.\n */\nexport const EventCard: React.FC = ({ event, cardType }) => {\n const { t } = useTranslation('public');\n\n /**\n * Format description to remove HTML tags and set a maximum character count\n */\n const formatText = (text: string, count: number) => {\n text = text.replace(/(<\\/p>|<\\/h4>|<\\/h5>|<\\/h6>|<\\/pre>|<\\/blockquote>)/g, '\\n');\n text = text.replace(//g, '\\n');\n text = text.replace(/<\\/?\\w+[^>]*>/g, '');\n if (text.length > count) {\n text = text.slice(0, count) + '…';\n }\n text = text.replace(/\\n+/g, '
    ');\n return text;\n };\n\n /**\n * Return the formatted localized date of the event\n */\n const formatDate = (): string => {\n const startDate = new Date(event.start_date);\n const endDate = new Date(event.end_date);\n const singleDayEvent = startDate.getFullYear() === endDate.getFullYear() &&\n startDate.getMonth() === endDate.getMonth() &&\n startDate.getDate() === endDate.getDate();\n return singleDayEvent\n ? t('app.public.event_card.on_the_date', { DATE: FormatLib.date(event.start_date) })\n : t('app.public.event_card.from_date_to_date', { START: FormatLib.date(event.start_date), END: FormatLib.date(event.end_date) });\n };\n\n /**\n * Return the formatted localized hours of the event\n */\n const formatTime = (): string => {\n return event.all_day\n ? t('app.public.event_card.all_day')\n : t('app.public.event_card.from_time_to_time', { START: FormatLib.time(event.start_date), END: FormatLib.time(event.end_date) });\n };\n\n return (\n
    \n {event.event_image\n ?
    \n \"\"\n
    \n : cardType !== 'sm' &&\n
    \n \n
    \n }\n
    \n
    \n {event.category.name}\n

    {event?.title}

    \n
    \n {cardType !== 'sm' &&\n

    \n }\n
    \n
    \n {cardType !== 'md' &&\n

    \n {formatDate()}\n {formatTime()}\n

    \n }\n
    \n {cardType !== 'md' &&\n event.event_themes.map(theme => {\n return (
    \n \n
    {theme.name}
    \n
    );\n })\n }\n {(cardType !== 'md' && event.age_range) &&\n
    \n \n
    {event.age_range?.name}
    \n
    \n }\n {cardType === 'md' &&\n <>\n
    \n \n
    {formatDate()}
    \n
    \n
    \n \n
    {formatTime()}
    \n
    \n \n }\n
    \n \n {event.nb_free_places > 0 &&
    {t('app.public.event_card.still_available') + event.nb_free_places}
    }\n {event.nb_total_places > 0 && event.nb_free_places <= 0 &&
    {t('app.public.event_card.event_full')}
    }\n {!event.nb_total_places &&
    {t('app.public.event_card.without_reservation')}
    }\n
    \n
    \n \n {event.amount === 0 &&
    {t('app.public.event_card.free_admission')}
    }\n {event.amount > 0 &&
    {t('app.public.event_card.full_price') + FormatLib.price(event.amount)}
    }\n
    \n
    \n
    \n
    \n );\n};\n\nconst EventCardWrapper: React.FC = ({ event, cardType }) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('eventCard', react2angular(EventCardWrapper, ['event', 'cardType']));\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { EventTheme } from '../models/event-theme';\n\nexport default class EventThemeAPI {\n static async index (): Promise> {\n const res: AxiosResponse> = await apiClient.get('/api/event_themes');\n return res?.data;\n }\n}\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Select from 'react-select';\nimport { react2angular } from 'react2angular';\nimport { Loader } from '../base/loader';\nimport { Event } from '../../models/event';\nimport { EventTheme } from '../../models/event-theme';\nimport { IApplication } from '../../models/application';\nimport EventThemeAPI from '../../api/event-theme';\nimport { SelectOption } from '../../models/select';\n\ndeclare const Application: IApplication;\n\ninterface EventThemesProps {\n event: Event,\n onChange: (themes: Array) => void\n}\n\n/**\n * This component shows a select input to edit the themes associated with the event\n */\nexport const EventThemes: React.FC = ({ event, onChange }) => {\n const { t } = useTranslation('shared');\n\n const [themes, setThemes] = useState>([]);\n\n useEffect(() => {\n EventThemeAPI.index().then(data => setThemes(data));\n }, []);\n\n /**\n * Check if there's any EventTheme in DB, otherwise we won't display the selector\n */\n const hasThemes = (): boolean => {\n return themes.length > 0;\n };\n\n /**\n * Return the current theme(s) for the given event, formatted to match the react-select format\n */\n const defaultValues = (): Array> => {\n const res = [];\n themes.forEach(t => {\n if (event.event_theme_ids && event.event_theme_ids.indexOf(t.id) > -1) {\n res.push({ value: t.id, label: t.name });\n }\n });\n return res;\n };\n\n /**\n * Callback triggered when the selection has changed.\n * Convert the react-select specific format to an array of EventTheme, and call the provided callback.\n */\n const handleChange = (selectedOptions: Array>): void => {\n const res = [];\n selectedOptions.forEach(opt => {\n res.push(themes.find(t => t.id === opt.value));\n });\n onChange(res);\n };\n\n /**\n * Convert all themes to the react-select format\n */\n const buildOptions = (): Array> => {\n return themes.map(t => {\n return { value: t.id, label: t.name };\n });\n };\n\n return (\n
    \n {hasThemes() &&
    \n

    { t('app.shared.event_themes.title') }

    \n
    \n \n \n
    \n );\n })}\n
    \n
    \n {t('app.shared.form_checklist.select_all')}\n {t('app.shared.form_checklist.unselect_all')}\n
    \n \n );\n }} />\n \n );\n};\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Path } from 'react-hook-form';\nimport { UnpackNestedValue, UseFormSetValue } from 'react-hook-form/dist/types/form';\nimport { FieldPathValue } from 'react-hook-form/dist/types/path';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { FormInput } from './form-input';\nimport { FormComponent } from '../../models/form-component';\nimport { AbstractFormItemProps } from './abstract-form-item';\nimport { FabButton } from '../base/fab-button';\nimport { FilePdf, Trash } from 'phosphor-react';\nimport { FileType } from '../../models/file';\nimport FileUploadLib from '../../lib/file-upload';\n\ninterface FormFileUploadProps extends FormComponent, AbstractFormItemProps {\n setValue: UseFormSetValue,\n defaultFile?: FileType,\n accept?: string,\n onFileChange?: (value: FileType) => void,\n onFileRemove?: () => void,\n}\n\n/**\n * This component allows to upload file, in forms managed by react-hook-form.\n */\nexport const FormFileUpload = ({ id, register, defaultFile, className, rules, disabled, error, warning, formState, onFileChange, onFileRemove, accept, setValue }: FormFileUploadProps) => {\n const { t } = useTranslation('shared');\n\n const [file, setFile] = useState(defaultFile);\n\n /**\n * Check if file is selected\n */\n const hasFile = (): boolean => {\n return FileUploadLib.hasFile(file);\n };\n\n /**\n * Callback triggered when the user has ended its selection of a file (or when the selection has been cancelled).\n */\n function onFileSelected (event: React.ChangeEvent) {\n const f = event.target?.files[0];\n if (f) {\n setFile({\n attachment_name: f.name\n });\n setValue(\n `${id}._destroy` as Path,\n false as UnpackNestedValue>>\n );\n if (typeof onFileChange === 'function') {\n onFileChange({ attachment_name: f.name });\n }\n }\n }\n\n /**\n * Callback triggered when the user clicks on the delete button.\n */\n function onRemoveFile () {\n FileUploadLib.onRemoveFile(file, id, setFile, setValue, onFileRemove);\n }\n\n // Compose classnames from props\n const classNames = [\n `${className || ''}`\n ].join(' ');\n\n /**\n * Returns placeholder text\n */\n const placeholder = (): string => hasFile() ? t('app.shared.form_file_upload.edit') : t('app.shared.form_file_upload.browse');\n\n return (\n
    \n {hasFile() && (\n {file.attachment_name}\n )}\n
    \n {file?.id && file?.attachment_url && (\n \n \n \n )}\n \n {hasFile() &&\n } className=\"is-main\" />\n }\n
    \n
    \n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Path, Controller } from 'react-hook-form';\nimport { UnpackNestedValue, UseFormSetValue } from 'react-hook-form/dist/types/form';\nimport { FieldPath, FieldPathValue } from 'react-hook-form/dist/types/path';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { FormInput } from './form-input';\nimport { FormComponent, FormControlledComponent } from '../../models/form-component';\nimport { AbstractFormItemProps } from './abstract-form-item';\nimport { FabButton } from '../base/fab-button';\nimport noImage from '../../../../images/no_image.png';\nimport { Trash } from 'phosphor-react';\nimport { ImageType } from '../../models/file';\nimport FileUploadLib from '../../lib/file-upload';\n\ninterface FormImageUploadProps extends FormComponent, FormControlledComponent, AbstractFormItemProps {\n setValue: UseFormSetValue,\n defaultImage?: ImageType,\n accept?: string,\n size?: 'small' | 'medium' | 'large',\n mainOption?: boolean,\n onFileChange?: (value: ImageType) => void,\n onFileRemove?: () => void,\n onFileIsMain?: (setIsMain: () => void) => void,\n}\n\n/**\n * This component allows to upload image, in forms managed by react-hook-form.\n */\nexport const FormImageUpload = ({ id, label, register, control, defaultImage, className, rules, disabled, error, warning, formState, onFileChange, onFileRemove, accept, setValue, size, onFileIsMain, mainOption = false }: FormImageUploadProps) => {\n const { t } = useTranslation('shared');\n\n const [file, setFile] = useState(defaultImage);\n const [image, setImage] = useState(defaultImage.attachment_url);\n\n useEffect(() => {\n setFile(defaultImage);\n }, [defaultImage]);\n\n /**\n * Check if image is selected\n */\n const hasImage = (): boolean => {\n return FileUploadLib.hasFile(file);\n };\n\n /**\n * Callback triggered when the user has ended its selection of a file (or when the selection has been cancelled).\n */\n function onFileSelected (event: React.ChangeEvent) {\n const f = event.target?.files[0];\n if (f) {\n const reader = new FileReader();\n reader.onload = (): void => {\n setImage(reader.result);\n };\n reader.readAsDataURL(f);\n setFile({\n ...file,\n attachment_name: f.name\n });\n setValue(\n id as Path,\n {\n attachment_name: f.name,\n _destroy: false\n } as UnpackNestedValue>>\n );\n if (typeof onFileChange === 'function') {\n onFileChange({ attachment_name: f.name });\n }\n }\n }\n\n /**\n * Callback triggered when the user clicks on the delete button.\n */\n function onRemoveFile () {\n FileUploadLib.onRemoveFile(file, id, setFile, setValue, onFileRemove);\n }\n\n /**\n * Returns placeholder text\n */\n const placeholder = (): string => hasImage() ? t('app.shared.form_image_upload.edit') : t('app.shared.form_image_upload.browse');\n\n // Compose classnames from props\n const classNames = [\n `${className || ''}`\n ].join(' ');\n\n return (\n
    \n
    \n {file?.attachment_name {\n currentTarget.onerror = null;\n currentTarget.src = noImage;\n }} />\n
    \n
    \n {mainOption &&\n \n }\n \n {hasImage() && } className=\"is-main\" />}\n
    \n
    \n );\n};\n\nFormImageUpload.defaultProps = {\n size: 'medium'\n};\n","import React, { ReactNode, useCallback } from 'react';\nimport { FieldPathValue } from 'react-hook-form';\nimport { debounce as _debounce } from 'lodash';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { FieldPath } from 'react-hook-form/dist/types/path';\nimport { FormComponent } from '../../models/form-component';\nimport { AbstractFormItem, AbstractFormItemProps } from './abstract-form-item';\n\ninterface FormInputProps extends FormComponent, AbstractFormItemProps {\n icon?: ReactNode,\n addOn?: ReactNode,\n addOnAction?: (event: React.MouseEvent) => void,\n addOnClassName?: string,\n debounce?: number,\n type?: 'text' | 'date' | 'password' | 'url' | 'time' | 'tel' | 'search' | 'number' | 'month' | 'email' | 'datetime-local' | 'week' | 'hidden' | 'file',\n accept?: string,\n defaultValue?: TInputType,\n placeholder?: string,\n step?: number | 'any',\n onChange?: (event: React.ChangeEvent) => void,\n nullable?: boolean\n}\n\n/**\n * This component is a template for an input component to use within React Hook Form\n */\nexport const FormInput = ({ id, register, label, tooltip, defaultValue, icon, className, rules, disabled, type, addOn, addOnAction, addOnClassName, placeholder, error, warning, formState, step, onChange, debounce, accept, nullable = false }: FormInputProps) => {\n /**\n * Debounced (ie. temporised) version of the 'on change' callback.\n */\n const debouncedOnChange = debounce ? useCallback(_debounce(onChange, debounce), [debounce]) : null;\n\n /**\n * Handle the change of content in the input field, and trigger the parent callback, if any\n */\n const handleChange = (e: React.ChangeEvent) => {\n if (typeof onChange === 'function') {\n if (debouncedOnChange) {\n debouncedOnChange(e);\n } else {\n onChange(e);\n }\n }\n };\n\n // Compose classnames from props\n const classNames = [\n `${className || ''}`,\n `${type === 'hidden' ? 'is-hidden' : ''}`\n ].join(' ');\n\n return (\n \n {icon && {icon}}\n , {\n ...rules,\n valueAsDate: type === 'date',\n setValueAs: v => ([null, ''].includes(v) && nullable) ? null : (type === 'number' ? parseFloat(v) : v),\n value: defaultValue as FieldPathValue>,\n onChange: (e) => { handleChange(e); }\n })}\n type={type}\n step={step}\n disabled={typeof disabled === 'function' ? disabled(id) : disabled}\n placeholder={placeholder}\n accept={accept} />\n {(type === 'file' && placeholder) && {placeholder}}\n {addOn && {addOn}}\n \n );\n};\n","import React, { ReactNode } from 'react';\nimport { FormFileUpload } from './form-file-upload';\nimport { FabButton } from '../base/fab-button';\nimport { Plus } from 'phosphor-react';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { FormComponent, FormControlledComponent } from '../../models/form-component';\nimport { AbstractFormItemProps } from './abstract-form-item';\nimport { UseFormSetValue } from 'react-hook-form/dist/types/form';\nimport { ArrayPath, FieldArray, useFieldArray } from 'react-hook-form';\nimport { FileType } from '../../models/file';\nimport { UnpackNestedValue } from 'react-hook-form/dist/types';\n\ninterface FormMultiFileUploadProps extends FormComponent, FormControlledComponent, AbstractFormItemProps {\n setValue: UseFormSetValue,\n addButtonLabel: ReactNode,\n accept: string\n}\n\n/**\n * This component allows to upload multiple files, in forms managed by react-hook-form.\n */\nexport const FormMultiFileUpload = ({ id, className, register, control, setValue, formState, addButtonLabel, accept }: FormMultiFileUploadProps) => {\n const { fields, append, remove } = useFieldArray({ control, name: id as ArrayPath });\n\n return (\n
    \n
    \n {fields.map((field: FileType, index) => (\n remove(index)}/>\n ))}\n
    \n append({ _destroy: false } as UnpackNestedValue>>)}\n className='is-secondary'\n icon={}>\n {addButtonLabel}\n \n
    \n );\n};\n","import React, { ReactNode } from 'react';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { FormComponent, FormControlledComponent } from '../../models/form-component';\nimport { AbstractFormItemProps } from './abstract-form-item';\nimport { UseFormSetValue } from 'react-hook-form/dist/types/form';\nimport { ArrayPath, FieldArray, Path, useFieldArray, useWatch } from 'react-hook-form';\nimport { FormImageUpload } from './form-image-upload';\nimport { FabButton } from '../base/fab-button';\nimport { Plus } from 'phosphor-react';\nimport { ImageType } from '../../models/file';\nimport { UnpackNestedValue } from 'react-hook-form/dist/types';\nimport { FieldPathValue } from 'react-hook-form/dist/types/path';\n\ninterface FormMultiImageUploadProps extends FormComponent, FormControlledComponent, AbstractFormItemProps {\n setValue: UseFormSetValue,\n addButtonLabel: ReactNode\n}\n\n/**\n * This component allows to upload multiple images, in forms managed by react-hook-form.\n */\nexport const FormMultiImageUpload = ({ id, className, register, control, setValue, formState, addButtonLabel }: FormMultiImageUploadProps) => {\n const { fields, append, remove } = useFieldArray({ control, name: id as ArrayPath });\n const output = useWatch({ control, name: id as Path });\n\n /**\n * Add new image, set as main if it is the first\n */\n const addImage = () => {\n append({\n is_main: output.filter(i => i.is_main).length === 0,\n _destroy: false\n } as UnpackNestedValue>>);\n };\n\n /**\n * Remove an image and set the first image as the new main image if the provided was main\n */\n const handleRemoveImage = (image: ImageType, index: number) => {\n return () => {\n if (image.is_main && output.length > 1) {\n setValue(\n `${id}.${index === 0 ? 1 : 0}.is_main` as Path,\n true as UnpackNestedValue>>\n );\n }\n if (typeof image.id === 'string') {\n remove(index);\n } else {\n setValue(\n `${id}.${index}._destroy` as Path,\n true as UnpackNestedValue>>\n );\n }\n };\n };\n\n /**\n * Set the image at the given index as the new main image, and unset the current main image\n */\n const handleSetMainImage = (index: number) => {\n return (setNewImageValue) => {\n const mainImageIndex = output.findIndex(i => i.is_main && i !== index);\n if (mainImageIndex > -1) {\n setValue(\n `${id}.${mainImageIndex}.is_main` as Path,\n false as UnpackNestedValue>>\n );\n }\n setNewImageValue(true);\n };\n };\n\n return (\n
    \n
    \n {fields.map((field: ImageType, index) => (\n \n ))}\n
    \n }>\n {addButtonLabel}\n \n
    \n );\n};\n","import React, { useEffect } from 'react';\nimport AsyncSelect from 'react-select/async';\nimport Select from 'react-select';\nimport AsyncCreatableSelect from 'react-select/async-creatable';\nimport CreatableSelect from 'react-select/creatable';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { FieldPath } from 'react-hook-form/dist/types/path';\nimport { FormControlledComponent } from '../../models/form-component';\nimport { AbstractFormItem, AbstractFormItemProps } from './abstract-form-item';\nimport { useTranslation } from 'react-i18next';\nimport { Controller, FieldPathValue, Path } from 'react-hook-form';\nimport { UnpackNestedValue } from 'react-hook-form/dist/types/form';\n\ninterface CommonProps extends FormControlledComponent, AbstractFormItemProps {\n valuesDefault?: Array,\n onChange?: (values: Array) => void,\n placeholder?: string,\n creatable?: boolean,\n selectKey?: string,\n}\n\n// we should provide either an array of options or a function that returns a promise, but not both\ntype OptionsProps =\n { options: Array>, loadOptions?: never } |\n { options?: never, loadOptions: (inputValue: string, callback: (options: Array>) => void) => void };\n\ntype FormSelectProps = CommonProps & OptionsProps;\n\n/**\n * Option format, expected by react-select\n * @see https://github.com/JedWatson/react-select\n */\ntype selectOption = { value: TOptionValue, label: string, select?: boolean };\n\n/**\n * This component is a wrapper around react-select to use with react-hook-form.\n * It is a multi-select component.\n */\nexport const FormMultiSelect = ({ id, label, tooltip, className, control, placeholder, options, valuesDefault, error, rules, disabled, onChange, formState, warning, loadOptions, creatable, selectKey }: FormSelectProps) => {\n const { t } = useTranslation('shared');\n\n const [isDisabled, setIsDisabled] = React.useState(false);\n const [allOptions, setAllOptions] = React.useState>>(options || []);\n\n useEffect(() => {\n if (typeof disabled === 'function') {\n setIsDisabled(disabled(id));\n } else {\n setIsDisabled(disabled);\n }\n }, [disabled]);\n\n useEffect(() => {\n if (typeof loadOptions === 'function') {\n loadOptions('', options => {\n setTimeout(() => setAllOptions(options), 1);\n });\n }\n }, [loadOptions]);\n\n /**\n * The following callback will set the new selected options in the component state.\n */\n const onChangeCb = (newValues: Array, rhfOnChange: (values: Array) => void): void => {\n if (typeof onChange === 'function') {\n onChange(newValues);\n }\n if (typeof rhfOnChange === 'function') {\n rhfOnChange(newValues);\n }\n };\n\n /**\n * This function will return the currently selected options, according to the selectedOptions state.\n */\n const getCurrentValues = (value: Array): Array> => {\n return allOptions?.filter(c => value?.includes(c.value));\n };\n\n /**\n * When the select is 'creatable', this callback handle the creation and the selection of a new option.\n */\n const handleCreate = (inputValue: string, currentSelection: Array, rhfOnChange: (values: Array) => void) => {\n // add the new value to the list of options\n const newValue = inputValue as unknown as TOptionValue;\n const newOption = { value: newValue, label: inputValue };\n setAllOptions([...allOptions, newOption]);\n if (typeof rhfOnChange === 'function') {\n rhfOnChange([...currentSelection, newValue]);\n }\n };\n\n /**\n * Translate the label for a new item when the select is \"creatable\"\n */\n const formatCreateLabel = (inputValue: string): string => {\n return t('app.shared.form_multi_select.create_label', { VALUE: inputValue });\n };\n\n // if the user can create new options, and/or load the options through a promise need to use different components\n const AbstractSelect = loadOptions\n ? creatable\n ? AsyncCreatableSelect\n : AsyncSelect\n : creatable\n ? CreatableSelect\n : Select;\n\n return (\n \n }\n control={control}\n defaultValue={valuesDefault as UnpackNestedValue>>}\n rules={rules}\n render={({ field: { onChange: rhfOnChange, value, ref } }) => {\n const selectProps = {\n classNamePrefix: 'rs',\n className: 'rs',\n ref,\n key: selectKey,\n value: getCurrentValues(value),\n placeholder,\n isDisabled,\n isMulti: true,\n onChange: val => onChangeCb(val?.map(c => c.value), rhfOnChange),\n options: allOptions\n };\n\n if (loadOptions) {\n Object.assign(selectProps, { loadOptions, defaultOptions: true, cacheOptions: true });\n }\n\n if (creatable) {\n Object.assign(selectProps, {\n formatCreateLabel,\n onCreateOption: inputValue => handleCreate(inputValue, value, rhfOnChange)\n });\n }\n\n return ();\n }}\n />\n \n );\n};\n\nFormMultiSelect.defaultProps = {\n creatable: false,\n disabled: false\n};\n","import React, { useEffect } from 'react';\nimport { FormControlledComponent } from '../../models/form-component';\nimport { AbstractFormItem, AbstractFormItemProps } from './abstract-form-item';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport FabTextEditor, { FabTextEditorRef } from '../base/text-editor/fab-text-editor';\nimport { Controller, Path } from 'react-hook-form';\nimport { FieldPath } from 'react-hook-form/dist/types/path';\nimport { FieldPathValue, UnpackNestedValue } from 'react-hook-form/dist/types';\n\ninterface FormRichTextProps extends FormControlledComponent, AbstractFormItemProps {\n valueDefault?: string,\n limit?: number,\n heading?: boolean,\n bulletList?: boolean,\n blockquote?: boolean,\n link?: boolean,\n video?: boolean,\n image?: boolean\n}\n\n/**\n * This component is a rich-text editor to use with react-hook-form.\n */\nexport const FormRichText = ({ id, label, tooltip, className, control, valueDefault, error, warning, rules, disabled = false, formState, limit, heading, bulletList, blockquote, video, image, link }: FormRichTextProps) => {\n const textEditorRef = React.useRef();\n const [isDisabled, setIsDisabled] = React.useState(false);\n\n useEffect(() => {\n if (typeof disabled === 'function') {\n setIsDisabled(disabled(id));\n } else {\n setIsDisabled(disabled);\n }\n }, [disabled]);\n\n /**\n * Callback triggered when the user clicks to get the focus on the editor.\n * We do not want the default behavior (focus the first child, which is the Bold button)\n * but we want to focus the text edition area.\n */\n function focusTextEditor (event: React.MouseEvent) {\n event.preventDefault();\n textEditorRef.current.focus();\n }\n\n return (\n \n }\n control={control}\n defaultValue={valueDefault as UnpackNestedValue>>}\n rules={rules}\n render={({ field: { onChange, value } }) =>\n \n } />\n \n );\n};\n","import React, { useEffect } from 'react';\nimport Select from 'react-select';\nimport CreatableSelect from 'react-select/creatable';\nimport { Controller, Path } from 'react-hook-form';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { FieldPath } from 'react-hook-form/dist/types/path';\nimport { FieldPathValue, UnpackNestedValue } from 'react-hook-form/dist/types';\nimport { FormControlledComponent } from '../../models/form-component';\nimport { AbstractFormItem, AbstractFormItemProps } from './abstract-form-item';\nimport { SelectOption } from '../../models/select';\n\ninterface FormSelectProps extends FormControlledComponent, AbstractFormItemProps {\n options: Array>,\n valueDefault?: TOptionValue,\n onChange?: (value: TOptionValue) => void,\n placeholder?: string,\n clearable?: boolean,\n creatable?: boolean,\n}\n\n/**\n * This component is a wrapper for react-select to use with react-hook-form\n */\nexport const FormSelect = ({ id, label, tooltip, className, control, placeholder, options, valueDefault, error, warning, rules, disabled = false, onChange, clearable = false, formState, creatable = false }: FormSelectProps) => {\n const [isDisabled, setIsDisabled] = React.useState(false);\n\n useEffect(() => {\n if (typeof disabled === 'function') {\n setIsDisabled(disabled(id));\n } else {\n setIsDisabled(disabled);\n }\n }, [disabled]);\n\n /**\n * The following callback will trigger the onChange callback, if it was passed to this component,\n * when the selected option changes.\n */\n const onChangeCb = (newValue: TOptionValue): void => {\n if (typeof onChange === 'function') {\n onChange(newValue);\n }\n };\n\n // if the user can create new options, we need to use a different component\n const AbstractSelect = creatable ? CreatableSelect : Select;\n\n return (\n \n }\n control={control}\n defaultValue={valueDefault as UnpackNestedValue>>}\n rules={rules}\n render={({ field: { onChange, value, ref } }) =>\n c.value === value)}\n onChange={val => {\n onChangeCb(val.value);\n onChange(val.value);\n }}\n placeholder={placeholder}\n isDisabled={isDisabled}\n isClearable={clearable}\n options={options} />\n } />\n \n );\n};\n","import React from 'react';\nimport { FormControlledComponent } from '../../models/form-component';\nimport { FieldPath } from 'react-hook-form/dist/types/path';\nimport { FieldPathValue, UnpackNestedValue } from 'react-hook-form/dist/types';\nimport { Controller, Path } from 'react-hook-form';\nimport Switch from 'react-switch';\nimport { AbstractFormItem, AbstractFormItemProps } from './abstract-form-item';\n\ninterface FormSwitchProps extends FormControlledComponent, AbstractFormItemProps {\n defaultValue?: boolean,\n onChange?: (value: boolean) => void,\n}\n\n/**\n * This component is a wrapper for react-switch, to use with react-hook-form.\n */\nexport const FormSwitch = ({ id, label, tooltip, className, error, rules, disabled, control, defaultValue, formState, warning, onChange }: FormSwitchProps) => {\n /**\n * The following callback will trigger the onChange callback, if it was passed to this component,\n * when the selected option changes.\n */\n const onChangeCb = (newValue: boolean): void => {\n if (typeof onChange === 'function') {\n onChange(newValue);\n }\n };\n\n return (\n \n }\n control={control}\n defaultValue={defaultValue as UnpackNestedValue>>}\n rules={rules}\n render={({ field: { onChange, value, ref } }) =>\n {\n onChange(val);\n onChangeCb(val);\n }}\n checked={value as boolean || false}\n width={40}\n height={19}\n uncheckedIcon={false}\n checkedIcon={false}\n handleDiameter={15}\n ref={ref}\n disabled={typeof disabled === 'function' ? disabled(id) : disabled} />\n } />\n \n );\n};\n","// This is a kind of promise you can resolve from outside the function callback.\n// Credits to https://stackoverflow.com/a/71158892/1039377\nexport default class Deferred {\n public readonly promise: Promise;\n private resolveFn!: (value: T | PromiseLike) => void;\n private rejectFn!: (reason?: unknown) => void;\n\n public constructor () {\n this.promise = new Promise((resolve, reject) => {\n this.resolveFn = resolve;\n this.rejectFn = reject;\n });\n }\n\n public reject (reason?: unknown): void {\n this.rejectFn(reason);\n }\n\n public resolve (param: T): void {\n this.resolveFn(param);\n }\n}\n","import React, { PropsWithChildren, useCallback, useEffect, useState } from 'react';\nimport { UIRouter } from '@uirouter/angularjs';\nimport { FormState } from 'react-hook-form/dist/types/form';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { FabModal } from '../base/fab-modal';\nimport Deferred from '../../lib/deferred';\nimport { useTranslation } from 'react-i18next';\n\ninterface UnsavedFormAlertProps {\n uiRouter: UIRouter,\n formState: FormState,\n}\n\n/**\n * Alert the user about unsaved changes in the given form, before leaving the current page.\n * This component is highly dependent of these external libraries:\n * - [react-hook-form](https://react-hook-form.com/)\n * - [ui-router](https://ui-router.github.io/)\n */\nexport const UnsavedFormAlert = ({ uiRouter, formState, children }: PropsWithChildren>) => {\n const { t } = useTranslation('shared');\n\n const [showAlertModal, setShowAlertModal] = useState(false);\n const [promise, setPromise] = useState>(null);\n const [dirty, setDirty] = useState(formState.isDirty);\n\n useEffect(() => {\n const submitStatus = (!formState.isSubmitting && (!formState.isSubmitted || !formState.isSubmitSuccessful));\n setDirty(submitStatus && Object.keys(formState.dirtyFields).length > 0);\n }, [formState]);\n\n /**\n * Check if the current form is dirty. If so, show the confirmation modal and return a promise\n */\n const alertOnDirtyForm = (isDirty: boolean): Promise|void => {\n if (isDirty) {\n toggleAlertModal();\n const userChoicePromise = new Deferred();\n setPromise(userChoicePromise);\n return userChoicePromise.promise;\n }\n };\n\n // memoised version of the alertOnDirtyForm function, will be updated only when the form becames dirty\n const alertDirty = useCallback<() => Promise|void>(() => alertOnDirtyForm(dirty), [dirty]);\n\n // we should place this useEffect after the useCallback declaration (because it's a scoped variable)\n useEffect(() => {\n const { transitionService, globals: { current } } = uiRouter;\n const deregisters = transitionService.onBefore({ from: current.name }, alertDirty);\n return () => {\n deregisters();\n };\n }, [alertDirty]);\n\n /**\n * When the user tries to close the current page (tab/window), we alert him about unsaved changes\n */\n const alertOnExit = (event: BeforeUnloadEvent, isDirty: boolean) => {\n if (isDirty) {\n event.preventDefault();\n event.returnValue = '';\n }\n };\n\n // memoised version of the alertOnExit function, will be updated only when the form becames dirty\n const alertExit = useCallback<(event: BeforeUnloadEvent) => void>((event) => alertOnExit(event, dirty), [dirty]);\n\n // we should place this useEffect after the useCallback declaration (because it's a scoped variable)\n useEffect(() => {\n window.addEventListener('beforeunload', alertExit);\n return () => {\n window.removeEventListener('beforeunload', alertExit);\n };\n }, [alertExit]);\n\n /**\n * Hide/show the alert modal \"you have some unsaved content, are you sure you want to leave?\"\n */\n const toggleAlertModal = () => {\n setShowAlertModal(!showAlertModal);\n };\n\n /**\n * Callback triggered when the user has choosen: continue and exit\n */\n const handleConfirmation = () => {\n promise.resolve(true);\n };\n\n /**\n * Callback triggered when the user has choosen: cancel and stay\n */\n const handleCancel = () => {\n promise.resolve(false);\n };\n\n return (\n
    \n {children}\n \n {t('app.shared.unsaved_form_alert.confirmation_message')}\n \n
    \n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { User } from '../../models/user';\nimport { Loader } from '../base/loader';\nimport { IApplication } from '../../models/application';\nimport { react2angular } from 'react2angular';\nimport { Group } from '../../models/group';\nimport GroupAPI from '../../api/group';\nimport { FabButton } from '../base/fab-button';\nimport { useTranslation } from 'react-i18next';\nimport { useForm } from 'react-hook-form';\nimport { FormSelect } from '../form/form-select';\nimport MemberAPI from '../../api/member';\nimport SettingAPI from '../../api/setting';\nimport UserLib from '../../lib/user';\nimport { SelectOption } from '../../models/select';\n\ndeclare const Application: IApplication;\n\ninterface ChangeGroupProps {\n user: User,\n onSuccess: (message: string, user: User) => void,\n onError: (message: string) => void,\n allowChange?: boolean,\n className?: string,\n}\n\n/**\n * Component to display the group of the provided user, and allow him to change his group.\n */\nexport const ChangeGroup: React.FC = ({ user, onSuccess, onError, allowChange, className }) => {\n const { t } = useTranslation('shared');\n\n const [groups, setGroups] = useState>([]);\n const [changeRequested, setChangeRequested] = useState(false);\n const [operator, setOperator] = useState(null);\n const [allowedUserChangeGoup, setAllowedUserChangeGoup] = useState(false);\n\n const { handleSubmit, control } = useForm();\n\n useEffect(() => {\n GroupAPI.index({ disabled: false }).then(setGroups).catch(onError);\n MemberAPI.current().then(setOperator).catch(onError);\n SettingAPI.get('user_change_group').then((setting) => {\n setAllowedUserChangeGoup(setting.value === 'true');\n }).catch(onError);\n }, []);\n\n useEffect(() => {\n setChangeRequested(false);\n }, [user, allowChange]);\n\n /**\n * Displays or hide the form to change the group.\n */\n const toggleChangeRequest = () => {\n setChangeRequested(!changeRequested);\n };\n\n /**\n * Check if the group changing is currently allowed.\n */\n const canChangeGroup = (): boolean => {\n const userLib = new UserLib(operator);\n return allowChange && (allowedUserChangeGoup || userLib.isPrivileged(user));\n };\n\n /**\n * Convert the provided array of items to the react-select format\n */\n const buildGroupsOptions = (): Array> => {\n return groups?.map(t => {\n return { value: t.id, label: t.name };\n });\n };\n\n /**\n * Callback triggered when the group changing form is submitted.\n */\n const onSubmit = (data: { group_id: number }) => {\n MemberAPI.update({ id: user.id, group_id: data.group_id } as User).then(res => {\n toggleChangeRequest();\n onSuccess(t('app.shared.change_group.success'), res);\n }).catch(onError);\n };\n\n // do not render the component if no user were provided (we cannot change th group of nobody)\n if (!user) return null;\n\n return (\n
    \n

    {t('app.shared.change_group.title', { OPERATOR: operator?.id === user.id ? 'self' : 'admin' })}

    \n {!changeRequested &&
    \n
    \n {groups.find(group => group.id === user.group_id)?.name}\n
    \n {canChangeGroup() && \n {t('app.shared.change_group.change', { OPERATOR: operator?.id === user.id ? 'self' : 'admin' })}\n }\n
    }\n {changeRequested &&
    \n \n
    \n {t('app.shared.change_group.cancel')}\n {t('app.shared.change_group.validate')}\n
    \n }\n
    \n );\n};\n\nChangeGroup.defaultProps = {\n allowChange: true\n};\n\nconst ChangeGroupWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('changeGroup', react2angular(ChangeGroupWrapper, ['user', 'onSuccess', 'onError', 'allowChange', 'className']));\n","import React, { ReactNode, useState } from 'react';\nimport { Machine } from '../../models/machine';\nimport { useTranslation } from 'react-i18next';\nimport { Loader } from '../base/loader';\nimport { ReserveButton } from './reserve-button';\nimport { User } from '../../models/user';\n\ninterface MachineCardProps {\n user?: User,\n machine: Machine,\n onShowMachine: (machine: Machine) => void,\n onReserveMachine: (machine: Machine) => void,\n onLoginRequested: () => Promise,\n onEnrollRequested: (trainingId: number) => void,\n onError: (message: string) => void,\n onSuccess: (message: string) => void,\n canProposePacks: boolean,\n}\n\n/**\n * This component is a box showing the picture of the given machine and two buttons: one to start the reservation process\n * and another to redirect the user to the machine description page.\n */\nconst MachineCard: React.FC = ({ user, machine, onShowMachine, onReserveMachine, onError, onSuccess, onLoginRequested, onEnrollRequested, canProposePacks }) => {\n const { t } = useTranslation('public');\n\n // shall we display a loader to prevent double-clicking, while the machine details are loading?\n const [loading, setLoading] = useState(false);\n\n /**\n * Callback triggered when the user clicks on the 'reserve' button and has passed all the verifications\n */\n const handleReserveMachine = (): void => {\n onReserveMachine(machine);\n };\n /**\n * Callback triggered when the user clicks on the 'view' button\n */\n const handleShowMachine = (): void => {\n onShowMachine(machine);\n };\n\n /**\n * Return the machine's picture or a placeholder\n */\n const machinePicture = (): ReactNode => {\n if (!machine.machine_image_attributes) {\n return
    ;\n }\n\n return (\n
    \n );\n };\n\n return (\n
    \n {machinePicture()}\n
    \n {machine.name}\n
    \n
    \n {!machine.disabled && setLoading(true)}\n onLoadingEnd={() => setLoading(false)}\n onError={onError}\n onSuccess={onSuccess}\n onReserveMachine={handleReserveMachine}\n onLoginRequested={onLoginRequested}\n onEnrollRequested={onEnrollRequested}\n canProposePacks={canProposePacks}\n className=\"reserve-button\">\n \n {t('app.public.machine_card.book')}\n }\n \n \n \n
    \n
    \n );\n};\n\nconst MachineCardWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport { MachineCardWrapper as MachineCard };\n","import React from 'react';\nimport { SubmitHandler, useForm, useWatch } from 'react-hook-form';\nimport { Machine } from '../../models/machine';\nimport MachineAPI from '../../api/machine';\nimport { useTranslation } from 'react-i18next';\nimport { FormInput } from '../form/form-input';\nimport { FormImageUpload } from '../form/form-image-upload';\nimport { IApplication } from '../../models/application';\nimport { Loader } from '../base/loader';\nimport { react2angular } from 'react2angular';\nimport { ErrorBoundary } from '../base/error-boundary';\nimport { FormRichText } from '../form/form-rich-text';\nimport { FormSwitch } from '../form/form-switch';\n\ndeclare const Application: IApplication;\n\ninterface MachineFormProps {\n action: 'create' | 'update',\n machine?: Machine,\n onError: (message: string) => void,\n onSuccess: (message: string) => void,\n}\n\n/**\n * Form to edit or create machines\n */\nexport const MachineForm: React.FC = ({ action, machine, onError, onSuccess }) => {\n const { handleSubmit, register, control, setValue, formState } = useForm({ defaultValues: { ...machine } });\n const output = useWatch({ control });\n const { t } = useTranslation('admin');\n\n /**\n * Callback triggered when the user validates the machine form: handle create or update\n */\n const onSubmit: SubmitHandler = (data: Machine) => {\n MachineAPI[action](data).then(() => {\n onSuccess(t(`app.admin.machine_form.${action}_success`));\n }).catch(error => {\n onError(error);\n });\n };\n\n return (\n
    \n \n \n \n \n\n \n \n );\n};\n\nconst MachineFormWrapper: React.FC = (props) => {\n return (\n \n \n \n \n \n );\n};\n\nApplication.Components.component('machineForm', react2angular(MachineFormWrapper, ['action', 'machine', 'onError', 'onSuccess']));\n","import React from 'react';\nimport Select from 'react-select';\nimport { useTranslation } from 'react-i18next';\nimport { SelectOption } from '../../models/select';\n\ninterface MachinesFiltersProps {\n onStatusSelected: (enabled: boolean) => void,\n}\n\n/**\n * Allows filtering on machines list\n */\nexport const MachinesFilters: React.FC = ({ onStatusSelected }) => {\n const { t } = useTranslation('public');\n\n const defaultValue = { value: true, label: t('app.public.machines_filters.status_enabled') };\n\n /**\n * Provides boolean options in the react-select format (yes/no/all)\n */\n const buildBooleanOptions = (): Array> => {\n return [\n defaultValue,\n { value: false, label: t('app.public.machines_filters.status_disabled') },\n { value: null, label: t('app.public.machines_filters.status_all') }\n ];\n };\n\n /**\n * Callback triggered when the user selects a machine status in the dropdown list\n */\n const handleStatusSelected = (option: SelectOption): void => {\n onStatusSelected(option.value);\n };\n\n return (\n
    \n
    \n \n \n \n );\n};\n","import React, { FunctionComponent, ReactNode, useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport WalletLib from '../../lib/wallet';\nimport { WalletInfo } from './wallet-info';\nimport { FabModal, ModalSize } from '../base/fab-modal';\nimport { HtmlTranslate } from '../base/html-translate';\nimport { CustomAsset, CustomAssetName } from '../../models/custom-asset';\nimport { ShoppingCart } from '../../models/payment';\nimport { PaymentSchedule } from '../../models/payment-schedule';\nimport { User } from '../../models/user';\nimport CustomAssetAPI from '../../api/custom-asset';\nimport PriceAPI from '../../api/price';\nimport WalletAPI from '../../api/wallet';\nimport { Invoice } from '../../models/invoice';\nimport SettingAPI from '../../api/setting';\nimport { GoogleTagManager } from '../../models/gtm';\nimport { ComputePriceResult } from '../../models/price';\nimport { Wallet } from '../../models/wallet';\nimport FormatLib from '../../lib/format';\nimport { Order } from '../../models/order';\nimport { computePriceWithCoupon } from '../../lib/coupon';\n\nexport interface GatewayFormProps {\n onSubmit: () => void,\n onSuccess: (result: Invoice|PaymentSchedule|Order) => void,\n onError: (message: string) => void,\n customer: User,\n operator: User,\n className?: string,\n paymentSchedule?: PaymentSchedule,\n cart?: ShoppingCart,\n order?: Order,\n updateCart?: (cart: ShoppingCart) => void,\n formId: string,\n}\n\ninterface AbstractPaymentModalProps {\n isOpen: boolean,\n toggleModal: () => void,\n afterSuccess: (result: Invoice|PaymentSchedule|Order) => void,\n onError: (message: string) => void,\n cart: ShoppingCart,\n order?: Order,\n updateCart?: (cart: ShoppingCart) => void,\n currentUser: User,\n schedule?: PaymentSchedule,\n customer: User,\n logoFooter: ReactNode,\n GatewayForm: FunctionComponent,\n formId: string,\n className?: string,\n formClassName?: string,\n title?: string,\n preventCgv?: boolean,\n preventScheduleInfo?: boolean,\n modalSize?: ModalSize,\n}\n\ndeclare const GTM: GoogleTagManager;\n\n/**\n * This component is an abstract modal that must be extended by each payment gateway to include its payment form.\n *\n * This component must not be called directly but must be extended for each implemented payment gateway.\n * @see https://reactjs.org/docs/composition-vs-inheritance.html\n */\nexport const AbstractPaymentModal: React.FC = ({ isOpen, toggleModal, afterSuccess, onError, cart, updateCart, currentUser, schedule, customer, logoFooter, GatewayForm, formId, className, formClassName, title, preventCgv, preventScheduleInfo, modalSize, order }) => {\n // customer's wallet\n const [wallet, setWallet] = useState(null);\n // server-computed price with all details\n const [price, setPrice] = useState(null);\n // remaining price = total price - wallet amount\n const [remainingPrice, setRemainingPrice] = useState(0);\n // is the component ready to display?\n const [ready, setReady] = useState(false);\n // errors to display in the UI (gateway errors mainly)\n const [errors, setErrors] = useState(null);\n // are we currently processing the payment (ie. the form was submit, but the process is still running)?\n const [submitState, setSubmitState] = useState(false);\n // did the user accepts the terms of services (CGV)?\n const [tos, setTos] = useState(false);\n // currently active payment gateway\n const [gateway, setGateway] = useState(null);\n // the sales conditions\n const [cgv, setCgv] = useState(null);\n // is the component mounted\n const mounted = useRef(false);\n\n const { t } = useTranslation('shared');\n\n /**\n * When the component loads first, get the name of the currently active payment modal\n */\n useEffect(() => {\n mounted.current = true;\n CustomAssetAPI.get(CustomAssetName.CgvFile).then(asset => setCgv(asset));\n SettingAPI.get('payment_gateway').then((setting) => {\n // we capitalize the first letter of the name\n if (setting.value) {\n setGateway(setting.value.replace(/^\\w/, (c) => c.toUpperCase()));\n }\n });\n\n return () => { mounted.current = false; };\n }, []);\n\n /**\n * On each display:\n * - Refresh the wallet\n * - Refresh the price\n * - Refresh the remaining price\n */\n useEffect(() => {\n if (order && order?.user?.id) {\n WalletAPI.getByUser(order.user.id).then((wallet) => {\n setWallet(wallet);\n const p = { price: computePriceWithCoupon(order.total, order.coupon), price_without_coupon: order.total };\n setPrice(p);\n setRemainingPrice(new WalletLib(wallet).computeRemainingPrice(p.price));\n setReady(true);\n });\n } else if (cart && cart.customer_id) {\n WalletAPI.getByUser(cart.customer_id).then((wallet) => {\n setWallet(wallet);\n PriceAPI.compute(cart).then((res) => {\n setPrice(res);\n setRemainingPrice(new WalletLib(wallet).computeRemainingPrice(res.price));\n setReady(true);\n });\n });\n }\n }, [cart, order]);\n\n /**\n * Check if there is currently an error to display\n */\n const hasErrors = (): boolean => {\n return errors !== null;\n };\n\n /**\n * Check if the user accepts the Terms of Sales document\n */\n const hasCgv = (): boolean => {\n return cgv != null && !preventCgv;\n };\n\n /**\n * Triggered when the user accepts or declines the Terms of Sales\n */\n const toggleTos = (): void => {\n setTos(!tos);\n };\n\n /**\n * Check if we must display the info box about the payment schedule\n */\n const hasPaymentScheduleInfo = (): boolean => {\n return schedule !== undefined && !preventScheduleInfo;\n };\n\n /**\n * Set the component as 'currently submitting'\n */\n const handleSubmit = (): void => {\n setSubmitState(true);\n };\n\n /**\n * After sending the form with success, process the resulting payment method\n */\n const handleFormSuccess = async (result: Invoice|PaymentSchedule|Order): Promise => {\n setSubmitState(false);\n GTM.trackPurchase(result.id, result.total);\n afterSuccess(result);\n };\n\n /**\n * When the payment form raises an error, it is handled by this callback which display it in the modal.\n */\n const handleFormError = (message: string): void => {\n if (mounted.current) {\n setSubmitState(false);\n setErrors(message);\n } else {\n onError(message);\n }\n };\n\n /**\n * Check the form can be submitted.\n * => We're not currently already submitting the form, and, if the terms of service are enabled, the user must agree with them.\n */\n const canSubmit = (): boolean => {\n let terms = true;\n if (hasCgv()) { terms = tos; }\n return !submitState && terms;\n };\n\n /**\n * Build the modal title. If the provided title is a shared translation key, interpolate it through the\n * translation service. Otherwise, just display the provided string.\n */\n const getTitle = (): string => {\n if (title.match(/^app\\.shared\\./)) {\n return t(title);\n }\n return title;\n };\n\n return (\n \n {ready &&
    \n \n \n {hasErrors() &&
    \n {errors}\n
    }\n {hasPaymentScheduleInfo() &&
    \n \n
    }\n {hasCgv() &&
    \n \n \n
    }\n
    \n {!submitState && }\n {submitState &&
    \n
    \n \n
    \n
    }\n
    }\n
    \n );\n};\n\nAbstractPaymentModal.defaultProps = {\n title: 'app.shared.abstract_payment_modal.online_payment',\n preventCgv: false,\n preventScheduleInfo: false,\n modalSize: ModalSize.medium\n};\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { react2angular } from 'react2angular';\nimport { Loader } from '../base/loader';\nimport { StripeModal } from './stripe/stripe-modal';\nimport { PayzenModal } from './payzen/payzen-modal';\nimport { IApplication } from '../../models/application';\nimport { ShoppingCart } from '../../models/payment';\nimport { User } from '../../models/user';\nimport { PaymentSchedule } from '../../models/payment-schedule';\nimport { Setting } from '../../models/setting';\nimport { Invoice } from '../../models/invoice';\nimport SettingAPI from '../../api/setting';\nimport { useTranslation } from 'react-i18next';\nimport { Order } from '../../models/order';\n\ndeclare const Application: IApplication;\n\ninterface CardPaymentModalProps {\n isOpen: boolean,\n toggleModal: () => void,\n afterSuccess: (result: Invoice|PaymentSchedule|Order) => void,\n onError: (message: string) => void,\n cart: ShoppingCart,\n order?: Order,\n currentUser: User,\n schedule?: PaymentSchedule,\n customer: User\n}\n\n/**\n * This component open a modal dialog for the configured payment gateway, allowing the user to input his card data\n * to process an online payment.\n */\nconst CardPaymentModal: React.FC = ({ isOpen, toggleModal, afterSuccess, onError, currentUser, schedule, cart, customer, order }) => {\n const { t } = useTranslation('shared');\n\n const [gateway, setGateway] = useState(null);\n\n useEffect(() => {\n SettingAPI.get('payment_gateway')\n .then(setting => setGateway(setting))\n .catch(error => onError(error));\n }, []);\n\n /**\n * Render the Stripe payment modal\n */\n const renderStripeModal = (): ReactElement => {\n return ;\n };\n\n /**\n * Render the PayZen payment modal\n */\n const renderPayZenModal = (): ReactElement => {\n return ;\n };\n\n /**\n * Determine which gateway is enabled and return the appropriate payment modal\n */\n if (gateway === null || !isOpen) return
    ;\n\n switch (gateway.value) {\n case 'stripe':\n return renderStripeModal();\n case 'payzen':\n return renderPayZenModal();\n case null:\n case undefined:\n onError(t('app.shared.card_payment_modal.online_payment_disabled'));\n return
    ;\n default:\n onError(t('app.shared.card_payment_modal.unexpected_error'));\n console.error(`[PaymentModal] Unimplemented gateway: ${gateway.value}`);\n return
    ;\n }\n};\n\nconst CardPaymentModalWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport { CardPaymentModalWrapper as CardPaymentModal };\n\nApplication.Components.component('cardPaymentModal', react2angular(CardPaymentModalWrapper, ['isOpen', 'toggleModal', 'afterSuccess', 'onError', 'currentUser', 'schedule', 'cart', 'customer', 'order']));\n","import React, { FormEvent, useEffect, useState } from 'react';\nimport Select from 'react-select';\nimport { useTranslation } from 'react-i18next';\nimport { GatewayFormProps } from '../abstract-payment-modal';\nimport LocalPaymentAPI from '../../../api/local-payment';\nimport FormatLib from '../../../lib/format';\nimport SettingAPI from '../../../api/setting';\nimport { CardPaymentModal } from '../card-payment-modal';\nimport { PaymentSchedule } from '../../../models/payment-schedule';\nimport { HtmlTranslate } from '../../base/html-translate';\nimport CheckoutAPI from '../../../api/checkout';\nimport { SelectOption } from '../../../models/select';\n\nconst ALL_SCHEDULE_METHODS = ['card', 'check', 'transfer'] as const;\ntype scheduleMethod = typeof ALL_SCHEDULE_METHODS[number];\n\n/**\n * A form component to ask for confirmation before cashing a payment directly at the FabLab's reception.\n * This is intended for use by privileged users.\n * The form validation button must be created elsewhere, using the attribute form={formId}.\n */\nexport const LocalPaymentForm: React.FC = ({ onSubmit, onSuccess, onError, children, className, paymentSchedule, cart, updateCart, customer, operator, formId, order }) => {\n const { t } = useTranslation('admin');\n\n const [method, setMethod] = useState('check');\n const [onlinePaymentModal, setOnlinePaymentModal] = useState(false);\n\n useEffect(() => {\n setMethod(cart.payment_method || 'check');\n }, [cart]);\n\n /**\n * Open/closes the online payment modal, used to collect card credentials when paying the payment schedule by card.\n */\n const toggleOnlinePaymentModal = (): void => {\n setOnlinePaymentModal(!onlinePaymentModal);\n };\n\n /**\n * Convert all payement methods for schedules to the react-select format\n */\n const buildMethodOptions = (): Array> => {\n return ALL_SCHEDULE_METHODS.map(i => methodToOption(i));\n };\n\n /**\n * Convert the given payment-method to the react-select format\n */\n const methodToOption = (value: scheduleMethod): SelectOption => {\n if (!value) return { value, label: '' };\n\n return { value, label: t(`app.admin.local_payment_form.method_${value}`) };\n };\n\n /**\n * Callback triggered when the user selects a payment method for the current payment schedule.\n */\n const handleUpdateMethod = (option: SelectOption) => {\n updateCart(Object.assign({}, cart, { payment_method: option.value }));\n setMethod(option.value);\n };\n\n /**\n * Handle the submission of the form. It will process the local payment.\n */\n const handleSubmit = async (event: FormEvent): Promise => {\n event.preventDefault();\n onSubmit();\n\n if (paymentSchedule && method === 'card') {\n // check that the online payment is active\n try {\n const online = await SettingAPI.get('online_payment_module');\n if (online.value !== 'true') {\n return onError(t('app.admin.local_payment_form.online_payment_disabled'));\n }\n return toggleOnlinePaymentModal();\n } catch (e) {\n onError(e);\n }\n }\n\n try {\n let res;\n if (order) {\n res = await CheckoutAPI.payment(order);\n res = res.order;\n } else {\n res = await LocalPaymentAPI.confirmPayment(cart);\n }\n onSuccess(res);\n } catch (e) {\n onError(e);\n }\n };\n\n /**\n * Callback triggered after a successful payment by online card for a schedule.\n */\n const afterCreatePaymentSchedule = (document: PaymentSchedule) => {\n toggleOnlinePaymentModal();\n onSuccess(document);\n };\n\n /**\n * Generally, this form component is only shown to admins or to managers when they book for someone else.\n * If this is not the case, then it is shown to validate a free (or prepaid by wallet) cart.\n * This function will return `true` in the later case.\n */\n const isFreeOfCharge = (): boolean => {\n return (customer.id === operator.id);\n };\n\n /**\n * Get the type of the main item in the cart compile\n */\n const mainItemType = (): string => {\n if (order) {\n return '';\n }\n return Object.keys(cart.items[0])[0];\n };\n\n return (\n
    \n {!paymentSchedule && !isFreeOfCharge() &&

    {t('app.admin.local_payment_form.about_to_cash')}

    }\n {!paymentSchedule && isFreeOfCharge() &&

    {t('app.admin.local_payment_form.about_to_confirm', { ITEM: mainItemType() })}

    }\n {paymentSchedule &&
    \n
    \n \n \n \n \n \n {selectedGateway === Gateway.Stripe && }\n {selectedGateway === Gateway.PayZen && }\n \n );\n};\n\nconst SelectGatewayModalWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('selectGatewayModal', react2angular(SelectGatewayModalWrapper, ['isOpen', 'toggleModal', 'currentUser', 'onSuccess', 'onError']));\n","import { Invoice } from '../../../models/invoice';\nimport { PaymentSchedule } from '../../../models/payment-schedule';\nimport { ShoppingCart } from '../../../models/payment';\nimport { User } from '../../../models/user';\nimport React, { useEffect, useState } from 'react';\nimport WalletAPI from '../../../api/wallet';\nimport { Wallet } from '../../../models/wallet';\nimport WalletLib from '../../../lib/wallet';\nimport UserLib from '../../../lib/user';\nimport { LocalPaymentModal } from '../local-payment/local-payment-modal';\nimport { CardPaymentModal } from '../card-payment-modal';\nimport PriceAPI from '../../../api/price';\nimport { ComputePriceResult } from '../../../models/price';\nimport { Order } from '../../../models/order';\nimport { computePriceWithCoupon } from '../../../lib/coupon';\n\ninterface PaymentModalProps {\n isOpen: boolean,\n toggleModal: () => void,\n afterSuccess: (result: Invoice|PaymentSchedule|Order) => void,\n onError: (message: string) => void,\n cart: ShoppingCart,\n order?: Order,\n updateCart: (cart: ShoppingCart) => void,\n operator: User,\n schedule?: PaymentSchedule,\n customer: User\n}\n\n/**\n * This component is responsible for rendering the payment modal.\n */\nexport const PaymentModal: React.FC = ({ isOpen, toggleModal, afterSuccess, onError, cart, updateCart, operator, schedule, customer, order }) => {\n // the user's wallet\n const [wallet, setWallet] = useState(null);\n // the price of the cart\n const [price, setPrice] = useState(null);\n // the remaining price to pay, after the wallet was changed\n const [remainingPrice, setRemainingPrice] = useState(null);\n\n // refresh the wallet when the customer changes\n useEffect(() => {\n WalletAPI.getByUser(customer.id).then(wallet => {\n setWallet(wallet);\n });\n }, [customer]);\n\n // refresh the price when the cart changes\n useEffect(() => {\n if (order) {\n setPrice({ price: computePriceWithCoupon(order.total, order.coupon), price_without_coupon: order.total });\n } else {\n PriceAPI.compute(cart).then(price => {\n setPrice(price);\n });\n }\n }, [cart, order]);\n\n // refresh the remaining price when the cart price was computed and the wallet was retrieved\n useEffect(() => {\n if (price && wallet) {\n setRemainingPrice(new WalletLib(wallet).computeRemainingPrice(price?.price));\n }\n }, [price, wallet]);\n\n /**\n * Check the conditions for the local payment\n */\n const isLocalPayment = (): boolean => {\n return (new UserLib(operator).isPrivileged(customer) || remainingPrice === 0);\n };\n\n // do not render the modal until the real remaining price is computed\n if (remainingPrice === null) return null;\n\n if (isLocalPayment()) {\n return (\n \n );\n } else {\n return (\n \n );\n }\n};\n","import React, { ReactNode, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { FabModal } from '../../base/fab-modal';\nimport { StripeCardUpdate } from './stripe-card-update';\nimport { PaymentSchedule } from '../../../models/payment-schedule';\nimport { User } from '../../../models/user';\nimport stripeLogo from '../../../../../images/powered_by_stripe.png';\nimport mastercardLogo from '../../../../../images/mastercard.png';\nimport visaLogo from '../../../../../images/visa.png';\n\ninterface StripeCardUpdateModalProps {\n isOpen: boolean,\n toggleModal: () => void,\n onSuccess: () => void,\n schedule: PaymentSchedule,\n operator: User\n}\n\n/**\n * Modal dialog to allow the member to update his payment card for a payment schedule, when the Stripe gateway is used\n */\nexport const StripeCardUpdateModal: React.FC = ({ isOpen, toggleModal, onSuccess, schedule, operator }) => {\n const { t } = useTranslation('shared');\n\n // prevent submitting the form to update the card details, until the user has filled correctly all required fields\n const [canSubmitUpdateCard, setCanSubmitUpdateCard] = useState(true);\n // we save errors here, if any, for display purposes.\n const [errors, setErrors] = useState(null);\n\n /**\n * Return the logos, shown in the modal footer.\n */\n const logoFooter = (): ReactNode => {\n return (\n
    \n \n \"powered\n \"mastercard\"\n \"visa\"\n
    \n );\n };\n\n /**\n * When the user clicks the submit button, we disable it to prevent double form submission\n */\n const handleCardUpdateSubmit = (): void => {\n setCanSubmitUpdateCard(false);\n };\n\n /**\n * When the card was not updated, show the error\n */\n const handleCardUpdateError = (error): void => {\n setErrors(error);\n setCanSubmitUpdateCard(true);\n };\n\n return (\n \n {schedule && \n {errors &&
    \n {errors}\n
    }\n
    }\n
    \n {canSubmitUpdateCard && }\n {!canSubmitUpdateCard &&
    \n
    \n \n
    \n
    }\n
    \n
    \n );\n};\n","import React, { FormEvent } from 'react';\nimport { CardElement, useElements, useStripe } from '@stripe/react-stripe-js';\nimport { User } from '../../../models/user';\nimport StripeAPI from '../../../api/stripe';\nimport { PaymentSchedule } from '../../../models/payment-schedule';\n\ninterface StripeCardUpdateProps {\n onSubmit: () => void,\n onSuccess: () => void,\n onError: (message: string) => void,\n schedule: PaymentSchedule\n operator: User,\n className?: string,\n}\n\n/**\n * A simple form component to collect and update the credit card details, for Stripe.\n *\n * The form validation button must be created elsewhere, using the attribute form=\"stripe-card\".\n */\nexport const StripeCardUpdate: React.FC = ({ onSubmit, onSuccess, onError, className, schedule, operator, children }) => {\n const stripe = useStripe();\n const elements = useElements();\n\n /**\n * Handle the submission of the form. Depending on the configuration, it will create the payment method on Stripe,\n * or it will process a payment with the inputted card.\n */\n const handleSubmit = async (event: FormEvent): Promise => {\n event.preventDefault();\n onSubmit();\n\n // Stripe.js has not loaded yet\n if (!stripe || !elements) { return; }\n\n const cardElement = elements.getElement(CardElement);\n const { error, paymentMethod } = await stripe.createPaymentMethod({\n type: 'card',\n card: cardElement\n });\n\n if (error) {\n // stripe error\n onError(error.message);\n } else {\n try {\n // we start by associating the payment method with the user\n const intent = await StripeAPI.setupIntent(schedule.user.id);\n const { error } = await stripe.confirmCardSetup(intent.client_secret, {\n payment_method: paymentMethod.id,\n mandate_data: {\n customer_acceptance: {\n type: 'online',\n online: {\n ip_address: operator.ip_address,\n user_agent: navigator.userAgent\n }\n }\n }\n });\n if (error) {\n onError(error.message);\n } else {\n // then we update the default payment method\n const res = await StripeAPI.updateCard(schedule.user.id, paymentMethod.id, schedule.id);\n if (res.updated) {\n onSuccess();\n } else {\n onError(res.error);\n }\n }\n } catch (err) {\n // catch api errors\n onError(err);\n }\n }\n };\n\n /**\n * Options for the Stripe's card input\n */\n const cardOptions = {\n style: {\n base: {\n fontSize: '16px',\n color: '#424770',\n '::placeholder': { color: '#aab7c4' }\n },\n invalid: {\n color: '#9e2146',\n iconColor: '#9e2146'\n }\n },\n hidePostalCode: true\n };\n\n return (\n \n \n {children}\n \n );\n};\n","import { StripeConfirm } from './stripe-confirm';\nimport { FabModal } from '../../base/fab-modal';\nimport React, { useEffect, useState } from 'react';\nimport PaymentScheduleAPI from '../../../api/payment-schedule';\nimport { PaymentScheduleItem } from '../../../models/payment-schedule';\nimport { useTranslation } from 'react-i18next';\n\ninterface StripeConfirmModalProps {\n isOpen: boolean,\n toggleModal: () => void,\n onSuccess: () => void,\n paymentScheduleItemId: number,\n}\n\n/**\n * Modal dialog that trigger a 3D secure confirmation for the given payment schedule item (deadline for a payment schedule).\n */\nexport const StripeConfirmModal: React.FC = ({ isOpen, toggleModal, onSuccess, paymentScheduleItemId }) => {\n const { t } = useTranslation('shared');\n\n const [item, setItem] = useState(null);\n const [isPending, setIsPending] = useState(false);\n\n useEffect(() => {\n PaymentScheduleAPI.getItem(paymentScheduleItemId).then(data => {\n setItem(data);\n });\n }, [paymentScheduleItemId]);\n\n /**\n * Callback triggered when the confirm button was clicked in the modal.\n */\n const onConfirmed = (): void => {\n togglePending();\n onSuccess();\n };\n\n /**\n * Enable/disable the confirm button of the \"action\" modal\n */\n const togglePending = (): void => {\n setIsPending(!isPending);\n };\n\n return (\n \n {item && }\n \n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { useStripe } from '@stripe/react-stripe-js';\nimport { useTranslation } from 'react-i18next';\n\ninterface StripeConfirmProps {\n clientSecret: string,\n onResponse: () => void,\n}\n\n/**\n * This component runs a 3D secure confirmation for the given Stripe payment (identified by clientSecret).\n * A message is shown, depending on the result of the confirmation.\n * In case of success, a callback \"onResponse\" is also run.\n */\nexport const StripeConfirm: React.FC = ({ clientSecret, onResponse }) => {\n const stripe = useStripe();\n const { t } = useTranslation('shared');\n\n // the message displayed to the user\n const [message, setMessage] = useState(t('app.shared.stripe_confirm.pending'));\n // the style class of the message\n const [type, setType] = useState('info');\n\n /**\n * When the component is mounted, run the 3DS confirmation.\n */\n useEffect(() => {\n stripe.confirmCardPayment(clientSecret).then(function (result) {\n onResponse();\n if (result.error) {\n // Display error.message in your UI.\n setType('error');\n setMessage(result.error.message);\n } else {\n // The setup has succeeded. Display a success message.\n setType('success');\n setMessage(t('app.shared.stripe_confirm.success'));\n }\n });\n }, []);\n\n return
    \n
    {message}
    \n
    ;\n};\n","import React, { memo, useEffect, useState } from 'react';\nimport { Elements } from '@stripe/react-stripe-js';\nimport { loadStripe, Stripe } from '@stripe/stripe-js';\nimport SettingAPI from '../../../api/setting';\n\n/**\n * This component initializes the stripe's Elements tag with the API key\n */\nexport const StripeElements: React.FC = memo(({ children }) => {\n const [stripe, setStripe] = useState>(undefined);\n\n /**\n * When this component is mounted, we initialize the tag with the Stripe's public key\n */\n useEffect(() => {\n SettingAPI.get('stripe_public_key').then(key => {\n if (key?.value) {\n const promise = loadStripe(key.value);\n setStripe(promise);\n }\n });\n }, []);\n\n return (\n
    \n {stripe && \n {children}\n }\n
    \n );\n});\n\nStripeElements.displayName = 'StripeElements';\n","import React, { FormEvent } from 'react';\nimport { CardElement, useElements, useStripe } from '@stripe/react-stripe-js';\nimport { useTranslation } from 'react-i18next';\nimport { GatewayFormProps } from '../abstract-payment-modal';\nimport { PaymentConfirmation } from '../../../models/payment';\nimport StripeAPI from '../../../api/stripe';\nimport { Invoice } from '../../../models/invoice';\nimport { PaymentSchedule } from '../../../models/payment-schedule';\nimport CheckoutAPI from '../../../api/checkout';\nimport { Order } from '../../../models/order';\n\n/**\n * A form component to collect the credit card details and to create the payment method on Stripe.\n * The form validation button must be created elsewhere, using the attribute form={formId}.\n */\nexport const StripeForm: React.FC = ({ onSubmit, onSuccess, onError, children, className, paymentSchedule = false, cart, formId, order }) => {\n const { t } = useTranslation('shared');\n\n const stripe = useStripe();\n const elements = useElements();\n\n /**\n * Handle the submission of the form. Depending on the configuration, it will create the payment method on Stripe,\n * or it will process a payment with the inputted card.\n */\n const handleSubmit = async (event: FormEvent): Promise => {\n event.preventDefault();\n event.stopPropagation();\n onSubmit();\n\n // Stripe.js has not loaded yet\n if (!stripe || !elements) { return; }\n\n const cardElement = elements.getElement(CardElement);\n const { error, paymentMethod } = await stripe.createPaymentMethod({\n type: 'card',\n card: cardElement\n });\n\n if (error) {\n // stripe error\n onError(error.message);\n } else {\n try {\n if (!paymentSchedule) {\n if (order) {\n const res = await CheckoutAPI.payment(order, paymentMethod.id);\n if (res.payment) {\n await handleServerConfirmation(res.payment as PaymentConfirmation);\n } else {\n await handleServerConfirmation(res.order);\n }\n } else {\n // process the normal payment pipeline, including SCA validation\n const res = await StripeAPI.confirmMethod(paymentMethod.id, cart);\n await handleServerConfirmation(res);\n }\n } else {\n const res = await StripeAPI.setupSubscription(paymentMethod.id, cart);\n await handleServerConfirmation(res, paymentMethod.id);\n }\n } catch (err) {\n // catch api errors\n onError(err);\n }\n }\n };\n\n /**\n * Process the server response about the Strong-customer authentication (SCA)\n * @param response can be a PaymentConfirmation, or an Invoice/PaymentSchedule (if the payment succeeded)\n * @param paymentMethodId ID of the payment method, required only when confirming a payment schedule\n * @see app/controllers/api/stripe_controller.rb#confirm_payment\n */\n const handleServerConfirmation = async (response: PaymentConfirmation|Invoice|PaymentSchedule|Order, paymentMethodId?: string) => {\n if ('error' in response) {\n if (response.error.statusText) {\n onError(response.error.statusText);\n } else {\n onError(`${t('app.shared.stripe_form.payment_card_error')} ${response.error}`);\n }\n } else if ('requires_action' in response) {\n if (response.type === 'payment') {\n // Use Stripe.js to handle required card action\n const result = await stripe.handleCardAction(response.payment_intent_client_secret);\n if (result.error) {\n onError(result.error.message);\n } else {\n // The card action has been handled\n // The PaymentIntent can be confirmed again on the server\n try {\n if (order) {\n const confirmation = await CheckoutAPI.confirmPayment(order, result.paymentIntent.id);\n await handleServerConfirmation(confirmation.order);\n } else {\n const confirmation = await StripeAPI.confirmIntent(result.paymentIntent.id, cart);\n await handleServerConfirmation(confirmation);\n }\n } catch (e) {\n onError(e);\n }\n }\n } else if (response.type === 'subscription') {\n const result = await stripe.confirmCardPayment(response.payment_intent_client_secret, {\n payment_method: paymentMethodId\n });\n if (result.error) {\n onError(result.error.message);\n } else {\n try {\n const confirmation = await StripeAPI.confirmSubscription(response.subscription_id, cart);\n await handleServerConfirmation(confirmation);\n } catch (e) {\n onError(e);\n }\n }\n }\n } else if ('id' in response) {\n onSuccess(response);\n } else {\n console.error(`[StripeForm] unknown response received: ${response}`);\n }\n };\n\n /**\n * Options for the Stripe's card input\n */\n const cardOptions = {\n style: {\n base: {\n fontSize: '16px',\n color: '#424770',\n '::placeholder': { color: '#aab7c4' }\n },\n invalid: {\n color: '#9e2146',\n iconColor: '#9e2146'\n }\n },\n hidePostalCode: true\n };\n\n return (\n
    \n \n {children}\n \n );\n};\n","import axios, { AxiosInstance } from 'axios';\n\nfunction client (key: string): AxiosInstance {\n return axios.create({\n baseURL: 'https://api.stripe.com/v1/',\n headers: {\n common: {\n Authorization: `Bearer ${key}`\n }\n }\n });\n}\n\nexport default client;\n","import stripeClient from '../clients/stripe-client';\nimport { AxiosResponse } from 'axios';\nimport { ListCharges, PIIToken } from '../../models/stripe';\n\nexport default class StripeAPI {\n /**\n * @see https://stripe.com/docs/api/tokens/create_pii\n */\n static async createPIIToken (key: string, piiId: string): Promise {\n const params = new URLSearchParams();\n params.append('pii[id_number]', piiId);\n\n const config = {\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n }\n };\n\n const res: AxiosResponse = await stripeClient(key).post('tokens', params, config);\n return res?.data;\n }\n\n /**\n * @see https://stripe.com/docs/api/charges/list\n */\n static async listAllCharges (key: string): Promise {\n const res: AxiosResponse = await stripeClient(key).get('charges');\n return res?.data;\n }\n}\n","import React, { ReactNode, useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { HtmlTranslate } from '../../base/html-translate';\nimport { FabInput } from '../../base/fab-input';\nimport { Loader } from '../../base/loader';\nimport StripeAPI from '../../../api/external/stripe';\nimport SettingAPI from '../../../api/setting';\n\ninterface StripeKeysFormProps {\n onValidKeys: (stripePublic: string, stripeSecret:string) => void,\n onInvalidKeys: () => void,\n}\n\n/**\n * Form to set the stripe's public and private keys\n */\nconst StripeKeysForm: React.FC = ({ onValidKeys, onInvalidKeys }) => {\n const { t } = useTranslation('admin');\n\n // used to prevent promises from resolving if the component was unmounted\n const mounted = useRef(false);\n\n // Stripe's public key\n const [publicKey, setPublicKey] = useState('');\n // Icon of the input field for the Stripe's public key. Used to display if the key is valid.\n const [publicKeyAddOn, setPublicKeyAddOn] = useState(null);\n // Style class for the add-on icon, for the public key\n const [publicKeyAddOnClassName, setPublicKeyAddOnClassName] = useState<'key-invalid' | 'key-valid' | ''>('');\n // Stripe's secret key\n const [secretKey, setSecretKey] = useState('');\n // Icon of the input field for the Stripe's secret key. Used to display if the key is valid.\n const [secretKeyAddOn, setSecretKeyAddOn] = useState(null);\n // Style class for the add-on icon, for the public key\n const [secretKeyAddOnClassName, setSecretKeyAddOnClassName] = useState<'key-invalid' | 'key-valid' | ''>('');\n\n /**\n * When the component loads for the first time:\n * - mark it as mounted\n * - initialize the keys with the values fetched from the API (if any)\n */\n useEffect(() => {\n mounted.current = true;\n\n SettingAPI.query(['stripe_public_key', 'stripe_secret_key']).then(stripeKeys => {\n setPublicKey(stripeKeys.get('stripe_public_key'));\n setSecretKey(stripeKeys.get('stripe_secret_key'));\n }).catch(error => console.error(error));\n\n // when the component unmounts, mark it as unmounted\n return () => {\n mounted.current = false;\n };\n }, []);\n\n /**\n * When the style class for the public and private key are updated, check if they indicate valid keys.\n * If both are valid, run the 'onValidKeys' callback\n */\n useEffect(() => {\n const validClassName = 'key-valid';\n if (publicKeyAddOnClassName === validClassName && secretKeyAddOnClassName === validClassName) {\n onValidKeys(publicKey, secretKey);\n } else {\n onInvalidKeys();\n }\n }, [publicKeyAddOnClassName, secretKeyAddOnClassName]);\n\n /**\n * Send a test call to the Stripe API to check if the inputted public key is valid\n */\n const testPublicKey = (key: string) => {\n setPublicKeyAddOnClassName('');\n\n if (!key.match(/^pk_/)) {\n setPublicKeyAddOn();\n setPublicKeyAddOnClassName('key-invalid');\n return;\n }\n StripeAPI.createPIIToken(key, 'test').then(() => {\n if (!mounted.current) return;\n\n setPublicKey(key);\n setPublicKeyAddOn();\n setPublicKeyAddOnClassName('key-valid');\n }, reason => {\n if (!mounted.current) return;\n\n if (reason.response.status === 401) {\n setPublicKeyAddOn();\n setPublicKeyAddOnClassName('key-invalid');\n }\n });\n };\n\n /**\n * Send a test call to the Stripe API to check if the inputted secret key is valid\n */\n const testSecretKey = (key: string) => {\n setSecretKeyAddOnClassName('');\n\n if (!key.match(/^sk_/)) {\n setSecretKeyAddOn();\n setSecretKeyAddOnClassName('key-invalid');\n return;\n }\n StripeAPI.listAllCharges(key).then(() => {\n if (!mounted.current) return;\n\n setSecretKey(key);\n setSecretKeyAddOn();\n setSecretKeyAddOnClassName('key-valid');\n }, reason => {\n if (!mounted.current) return;\n\n if (reason.response.status === 401) {\n setSecretKeyAddOn();\n setSecretKeyAddOnClassName('key-invalid');\n }\n });\n };\n\n return (\n
    \n
    \n \n
    \n
    \n
    \n \n }\n defaultValue={publicKey}\n onChange={testPublicKey}\n addOn={publicKeyAddOn}\n addOnClassName={publicKeyAddOnClassName}\n debounce={200}\n required />\n
    \n
    \n \n }\n defaultValue={secretKey}\n onChange={testSecretKey}\n addOn={secretKeyAddOn}\n addOnClassName={secretKeyAddOnClassName}\n debounce={200}\n required/>\n
    \n
    \n
    \n );\n};\n\nconst StripeKeysFormWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport { StripeKeysFormWrapper as StripeKeysForm };\n","import React, { FunctionComponent, ReactNode } from 'react';\nimport { StripeElements } from './stripe-elements';\nimport { StripeForm } from './stripe-form';\nimport { GatewayFormProps, AbstractPaymentModal } from '../abstract-payment-modal';\nimport { ShoppingCart } from '../../../models/payment';\nimport { PaymentSchedule } from '../../../models/payment-schedule';\nimport { User } from '../../../models/user';\n\nimport stripeLogo from '../../../../../images/powered_by_stripe.png';\nimport mastercardLogo from '../../../../../images/mastercard.png';\nimport visaLogo from '../../../../../images/visa.png';\nimport { Invoice } from '../../../models/invoice';\nimport { Order } from '../../../models/order';\n\ninterface StripeModalProps {\n isOpen: boolean,\n toggleModal: () => void,\n afterSuccess: (result: Invoice|PaymentSchedule|Order) => void,\n onError: (message: string) => void,\n cart: ShoppingCart,\n order?: Order,\n currentUser: User,\n schedule?: PaymentSchedule,\n customer: User\n}\n\n/**\n * This component enables the user to input his card data or process payments, using the Stripe gateway.\n * Supports Strong-Customer Authentication (SCA).\n *\n * This component should not be called directly. Prefer using which can handle the configuration\n * of a different payment gateway.\n */\nexport const StripeModal: React.FC = ({ isOpen, toggleModal, afterSuccess, onError, cart, currentUser, schedule, customer, order }) => {\n /**\n * Return the logos, shown in the modal footer.\n */\n const logoFooter = (): ReactNode => {\n return (\n
    \n \n \"powered\n \"mastercard\"\n \"visa\"\n
    \n );\n };\n\n /**\n * Integrates the StripeForm into the parent PaymentModal\n */\n const renderForm: FunctionComponent = ({ onSubmit, onSuccess, onError, operator, className, formId, cart, customer, paymentSchedule, children, order }) => {\n return (\n \n \n {children}\n \n \n );\n };\n\n return (\n \n );\n};\n","import React, { ReactElement, useEffect, useState } from 'react';\nimport { Loader } from '../base/loader';\nimport { StripeCardUpdateModal } from './stripe/stripe-card-update-modal';\nimport { PayzenCardUpdateModal } from './payzen/payzen-card-update-modal';\nimport { User } from '../../models/user';\nimport { PaymentSchedule } from '../../models/payment-schedule';\nimport { useTranslation } from 'react-i18next';\n\ninterface UpdateCardModalProps {\n isOpen: boolean,\n toggleModal: () => void,\n afterSuccess: () => void,\n onError: (message: string) => void,\n schedule: PaymentSchedule,\n operator: User\n}\n\n/**\n * This component open a modal dialog for the configured payment gateway, allowing the user to input his card data\n * to process an online payment.\n */\nconst UpdateCardModal: React.FC = ({ isOpen, toggleModal, afterSuccess, onError, operator, schedule }) => {\n const { t } = useTranslation('shared');\n const [gateway, setGateway] = useState('');\n\n useEffect(() => {\n setGateway(schedule.gateway);\n }, [schedule]);\n\n /**\n * Render the Stripe update-card modal\n */\n const renderStripeModal = (): ReactElement => {\n return ;\n };\n\n /**\n * Render the PayZen update-card modal\n */\n const renderPayZenModal = (): ReactElement => {\n return ;\n };\n\n /**\n * Determine which gateway is in use with the current schedule and return the appropriate modal\n */\n\n switch (gateway) {\n case 'Stripe':\n return renderStripeModal();\n case 'PayZen':\n return renderPayZenModal();\n case '':\n case undefined:\n return
    ;\n default:\n onError(t('app.shared.update_card_modal.unexpected_error'));\n console.error(`[UpdateCardModal] unexpected gateway: ${schedule.gateway} for schedule ${schedule.id}`);\n return
    ;\n }\n};\n\nconst UpdateCardModalWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport { UpdateCardModalWrapper as UpdateCardModal };\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { react2angular } from 'react2angular';\nimport { IApplication } from '../../models/application';\nimport '../../lib/i18n';\nimport { Loader } from '../base/loader';\nimport { User } from '../../models/user';\nimport { Wallet } from '../../models/wallet';\nimport WalletLib from '../../lib/wallet';\nimport { ShoppingCart } from '../../models/payment';\nimport FormatLib from '../../lib/format';\n\ndeclare const Application: IApplication;\n\ninterface WalletInfoProps {\n cart: ShoppingCart,\n currentUser: User,\n wallet: Wallet,\n price: number,\n}\n\n/**\n * This component displays a summary of the amount paid with the virtual wallet, for the current transaction\n */\nexport const WalletInfo: React.FC = ({ cart, currentUser, wallet, price }) => {\n const { t } = useTranslation('shared');\n const [remainingPrice, setRemainingPrice] = useState(0);\n\n /**\n * Refresh the remaining price on each display\n */\n useEffect(() => {\n const wLib = new WalletLib(wallet);\n setRemainingPrice(wLib.computeRemainingPrice(price));\n });\n\n /**\n * Check if the currently connected used is also the person making the reservation.\n * If the currently connected user (i.e. the operator), is an admin or a manager, he may book the reservation for someone else.\n */\n const isOperatorAndClient = (): boolean => {\n return currentUser.id === cart.customer_id;\n };\n /**\n * If the client has some money in his wallet & the price is not zero, then we should display this component.\n */\n const shouldBeShown = (): boolean => {\n return wallet.amount > 0 && price > 0;\n };\n /**\n * If the amount in the wallet is not enough to cover the whole price, then the user must pay the remaining price\n * using another payment mean.\n */\n const hasRemainingPrice = (): boolean => {\n return remainingPrice > 0;\n };\n /**\n * Does the current cart contains a payment schedule?\n */\n const isPaymentSchedule = (): boolean => {\n return cart.items.find(i => 'subscription' in i) && cart.payment_schedule;\n };\n /**\n * Return the human-readable name of the item currently bought with the wallet\n */\n const getPriceItem = (): string => {\n let item = 'other';\n if (cart.items.find(i => 'reservation' in i)) {\n item = 'reservation';\n } else if (cart.items.find(i => 'subscription' in i)) {\n if (cart.payment_schedule) {\n item = 'first_deadline';\n } else item = 'subscription';\n }\n\n return t(`app.shared.wallet.wallet_info.item_${item}`);\n };\n\n return (\n
    \n {shouldBeShown() &&
    \n {isOperatorAndClient() &&
    \n

    {t('app.shared.wallet.wallet_info.you_have_AMOUNT_in_wallet', { AMOUNT: FormatLib.price(wallet.amount) })}

    \n {!hasRemainingPrice() &&

    \n {t('app.shared.wallet.wallet_info.wallet_pay_ITEM', { ITEM: getPriceItem() })}\n

    }\n {hasRemainingPrice() &&

    \n {t('app.shared.wallet.wallet_info.credit_AMOUNT_for_pay_ITEM', {\n AMOUNT: FormatLib.price(remainingPrice),\n ITEM: getPriceItem()\n })}\n

    }\n
    }\n {!isOperatorAndClient() &&
    \n

    {t('app.shared.wallet.wallet_info.client_have_AMOUNT_in_wallet', { AMOUNT: FormatLib.price(wallet.amount) })}

    \n {!hasRemainingPrice() &&

    \n {t('app.shared.wallet.wallet_info.client_wallet_pay_ITEM', { ITEM: getPriceItem() })}\n

    }\n {hasRemainingPrice() &&

    \n {t('app.shared.wallet.wallet_info.client_credit_AMOUNT_for_pay_ITEM', {\n AMOUNT: FormatLib.price(remainingPrice),\n ITEM: getPriceItem()\n })}\n

    }\n
    }\n {!hasRemainingPrice() && isPaymentSchedule() &&

    \n \n {t('app.shared.wallet.wallet_info.other_deadlines_no_wallet')}\n

    }\n
    }\n
    \n );\n};\n\nconst WalletInfoWrapper: React.FC = ({ currentUser, cart, price, wallet }) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('walletInfo', react2angular(WalletInfoWrapper, ['currentUser', 'price', 'cart', 'wallet']));\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport PlanCategoryAPI from '../../api/plan-category';\nimport { PlanCategory } from '../../models/plan-category';\nimport { FabButton } from '../base/fab-button';\nimport { FabModal } from '../base/fab-modal';\nimport { Loader } from '../base/loader';\n\ninterface DeletePlanCategoryProps {\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n category: PlanCategory,\n}\n\n/**\n * This component shows a button.\n * When clicked, we show a modal dialog to ask the user for confirmation about the deletion of the provided plan-category.\n */\nconst DeletePlanCategory: React.FC = ({ onSuccess, onError, category }) => {\n const { t } = useTranslation('admin');\n\n const [deletionModal, setDeletionModal] = useState(false);\n\n /**\n * Opens/closes the deletion modal\n */\n const toggleDeletionModal = (): void => {\n setDeletionModal(!deletionModal);\n };\n\n /**\n * The deletion has been confirmed by the user.\n * Call the API to trigger the deletion of the temporary set plan-category\n */\n const onDeleteConfirmed = (): void => {\n PlanCategoryAPI.destroy(category.id).then(() => {\n onSuccess(t('app.admin.delete_plan_category.success'));\n }).catch((error) => {\n onError(t('app.admin.delete_plan_category.error') + error);\n });\n toggleDeletionModal();\n };\n\n return (\n
    \n } onClick={toggleDeletionModal} />\n \n {t('app.admin.delete_plan_category.confirm')}\n \n
    \n );\n};\n\nconst DeletePlanCategoryWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport { DeletePlanCategoryWrapper as DeletePlanCategory };\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { PlanCategory } from '../../models/plan-category';\nimport { FabButton } from '../base/fab-button';\nimport { FabModal } from '../base/fab-modal';\nimport { Loader } from '../base/loader';\nimport { PlanCategoryForm } from './plan-category-form';\n\ninterface ManagePlanCategoryProps {\n category?: PlanCategory,\n action: 'create' | 'update',\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n}\n\n/**\n * This component shows a button.\n * When clicked, we show a modal dialog allowing to fill the parameters of a plan-category (create new or update existing).\n */\nconst ManagePlanCategory: React.FC = ({ category, action, onSuccess, onError }) => {\n const { t } = useTranslation('admin');\n\n // is the creation modal open?\n const [isOpen, setIsOpen] = useState(false);\n // when editing, we store the category here, until the edition is over\n const [tempCategory, setTempCategory] = useState(category);\n\n /**\n * Opens/closes the new plan-category (creation) modal\n */\n const toggleModal = (): void => {\n setIsOpen(!isOpen);\n };\n\n /**\n * Initialize a new plan-category for creation\n * or refresh plan-category data for update\n */\n const initCategoryCreation = () => {\n if (action === 'create') {\n setTempCategory({ name: '', description: '', weight: 0 });\n } else {\n setTempCategory(category);\n }\n };\n\n /**\n * Close the modal if the form submission was successful\n */\n const handleSuccess = (message) => {\n setIsOpen(false);\n onSuccess(message);\n };\n\n /**\n * Render the appropriate button depending on the action type\n */\n const toggleBtn = () => {\n switch (action) {\n case 'create':\n return (\n }\n className=\"create-button\"\n onClick={toggleModal}>\n {t('app.admin.manage_plan_category.create')}\n \n );\n case 'update':\n return (}\n className=\"edit-button\"\n onClick={toggleModal} />);\n }\n };\n\n return (\n
    \n { toggleBtn() }\n \n\n {tempCategory && }\n\n \n
    \n );\n};\n\nconst ManagePlanCategoryWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport { ManagePlanCategoryWrapper as ManagePlanCategory };\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport PlanCategoryAPI from '../../api/plan-category';\nimport { PlanCategory } from '../../models/plan-category';\nimport { react2angular } from 'react2angular';\nimport { Loader } from '../base/loader';\nimport { IApplication } from '../../models/application';\nimport { ManagePlanCategory } from './manage-plan-category';\nimport { DeletePlanCategory } from './delete-plan-category';\n\ndeclare const Application: IApplication;\n\ninterface PlanCategoriesListProps {\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n}\n\n/**\n * This component shows a list of all plan-categories and offer to manager them by deleting, modifying\n * and reordering each plan-categories.\n */\nexport const PlanCategoriesList: React.FC = ({ onSuccess, onError }) => {\n const { t } = useTranslation('admin');\n\n // list of all categories\n const [categories, setCategories] = useState>(null);\n\n // load the categories list on component mount\n useEffect(() => {\n refreshCategories();\n }, []);\n\n /**\n * The creation/edition/deletion was successful.\n * Show the provided message and refresh the list\n */\n const handleSuccess = (message: string): void => {\n onSuccess(message);\n refreshCategories();\n };\n\n /**\n * Refresh the list of categories\n */\n const refreshCategories = () => {\n PlanCategoryAPI.index().then((data) => {\n setCategories(data);\n }).catch((error) => onError(error));\n };\n\n return (\n
    \n \n

    {t('app.admin.plan_categories_list.categories_list')}

    \n {categories && categories.length === 0 && {t('app.admin.plan_categories_list.no_categories')}}\n {categories && categories.length > 0 && \n \n \n \n \n \n \n \n \n {categories.map(c =>\n \n \n \n \n )}\n \n
    {t('app.admin.plan_categories_list.name')}{t('app.admin.plan_categories_list.significance')}
    {c.name}{c.weight}\n \n \n
    }\n
    \n );\n};\n\nconst PlanCategoriesListWrapper: React.FC = ({ onSuccess, onError }) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('planCategoriesList', react2angular(PlanCategoriesListWrapper, ['onSuccess', 'onError']));\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport PlanCategoryAPI from '../../api/plan-category';\nimport { PlanCategory } from '../../models/plan-category';\nimport { Loader } from '../base/loader';\nimport { useForm, SubmitHandler } from 'react-hook-form';\nimport { FormInput } from '../form/form-input';\nimport { FabAlert } from '../base/fab-alert';\nimport { FabButton } from '../base/fab-button';\nimport { FormRichText } from '../form/form-rich-text';\n\ninterface PlanCategoryFormProps {\n action: 'create' | 'update',\n category: PlanCategory,\n onSuccess: (message: string) => void,\n onError: (message: string) => void\n}\n\n/**\n * Form to create/edit a plan category\n */\nconst PlanCategoryForm: React.FC = ({ action, category, onSuccess, onError }) => {\n const { t } = useTranslation('admin');\n\n const { register, control, handleSubmit } = useForm({ defaultValues: { ...category } });\n /**\n * The action has been confirmed by the user.\n * Push the created/updated plan-category to the API.\n */\n const onSubmit: SubmitHandler = (data: PlanCategory) => {\n switch (action) {\n case 'create':\n PlanCategoryAPI.create(data).then(() => {\n onSuccess(t('app.admin.plan_category_form.create.success'));\n }).catch((error) => {\n onError(t('app.admin.plan_category_form.create.error') + error);\n });\n break;\n case 'update':\n PlanCategoryAPI.update(data).then(() => {\n onSuccess(t('app.admin.plan_category_form.update.success'));\n }).catch((error) => {\n onError(t('app.admin.plan_category_form.update.error') + error);\n });\n break;\n }\n };\n\n return (\n
    \n \n\n \n\n \n \n {t('app.admin.plan_category_form.info')}\n \n {t(`app.admin.plan_category_form.${action}.cta`)}\n \n );\n};\n\nconst PlanCategoryFormWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport { PlanCategoryFormWrapper as PlanCategoryForm };\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport moment from 'moment';\nimport _ from 'lodash';\nimport { Plan } from '../../models/plan';\nimport { User } from '../../models/user';\nimport { Loader } from '../base/loader';\nimport '../../lib/i18n';\nimport FormatLib from '../../lib/format';\n\ninterface PlanCardProps {\n plan: Plan,\n userId?: number,\n subscribedPlanId?: number,\n operator: User,\n isSelected: boolean,\n canSelectPlan: boolean,\n onSelectPlan: (plan: Plan) => void,\n onLoginRequested: () => void,\n}\n\n/**\n * This component is a \"card\" (visually), publicly presenting the details of a plan and allowing a user to subscribe.\n */\nconst PlanCard: React.FC = ({ plan, userId, subscribedPlanId, operator, onSelectPlan, isSelected, onLoginRequested, canSelectPlan }) => {\n const { t } = useTranslation('public');\n /**\n * Return the formatted localized amount of the given plan (eg. 20.5 => \"20,50 €\")\n */\n const amount = () : string => {\n return FormatLib.price(plan.amount);\n };\n /**\n * Return the formatted localized amount, divided by the number of months (eg. 120 => \"10,00 € / month\")\n */\n const monthlyAmount = (): string => {\n const monthly = plan.amount / moment.duration(plan.interval_count, plan.interval).asMonths();\n return FormatLib.price(monthly);\n };\n /**\n * Return the formatted localized duration of te given plan (eg. Month/3 => \"3 mois\")\n */\n const duration = (): string => {\n return moment.duration(plan.interval_count, plan.interval).humanize();\n };\n /**\n * Check if no users are currently logged-in\n */\n const mustLogin = (): boolean => {\n return _.isNil(operator);\n };\n /**\n * Check if the user can subscribe to the current plan, for himself\n */\n const canSubscribeForMe = (): boolean => {\n return operator?.role === 'member' || (operator?.role === 'manager' && userId === operator?.id);\n };\n /**\n * Check if the user can subscribe to the current plan, for someone else\n */\n const canSubscribeForOther = (): boolean => {\n return operator?.role === 'admin' || (operator?.role === 'manager' && userId !== operator?.id);\n };\n /**\n * Check it the user has subscribed to this plan or not\n */\n const hasSubscribedToThisPlan = (): boolean => {\n return subscribedPlanId === plan.id;\n };\n /**\n * Check if the plan has an attached file\n */\n const hasAttachment = (): boolean => {\n return !!plan.plan_file_url;\n };\n /**\n * Check if the plan has a description\n */\n const hasDescription = (): boolean => {\n return !!plan.description;\n };\n /**\n * Check if the plan is allowing a monthly payment schedule\n */\n const canBeScheduled = (): boolean => {\n return plan.monthly_payment;\n };\n /**\n * Callback triggered when the user select the plan\n */\n const handleSelectPlan = (): void => {\n if (canSelectPlan) {\n onSelectPlan(plan);\n }\n };\n /**\n * Callback triggered when a visitor (not logged-in user) select a plan\n */\n const handleLoginRequest = (): void => {\n onLoginRequested();\n };\n return (\n
    \n

    {plan.base_name}

    \n
    \n {canBeScheduled() &&
    \n
    \n
    {t('app.public.plan_card.AMOUNT_per_month', { AMOUNT: monthlyAmount() })}
    \n {duration()}\n
    \n
    }\n {!canBeScheduled() &&
    \n
    \n
    {amount()}
    \n {duration()}\n
    \n
    }\n
    \n
    \n {hasDescription() &&
    }\n {hasAttachment() && { t('app.public.plan_card.more_information') }}\n {mustLogin() &&
    \n \n
    }\n {canSubscribeForMe() &&
    \n {!hasSubscribedToThisPlan() && }\n {hasSubscribedToThisPlan() && }\n
    }\n {canSubscribeForOther() &&
    \n \n
    }\n
    \n
    \n );\n};\n\nconst PlanCardWrapper: React.FC = ({ plan, userId, subscribedPlanId, operator, onSelectPlan, isSelected, onLoginRequested, canSelectPlan }) => {\n return (\n \n \n \n );\n};\n\nexport { PlanCardWrapper as PlanCard };\n","import React, { useEffect, useState } from 'react';\nimport Select from 'react-select';\nimport { useTranslation } from 'react-i18next';\nimport { Group } from '../../models/group';\nimport { User } from '../../models/user';\nimport PlanAPI from '../../api/plan';\nimport { PlansDuration } from '../../models/plan';\nimport { SelectOption } from '../../models/select';\n\ninterface PlansFilterProps {\n user?: User,\n groups: Array,\n onGroupSelected: (groupId: number) => void,\n onError: (message: string) => void,\n onDurationSelected: (plansIds: Array) => void,\n}\n\n/**\n * Allows filtering on plans list\n */\nexport const PlansFilter: React.FC = ({ user, groups, onGroupSelected, onError, onDurationSelected }) => {\n const { t } = useTranslation('public');\n\n const [durations, setDurations] = useState>(null);\n\n // get the plans durations on component load\n useEffect(() => {\n PlanAPI.durations().then(data => {\n setDurations(data);\n }).catch(error => onError(error));\n }, []);\n\n /**\n * Convert all groups to the react-select format\n */\n const buildGroupOptions = (): Array> => {\n return groups.filter(g => !g.disabled).map(g => {\n return { value: g.id, label: g.name };\n });\n };\n\n /**\n * Convert all durations to the react-select format\n */\n const buildDurationOptions = (): Array> => {\n const options = durations.map((d, index) => {\n return { value: index, label: d.name };\n });\n options.unshift({ value: null, label: t('app.public.plans_filter.all_durations') });\n return options;\n };\n\n /**\n * Callback triggered when the user selects a group in the dropdown list\n */\n const handleGroupSelected = (option: SelectOption): void => {\n onGroupSelected(option.value);\n };\n\n /**\n * Callback triggered when the user selects a duration in the dropdown list\n */\n const handleDurationSelected = (option: SelectOption): void => {\n onDurationSelected(durations[option.value]?.plans_ids);\n };\n\n return (\n
    \n {!user &&
    \n \n \n
    }\n
    \n );\n};\n","import React, { ReactNode, useEffect, useState } from 'react';\nimport _ from 'lodash';\nimport PlanAPI from '../../api/plan';\nimport { Plan } from '../../models/plan';\nimport { PlanCategory } from '../../models/plan-category';\nimport PlanCategoryAPI from '../../api/plan-category';\nimport { User } from '../../models/user';\nimport { Group } from '../../models/group';\nimport GroupAPI from '../../api/group';\nimport { PlanCard } from './plan-card';\nimport { Loader } from '../base/loader';\nimport { react2angular } from 'react2angular';\nimport { IApplication } from '../../models/application';\nimport { PlansFilter } from './plans-filter';\n\ndeclare const Application: IApplication;\n\ninterface PlansListProps {\n onError: (message: string) => void,\n onPlanSelection: (plan: Plan) => void,\n onLoginRequest: () => void,\n operator?: User,\n customer?: User,\n subscribedPlanId?: number,\n canSelectPlan: boolean,\n}\n\n// A list of plans, organized by group ID - then organized by plan-category ID (or NaN if the plan has no category)\ntype PlansTree = Map>>;\n\n/**\n * This component display an organized list of plans to allow the end-user to select one and subscribe online\n */\nexport const PlansList: React.FC = ({ onError, onPlanSelection, onLoginRequest, operator, customer, subscribedPlanId, canSelectPlan }) => {\n // all plans\n const [plans, setPlans] = useState(null);\n // all plan-categories, ordered by weight\n const [planCategories, setPlanCategories] = useState>(null);\n // all groups\n const [groups, setGroups] = useState>(null);\n // currently selected plan\n const [selectedPlan, setSelectedPlan] = useState(null);\n // filtering shown plans by only one group\n const [groupFilter, setGroupFilter] = useState(null);\n // filtering shown plans by ids\n const [plansFilter, setPlansFilter] = useState>(null);\n\n // fetch data on component mounted\n useEffect(() => {\n PlanCategoryAPI.index()\n .then(data => setPlanCategories(data))\n .catch(error => onError(error));\n GroupAPI.index()\n .then(groupsData => {\n setGroups(groupsData);\n PlanAPI.index()\n .then(data => setPlans(sortPlans(data, groupsData)))\n .catch(error => onError(error));\n })\n .catch(error => onError(error));\n }, []);\n\n // reset the selected plan when the user changes\n useEffect(() => {\n setSelectedPlan(null);\n setGroupFilter(null);\n }, [customer, operator]);\n\n /**\n * Group a flat array of plans and return a collection of the same plans, grouped by the given property\n */\n const groupBy = (plans: Array, criteria: string): Map> => {\n const grouped = _.groupBy(plans, criteria);\n\n const map = new Map>();\n for (const criteriaId in grouped) {\n if (Object.prototype.hasOwnProperty.call(grouped, criteriaId)) {\n const enabled = grouped[criteriaId].filter(plan => !plan.disabled);\n // null ids will be converted to NaN\n map.set(Number(criteriaId), enabled);\n }\n }\n return map;\n };\n\n /**\n * Sort the plans, by group and by category and return the corresponding map\n */\n const sortPlans = (plans: Array, groups: Array): PlansTree => {\n const byGroup = groupBy(plans, 'group_id');\n\n const res = new Map>>();\n for (const [groupId, plansByGroup] of byGroup) {\n const group = groups.find(g => g.id === groupId);\n if (group && !group.disabled) {\n res.set(groupId, groupBy(plansByGroup, 'plan_category_id'));\n }\n }\n return res;\n };\n\n /**\n * Filter the plans to display, depending on the connected/selected user and on the selected group filter (if any)\n */\n const filteredPlans = (): PlansTree => {\n if (_.isEmpty(customer) && !groupFilter) return plans;\n if (groupFilter) return new Map([[groupFilter, plans.get(groupFilter)]]);\n\n return new Map([[customer.group_id, plans.get(customer.group_id)]]);\n };\n\n /**\n * When called with a group ID, returns the name of the requested group\n */\n const groupName = (groupId: number): string => {\n return groups.find(g => g.id === groupId)?.name;\n };\n\n /**\n * When called with a category ID, returns the requested plan-category\n */\n const findCategory = (categoryId: number): PlanCategory => {\n return planCategories.find(c => c.id === categoryId);\n };\n\n /**\n * Check if the currently selected plan matched the provided one\n */\n const isSelectedPlan = (plan: Plan): boolean => {\n return (plan === selectedPlan);\n };\n\n /**\n * Callback for sorting plans by weight\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort\n */\n const comparePlans = (plan1: Plan, plan2: Plan): number => {\n return (plan2.ui_weight - plan1.ui_weight);\n };\n\n /**\n * Callback for sorting categories by weight\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort\n */\n const compareCategories = (category1: [number, Array], category2: [number, Array]): number => {\n if (isNaN(category1[0])) return -1;\n if (isNaN(category2[0])) return 1;\n\n const categoryObject1 = planCategories.find(c => c.id === category1[0]);\n const categoryObject2 = planCategories.find(c => c.id === category2[0]);\n return (categoryObject2.weight - categoryObject1.weight);\n };\n\n /**\n * Callback triggered when the user chooses a plan to subscribe\n */\n const handlePlanSelection = (plan: Plan): void => {\n setSelectedPlan(plan);\n onPlanSelection(plan);\n };\n\n /**\n * Callback triggered when the user selects a group to filter the current list\n */\n const handleFilterByGroup = (groupId: number): void => {\n setGroupFilter(groupId);\n };\n\n /**\n * Callback triggered when the user selects a duration to filter the current list\n */\n const handleFilterByDuration = (plansIds: Array): void => {\n setPlansFilter(plansIds);\n };\n\n /**\n * Callback for filtering plans to display, depending on the filter-by-plans-ids selection\n * @see https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Array/filter\n */\n const filterPlan = (plan: Plan): boolean => {\n if (!plansFilter) return true;\n\n return plansFilter.includes(plan.id);\n };\n\n /**\n * Render the provided list of categories, with each associated plans\n */\n const renderPlansByCategory = (plans: Map>): ReactNode => {\n if (!plans) {\n return null;\n }\n return (\n
    \n {Array.from(plans).sort(compareCategories).map(([categoryId, plansByCategory]) => {\n const category = findCategory(categoryId);\n const categoryPlans = plansByCategory.filter(filterPlan);\n const isShown = !!categoryId && categoryPlans.length > 0;\n return (\n
    \n {isShown &&

    { category.name }

    }\n {isShown &&

    }\n {renderPlans(categoryPlans)}\n

    \n );\n })}\n
    \n );\n };\n\n /**\n * Render the provided list of plans, ordered by ui_weight.\n */\n const renderPlans = (categoryPlans: Array): ReactNode => {\n return (\n
    \n {categoryPlans.length > 0 && categoryPlans.sort(comparePlans).map(plan => (\n \n ))}\n
    \n );\n };\n\n return (\n
    \n {groups && }\n {plans && Array.from(filteredPlans()).map(([groupId, plansByGroup]) => {\n return (\n
    \n {plansByGroup?.size > 0 &&

    { groupName(groupId) }

    }\n {plansByGroup && renderPlansByCategory(plansByGroup)}\n
    \n );\n })}\n
    \n );\n};\n\nconst PlansListWrapper: React.FC = ({ customer, onError, onPlanSelection, onLoginRequest, operator, subscribedPlanId, canSelectPlan }) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('plansList', react2angular(PlansListWrapper, ['customer', 'onError', 'onPlanSelection', 'onLoginRequest', 'operator', 'subscribedPlanId', 'canSelectPlan']));\n","import apiClient from './clients/api-client';\nimport { UserPack, UserPackIndexFilter } from '../models/user-pack';\nimport { AxiosResponse } from 'axios';\nimport ApiLib from '../lib/api';\n\nexport default class UserPackAPI {\n static async index (filters: UserPackIndexFilter): Promise> {\n const res: AxiosResponse> = await apiClient.get(`/api/user_packs${ApiLib.filtersToQuery(filters)}`);\n return res?.data;\n }\n}\n","import React, { useEffect, useState } from 'react';\nimport _ from 'lodash';\nimport { Machine } from '../../models/machine';\nimport { User } from '../../models/user';\nimport { UserPack } from '../../models/user-pack';\nimport UserPackAPI from '../../api/user-pack';\nimport SettingAPI from '../../api/setting';\nimport { FabButton } from '../base/fab-button';\nimport { useTranslation } from 'react-i18next';\nimport { ProposePacksModal } from './propose-packs-modal';\nimport { Loader } from '../base/loader';\nimport { react2angular } from 'react2angular';\nimport { IApplication } from '../../models/application';\nimport { PrepaidPack } from '../../models/prepaid-pack';\nimport PrepaidPackAPI from '../../api/prepaid-pack';\nimport { FabAlert } from '../base/fab-alert';\n\ndeclare const Application: IApplication;\n\ntype PackableItem = Machine;\n\ninterface PacksSummaryProps {\n item: PackableItem,\n itemType: 'Machine',\n customer?: User,\n operator: User,\n onError: (message: string) => void,\n onSuccess: (message: string) => void,\n refresh?: Promise\n}\n\n/**\n * Display a short summary of the prepaid-packs already bought by the provider customer, for the given item.\n * May also allows members to buy directly some new prepaid-packs.\n */\nconst PacksSummary: React.FC = ({ item, itemType, customer, operator, onError, onSuccess, refresh }) => {\n const { t } = useTranslation('logged');\n\n const [packs, setPacks] = useState>(null);\n const [userPacks, setUserPacks] = useState>(null);\n const [threshold, setThreshold] = useState(null);\n const [packsModal, setPacksModal] = useState(false);\n const [isPackOnlyForSubscription, setIsPackOnlyForSubscription] = useState(true);\n\n useEffect(() => {\n SettingAPI.get('renew_pack_threshold')\n .then(data => setThreshold(parseFloat(data.value)))\n .catch(error => onError(error));\n SettingAPI.get('pack_only_for_subscription')\n .then(data => setIsPackOnlyForSubscription(data.value === 'true'))\n .catch(error => onError(error));\n }, []);\n\n useEffect(() => {\n getUserPacksData();\n }, [customer, item, itemType]);\n\n useEffect(() => {\n if (refresh instanceof Promise) {\n refresh.then(getUserPacksData);\n }\n }, [refresh]);\n\n /**\n * Fetch the user packs data from the API\n */\n const getUserPacksData = (): void => {\n if (_.isEmpty(customer)) return;\n\n UserPackAPI.index({ user_id: customer.id, priceable_type: itemType, priceable_id: item.id })\n .then(data => setUserPacks(data))\n .catch(error => onError(error));\n PrepaidPackAPI.index({ priceable_id: item.id, priceable_type: itemType, group_id: customer.group_id, disabled: false })\n .then(data => setPacks(data))\n .catch(error => onError(error));\n };\n\n /**\n * Total of minutes used by the customer\n */\n const totalUsed = (): number => {\n if (!userPacks) return 0;\n\n return userPacks.map(up => up.minutes_used).reduce((acc, curr) => acc + curr, 0);\n };\n\n /**\n * Total of minutes available is the packs bought by the customer\n */\n const totalAvailable = (): number => {\n if (!userPacks) return 0;\n\n return userPacks.map(up => up.prepaid_pack.minutes).reduce((acc, curr) => acc + curr, 0);\n };\n\n /**\n * Total prepaid hours remaining for the current customer\n */\n const totalHours = (): number => {\n return (totalAvailable() - totalUsed()) / 60;\n };\n\n /**\n * Do we need to display the \"buy new pack\" button?\n */\n const shouldDisplayButton = (): boolean => {\n if (!packs?.length) return false;\n\n if (threshold < 1) {\n return totalAvailable() - totalUsed() <= totalAvailable() * threshold;\n }\n\n return totalAvailable() - totalUsed() <= threshold * 60;\n };\n\n /**\n * Open/closes the prepaid-pack buying modal\n */\n const togglePacksModal = (): void => {\n setPacksModal(!packsModal);\n };\n\n /**\n * Callback triggered when the customer has successfully bought a prepaid-pack\n */\n const handlePackBoughtSuccess = (message: string): void => {\n onSuccess(message);\n togglePacksModal();\n UserPackAPI.index({ user_id: customer.id, priceable_type: itemType, priceable_id: item.id })\n .then(data => setUserPacks(data))\n .catch(error => onError(error));\n };\n\n // prevent component rendering if no customer selected\n if (_.isEmpty(customer)) return
    ;\n // prevent component rendering if ths customer have no packs and there are no packs available\n if (totalHours() === 0 && packs?.length === 0) return
    ;\n // render remaining hours and a warning if customer has not any subscription if admin active pack only for subscription option\n if (totalHours() > 0) {\n return (\n
    \n

    {t('app.logged.packs_summary.prepaid_hours')}

    \n
    \n \n {t('app.logged.packs_summary.remaining_HOURS', { HOURS: totalHours(), ITEM: itemType })}\n {isPackOnlyForSubscription && !customer.subscribed_plan &&\n \n {t('app.logged.packs_summary.unable_to_use_pack_for_subsription_is_expired')}\n \n }\n \n
    \n
    \n );\n }\n // prevent component rendering buy pack button if customer has not any subscription if admin active pack only for subscription option\n if (isPackOnlyForSubscription && !customer.subscribed_plan) return
    ;\n\n return (\n
    \n

    {t('app.logged.packs_summary.prepaid_hours')}

    \n
    \n \n {totalHours() === 0 && t('app.logged.packs_summary.no_hours', { ITEM: itemType })}\n \n {shouldDisplayButton() &&
    \n }>\n {t('app.logged.packs_summary.buy_a_new_pack')}\n \n \n
    }\n
    \n
    \n );\n};\n\nconst PacksSummaryWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport { PacksSummaryWrapper as PacksSummary };\n\nApplication.Components.component('packsSummary', react2angular(PacksSummaryWrapper, ['item', 'itemType', 'customer', 'operator', 'onError', 'onSuccess', 'refresh']));\n","import React, { useEffect, useState } from 'react';\nimport { Machine } from '../../models/machine';\nimport { FabModal, ModalSize } from '../base/fab-modal';\nimport PrepaidPackAPI from '../../api/prepaid-pack';\nimport { User } from '../../models/user';\nimport { PrepaidPack } from '../../models/prepaid-pack';\nimport { useTranslation } from 'react-i18next';\nimport { FabButton } from '../base/fab-button';\nimport PriceAPI from '../../api/price';\nimport { Price } from '../../models/price';\nimport { PaymentMethod, ShoppingCart } from '../../models/payment';\nimport FormatLib from '../../lib/format';\nimport { PaymentModal } from '../payment/stripe/payment-modal';\n\ntype PackableItem = Machine;\n\ninterface ProposePacksModalProps {\n isOpen: boolean,\n toggleModal: () => void,\n item: PackableItem,\n itemType: 'Machine',\n customer: User,\n operator: User,\n onError: (message: string) => void,\n onDecline: (item: PackableItem) => void,\n onSuccess: (message:string, item: PackableItem) => void,\n}\n\n/**\n * Modal dialog shown to offer prepaid-packs for purchase, to the current user.\n */\nexport const ProposePacksModal: React.FC = ({ isOpen, toggleModal, item, itemType, customer, operator, onError, onDecline, onSuccess }) => {\n const { t } = useTranslation('logged');\n\n const [price, setPrice] = useState(null);\n const [packs, setPacks] = useState>(null);\n const [cart, setCart] = useState(null);\n const [paymentModal, setPaymentModal] = useState(false);\n\n useEffect(() => {\n PrepaidPackAPI.index({ priceable_id: item.id, priceable_type: itemType, group_id: customer.group_id, disabled: false })\n .then(data => setPacks(data))\n .catch(error => onError(error));\n PriceAPI.index({ priceable_id: item.id, priceable_type: itemType, group_id: customer.group_id, plan_id: null })\n .then(data => setPrice(data[0]))\n .catch(error => onError(error));\n }, [item]);\n\n /**\n * Open/closes the payment modal\n */\n const togglePaymentModal = (): void => {\n setPaymentModal(!paymentModal);\n };\n\n /**\n * Convert the hourly-based price of the given prive, to a total price, based on the duration of the given pack\n */\n const hourlyPriceToTotal = (price: Price, pack: PrepaidPack): number => {\n const hours = pack.minutes / 60;\n return price.amount * hours;\n };\n\n /**\n * Return the number of hours, user-friendly formatted\n */\n const formatDuration = (minutes: number): string => {\n return t('app.logged.propose_packs_modal.pack_DURATION', { DURATION: minutes / 60 });\n };\n\n /**\n * Return a user-friendly string for the validity of the provided pack\n */\n const formatValidity = (pack: PrepaidPack): string => {\n if (!pack.validity_interval) return null;\n\n const period = t(`app.logged.propose_packs_modal.period.${pack.validity_interval}`, { COUNT: pack.validity_count });\n return t('app.logged.propose_packs_modal.validity', { COUNT: pack.validity_count, PERIODS: period });\n };\n\n /**\n * The user has declined to buy a pack\n */\n const handlePacksRefused = (): void => {\n onDecline(item);\n };\n\n /**\n * The user has accepted to buy the provided pack, process with the payment\n */\n const handleBuyPack = (pack: PrepaidPack) => {\n return (): void => {\n setCart({\n customer_id: customer.id,\n payment_method: PaymentMethod.Card,\n items: [\n { prepaid_pack: { id: pack.id } }\n ]\n });\n togglePaymentModal();\n };\n };\n\n /**\n * Callback triggered when the user has bought the pack with a successful payment\n */\n const handlePackBought = (): void => {\n onSuccess(t('app.logged.propose_packs_modal.pack_bought_success'), item);\n };\n\n /**\n * Render the given prepaid-pack\n */\n const renderPack = (pack: PrepaidPack) => {\n if (!price) return;\n\n const normalPrice = hourlyPriceToTotal(price, pack);\n return (\n
    \n {formatDuration(pack.minutes)}\n {FormatLib.price(pack.amount)}\n {pack.amount < normalPrice && {FormatLib.price(normalPrice)}}\n {formatValidity(pack)}\n }>\n {t('app.logged.propose_packs_modal.buy_this_pack')}\n \n
    \n );\n };\n\n return (\n \n

    {t('app.logged.propose_packs_modal.packs_proposed')}

    \n
    \n {packs?.map(p => renderPack(p))}\n
    \n {cart &&
    \n \n
    }\n
    \n );\n};\n","import React, { useState } from 'react';\nimport { IFablab } from '../../models/fablab';\nimport { FabInput } from '../base/fab-input';\nimport { FabButton } from '../base/fab-button';\nimport { Price } from '../../models/price';\nimport FormatLib from '../../lib/format';\n\ndeclare let Fablab: IFablab;\n\ninterface EditablePriceProps {\n price: Price,\n onSave: (price: Price) => void,\n}\n\n/**\n * Display the given price.\n * When the user clics on the price, switch to the edition mode to allow him modifying the price.\n */\nexport const EditablePrice: React.FC = ({ price, onSave }) => {\n const [edit, setEdit] = useState(false);\n const [tempPrice, setTempPrice] = useState(`${price.amount}`);\n\n /**\n * Saves the new price\n */\n const handleValidateEdit = (): void => {\n const newPrice: Price = Object.assign({}, price);\n newPrice.amount = parseFloat(tempPrice);\n onSave(newPrice);\n toggleEdit();\n };\n\n /**\n * Callback triggered when the user input a new price\n */\n const handleChangePrice = (value: string): void => {\n setTempPrice(value);\n };\n\n /**\n * Enable or disable the edit mode\n */\n const toggleEdit = (): void => {\n setEdit(!edit);\n };\n\n return (\n \n {!edit && {FormatLib.price(price.amount)}}\n {edit && \n \n } className=\"approve-button\" onClick={handleValidateEdit} />\n } className=\"cancel-button\" onClick={toggleEdit} />\n }\n \n );\n};\n","import React, { ReactNode, useState } from 'react';\nimport { PrepaidPack } from '../../../models/prepaid-pack';\nimport { useTranslation } from 'react-i18next';\nimport { FabPopover } from '../../base/fab-popover';\nimport { CreatePack } from './create-pack';\nimport PrepaidPackAPI from '../../../api/prepaid-pack';\nimport { DeletePack } from './delete-pack';\nimport { EditPack } from './edit-pack';\nimport FormatLib from '../../../lib/format';\n\ninterface ConfigurePacksButtonProps {\n packsData: Array,\n onError: (message: string) => void,\n onSuccess: (message: string) => void,\n groupId: number,\n priceableId: number,\n priceableType: string,\n}\n\n/**\n * This component is a button that shows the list of prepaid-packs when moving the mouse over it.\n * It also triggers modal dialogs to configure (add/delete/edit/remove) prepaid-packs.\n */\nexport const ConfigurePacksButton: React.FC = ({ packsData, onError, onSuccess, groupId, priceableId, priceableType }) => {\n const { t } = useTranslation('admin');\n\n const [packs, setPacks] = useState>(packsData);\n const [showList, setShowList] = useState(false);\n\n /**\n * Return the number of hours, user-friendly formatted\n */\n const formatDuration = (minutes: number): string => {\n return t('app.admin.configure_packs_button.pack_DURATION', { DURATION: minutes / 60 });\n };\n\n /**\n * Open/closes the popover listing the existing packs\n */\n const toggleShowList = (): void => {\n setShowList(!showList);\n };\n\n /**\n * Callback triggered when the PrepaidPack was successfully created/deleted/updated.\n * We refresh the list of packs for the current tooltip to display the new data.\n */\n const handleSuccess = (message: string) => {\n onSuccess(message);\n PrepaidPackAPI.index({ group_id: groupId, priceable_id: priceableId, priceable_type: priceableType })\n .then(data => setPacks(data))\n .catch(error => onError(error));\n };\n\n /**\n * Render the button used to trigger the \"new pack\" modal\n */\n const renderAddButton = (): ReactNode => {\n return ;\n };\n\n return (\n
    \n \n {showList && \n
      \n {packs?.map(p =>\n
    • \n {formatDuration(p.minutes)} - {FormatLib.price(p.amount)}\n \n \n \n \n
    • )}\n
    \n {packs?.length === 0 && {t('app.admin.configure_packs_button.no_packs')}}\n
    }\n
    \n );\n};\n","import React, { useState } from 'react';\nimport { FabModal } from '../../base/fab-modal';\nimport { PackForm } from './pack-form';\nimport { PrepaidPack } from '../../../models/prepaid-pack';\nimport PrepaidPackAPI from '../../../api/prepaid-pack';\nimport { useTranslation } from 'react-i18next';\nimport { FabAlert } from '../../base/fab-alert';\n\ninterface CreatePackProps {\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n groupId: number,\n priceableId: number,\n priceableType: string,\n}\n\n/**\n * This component shows a button.\n * When clicked, we show a modal dialog handing the process of creating a new PrepaidPack\n */\nexport const CreatePack: React.FC = ({ onSuccess, onError, groupId, priceableId, priceableType }) => {\n const { t } = useTranslation('admin');\n\n const [isOpen, setIsOpen] = useState(false);\n\n /**\n * Open/closes the \"new pack\" modal dialog\n */\n const toggleModal = (): void => {\n setIsOpen(!isOpen);\n };\n\n /**\n * Callback triggered when the user has validated the creation of the new PrepaidPack\n */\n const handleSubmit = (pack: PrepaidPack): void => {\n // set the already-known attributes of the new pack\n const newPack = Object.assign({} as PrepaidPack, pack);\n newPack.group_id = groupId;\n newPack.priceable_id = priceableId;\n newPack.priceable_type = priceableType;\n\n // create it on the API\n PrepaidPackAPI.create(newPack)\n .then(() => {\n onSuccess(t('app.admin.create_pack.pack_successfully_created'));\n toggleModal();\n })\n .catch(error => onError(error));\n };\n\n return (\n
    \n \n \n \n {t('app.admin.create_pack.new_pack_info', { TYPE: priceableType })}\n \n \n \n
    \n );\n};\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { FabButton } from '../../base/fab-button';\nimport { FabModal } from '../../base/fab-modal';\nimport { Loader } from '../../base/loader';\nimport { PrepaidPack } from '../../../models/prepaid-pack';\nimport PrepaidPackAPI from '../../../api/prepaid-pack';\n\ninterface DeletePackProps {\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n pack: PrepaidPack,\n}\n\n/**\n * This component shows a button.\n * When clicked, we show a modal dialog to ask the user for confirmation about the deletion of the provided pack.\n */\nconst DeletePack: React.FC = ({ onSuccess, onError, pack }) => {\n const { t } = useTranslation('admin');\n\n const [deletionModal, setDeletionModal] = useState(false);\n\n /**\n * Opens/closes the deletion modal\n */\n const toggleDeletionModal = (): void => {\n setDeletionModal(!deletionModal);\n };\n\n /**\n * The deletion has been confirmed by the user.\n * Call the API to trigger the deletion of the temporary set plan-category\n */\n const onDeleteConfirmed = (): void => {\n PrepaidPackAPI.destroy(pack.id).then(() => {\n onSuccess(t('app.admin.delete_pack.pack_deleted'));\n }).catch((error) => {\n onError(t('app.admin.delete_pack.unable_to_delete') + error);\n });\n toggleDeletionModal();\n };\n\n return (\n
    \n } onClick={toggleDeletionModal} />\n \n {t('app.admin.delete_pack.delete_confirmation')}\n \n
    \n );\n};\n\nconst DeletePackWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nexport { DeletePackWrapper as DeletePack };\n","import React, { useState } from 'react';\nimport { FabModal } from '../../base/fab-modal';\nimport { PackForm } from './pack-form';\nimport { PrepaidPack } from '../../../models/prepaid-pack';\nimport PrepaidPackAPI from '../../../api/prepaid-pack';\nimport { useTranslation } from 'react-i18next';\nimport { FabButton } from '../../base/fab-button';\n\ninterface EditPackProps {\n pack: PrepaidPack,\n onSuccess: (message: string) => void,\n onError: (message: string) => void\n}\n\n/**\n * This component shows a button.\n * When clicked, we show a modal dialog handing the process of creating a new PrepaidPack\n */\nexport const EditPack: React.FC = ({ pack, onSuccess, onError }) => {\n const { t } = useTranslation('admin');\n\n const [isOpen, setIsOpen] = useState(false);\n const [packData, setPackData] = useState(null);\n\n /**\n * Open/closes the \"edit pack\" modal dialog\n */\n const toggleModal = (): void => {\n setIsOpen(!isOpen);\n };\n\n /**\n * When the user clicks on the edition button, query the full data of the current pack from the API, then open te edition modal\n */\n const handleRequestEdit = (): void => {\n PrepaidPackAPI.get(pack.id)\n .then(data => {\n setPackData(data);\n toggleModal();\n })\n .catch(error => onError(error));\n };\n\n /**\n * Callback triggered when the user has validated the changes of the PrepaidPack\n */\n const handleUpdate = (pack: PrepaidPack): void => {\n PrepaidPackAPI.update(pack)\n .then(() => {\n onSuccess(t('app.admin.edit_pack.pack_successfully_updated'));\n toggleModal();\n })\n .catch(error => onError(error));\n };\n\n return (\n
    \n } onClick={handleRequestEdit} />\n \n {packData && }\n \n
    \n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { react2angular } from 'react2angular';\nimport { Loader } from '../../base/loader';\nimport { FabAlert } from '../../base/fab-alert';\nimport { HtmlTranslate } from '../../base/html-translate';\nimport MachineAPI from '../../../api/machine';\nimport GroupAPI from '../../../api/group';\nimport { Machine } from '../../../models/machine';\nimport { Group } from '../../../models/group';\nimport { IApplication } from '../../../models/application';\nimport { EditablePrice } from '../editable-price';\nimport { ConfigurePacksButton } from './configure-packs-button';\nimport PriceAPI from '../../../api/price';\nimport { Price } from '../../../models/price';\nimport PrepaidPackAPI from '../../../api/prepaid-pack';\nimport { PrepaidPack } from '../../../models/prepaid-pack';\nimport { useImmer } from 'use-immer';\nimport FormatLib from '../../../lib/format';\n\ndeclare const Application: IApplication;\n\ninterface MachinesPricingProps {\n onError: (message: string) => void,\n onSuccess: (message: string) => void,\n}\n\n/**\n * Interface to set and edit the prices of machines-hours, per group\n */\nexport const MachinesPricing: React.FC = ({ onError, onSuccess }) => {\n const { t } = useTranslation('admin');\n\n const [machines, setMachines] = useState>(null);\n const [groups, setGroups] = useState>(null);\n const [prices, updatePrices] = useImmer>(null);\n const [packs, setPacks] = useState>(null);\n\n // retrieve the initial data\n useEffect(() => {\n MachineAPI.index({ disabled: false })\n .then(data => setMachines(data))\n .catch(error => onError(error));\n GroupAPI.index({ disabled: false })\n .then(data => setGroups(data))\n .catch(error => onError(error));\n PriceAPI.index({ priceable_type: 'Machine', plan_id: null })\n .then(data => updatePrices(data))\n .catch(error => onError(error));\n PrepaidPackAPI.index()\n .then(data => setPacks(data))\n .catch(error => onError(error));\n }, []);\n\n // duration of the example slot\n const EXEMPLE_DURATION = 20;\n\n /**\n * Return the exemple price, formatted\n */\n const examplePrice = (type: 'hourly_rate' | 'final_price'): string => {\n const hourlyRate = 10;\n\n if (type === 'hourly_rate') {\n return FormatLib.price(hourlyRate);\n }\n\n const price = (hourlyRate / 60) * EXEMPLE_DURATION;\n return FormatLib.price(price);\n };\n\n /**\n * Find the price matching the given criterion\n */\n const findPriceBy = (machineId, groupId): Price => {\n return prices.find(price => price.priceable_id === machineId && price.group_id === groupId);\n };\n\n /**\n * Filter the packs matching the given criterion\n */\n const filterPacksBy = (machineId, groupId): Array => {\n return packs.filter(pack => pack.priceable_id === machineId && pack.group_id === groupId);\n };\n\n /**\n * Update the given price in the internal state\n */\n const updatePrice = (price: Price): void => {\n updatePrices(draft => {\n const index = draft.findIndex(p => p.id === price.id);\n draft[index] = price;\n return draft;\n });\n };\n\n /**\n * Callback triggered when the user has confirmed to update a price\n */\n const handleUpdatePrice = (price: Price): void => {\n PriceAPI.update(price)\n .then(() => {\n onSuccess(t('app.admin.machines_pricing.price_updated'));\n updatePrice(price);\n })\n .catch(error => onError(error));\n };\n\n return (\n
    \n \n

    \n

    \n

    {t('app.admin.machines_pricing.you_can_override')}

    \n
    \n \n \n \n \n {groups?.map(group => )}\n \n \n \n {machines?.map(machine => \n \n {groups?.map(group => )}\n )}\n \n
    {t('app.admin.machines_pricing.machines')}{group.name}
    {machine.name}\n {prices && }\n {packs && }\n
    \n
    \n );\n};\n\nconst MachinesPricingWrapper: React.FC = ({ onError, onSuccess }) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('machinesPricing', react2angular(MachinesPricingWrapper, ['onError', 'onSuccess']));\n","import React, { BaseSyntheticEvent } from 'react';\nimport Select from 'react-select';\nimport Switch from 'react-switch';\nimport { PrepaidPack } from '../../../models/prepaid-pack';\nimport { useTranslation } from 'react-i18next';\nimport { useImmer } from 'use-immer';\nimport { FabInput } from '../../base/fab-input';\nimport { IFablab } from '../../../models/fablab';\nimport { SelectOption } from '../../../models/select';\n\ndeclare let Fablab: IFablab;\n\ninterface PackFormProps {\n formId: string,\n onSubmit: (pack: PrepaidPack) => void,\n pack?: PrepaidPack,\n}\n\nconst ALL_INTERVALS = ['day', 'week', 'month', 'year'] as const;\ntype interval = typeof ALL_INTERVALS[number];\n\n/**\n * A form component to create/edit a PrepaidPack.\n * The form validation must be created elsewhere, using the attribute form={formId}.\n */\nexport const PackForm: React.FC = ({ formId, onSubmit, pack }) => {\n const [packData, updatePackData] = useImmer(pack || {} as PrepaidPack);\n\n const { t } = useTranslation('admin');\n\n /**\n * Convert all validity-intervals to the react-select format\n */\n const buildOptions = (): Array> => {\n return ALL_INTERVALS.map(i => intervalToOption(i));\n };\n\n /**\n * Convert the given validity-interval to the react-select format\n */\n const intervalToOption = (value: interval): SelectOption => {\n if (!value) return { value, label: '' };\n\n return { value, label: t(`app.admin.pack_form.intervals.${value}`, { COUNT: packData.validity_count || 0 }) };\n };\n\n /**\n * Callback triggered when the user sends the form.\n */\n const handleSubmit = (event: BaseSyntheticEvent): void => {\n event.preventDefault();\n onSubmit(packData);\n };\n\n /**\n * Callback triggered when the user inputs an amount for the current pack.\n */\n const handleUpdateAmount = (amount: string) => {\n updatePackData(draft => {\n draft.amount = parseFloat(amount);\n });\n };\n\n /**\n * Callback triggered when the user inputs a number of hours for the current pack.\n */\n const handleUpdateHours = (hours: string) => {\n updatePackData(draft => {\n draft.minutes = parseInt(hours, 10) * 60;\n });\n };\n\n /**\n * Callback triggered when the user inputs a number of periods for the current pack.\n */\n const handleUpdateValidityCount = (count: string) => {\n updatePackData(draft => {\n draft.validity_count = parseInt(count, 10);\n });\n };\n\n /**\n * Callback triggered when the user selects a type of interval for the current pack.\n */\n const handleUpdateValidityInterval = (option: SelectOption) => {\n updatePackData(draft => {\n draft.validity_interval = option.value as interval;\n });\n };\n\n /**\n * Callback triggered when the user disables the pack.\n */\n const handleUpdateDisabled = (checked: boolean) => {\n updatePackData(draft => {\n draft.disabled = checked;\n });\n };\n\n return (\n
    \n \n }\n required />\n \n }\n addOn={Fablab.intl_currency}\n required />\n \n
    \n } />\n \n \n \n \n \n \n \n \n \n
    \n )}\n \n \n \n \n \n \n \n \n \n \n );\n })}\n \n \n );\n};\n\nconst ProfileCustomFieldsListWrapper: React.FC = ({ onSuccess, onError }) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('profileCustomFieldsList', react2angular(ProfileCustomFieldsListWrapper, ['onSuccess', 'onError']));\n","import React, { useEffect, useState } from 'react';\nimport Switch from 'react-switch';\nimport _ from 'lodash';\nimport { AxiosResponse } from 'axios';\nimport { useTranslation } from 'react-i18next';\nimport { SettingName } from '../../models/setting';\nimport { IApplication } from '../../models/application';\nimport { react2angular } from 'react2angular';\nimport SettingAPI from '../../api/setting';\nimport { Loader } from '../base/loader';\nimport { FabButton } from '../base/fab-button';\n\ndeclare const Application: IApplication;\n\ninterface BooleanSettingProps {\n name: SettingName,\n label: string,\n className?: string,\n hideSave?: boolean,\n onChange?: (value: string) => void,\n onBeforeSave?: (message: string) => void,\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n}\n\n/**\n * This component allows to configure boolean value for a setting.\n */\nexport const BooleanSetting: React.FC = ({ name, label, className, hideSave, onChange, onSuccess, onError, onBeforeSave }) => {\n const { t } = useTranslation('admin');\n\n const [value, setValue] = useState(false);\n\n // on component load, we retrieve the current value of the list from the API\n useEffect(() => {\n SettingAPI.get(name)\n .then(res => {\n setValue(res.value === 'true');\n if (_.isFunction(onChange)) {\n onChange(res.value === 'true' ? 'true' : 'false');\n }\n })\n .catch(err => onError(err));\n }, []);\n\n /**\n * Save the built string to the Setting API\n */\n const updateSetting = () => {\n SettingAPI.update(name, value ? 'true' : 'false')\n .then(() => onSuccess(t('app.admin.boolean_setting.customization_of_SETTING_successfully_saved', {\n SETTING: t(`app.admin.settings.${name}`) // eslint-disable-line fabmanager/scoped-translation\n })))\n .catch(err => {\n if (err.status === 304) return;\n\n if (err.status === 423) {\n onError(t('app.admin.boolean_setting.error_SETTING_locked', {\n SETTING: t(`app.admin.settings.${name}`) // eslint-disable-line fabmanager/scoped-translation\n }));\n return;\n }\n\n console.log(err);\n onError(t('app.admin.boolean_setting.an_error_occurred_saving_the_setting'));\n });\n };\n\n /**\n * Callback triggered when the 'save' button is clicked.\n * Save the built string to the Setting API\n */\n const handleSave = () => {\n if (_.isFunction(onBeforeSave)) {\n const res = onBeforeSave({ value, name });\n if (res && _.isFunction(res.then)) {\n // res is a promise, wait for it before proceed\n res.then((success: AxiosResponse) => {\n if (success) updateSetting();\n else setValue(false);\n }, function () {\n setValue(false);\n });\n } else {\n if (res) updateSetting();\n else setValue(false);\n }\n } else {\n updateSetting();\n }\n };\n\n /**\n * Callback triggered when the 'switch' is changed.\n */\n const handleChanged = (_value: boolean) => {\n setValue(_value);\n if (_.isFunction(onChange)) {\n onChange(_value ? 'true' : 'false');\n }\n };\n\n return (\n
    \n \n \n {!hideSave && {t('app.admin.boolean_setting.save')} }\n
    \n );\n};\n\nconst BooleanSettingWrapper: React.FC = ({ onChange, onSuccess, onError, label, className, name, hideSave, onBeforeSave }) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('booleanSetting', react2angular(BooleanSettingWrapper, ['className', 'name', 'label', 'onChange', 'onSuccess', 'onError', 'onBeforeSave']));\n","import React, { BaseSyntheticEvent, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport _ from 'lodash';\nimport { SettingName } from '../../models/setting';\nimport { IApplication } from '../../models/application';\nimport { react2angular } from 'react2angular';\nimport SettingAPI from '../../api/setting';\nimport { Loader } from '../base/loader';\nimport { FabButton } from '../base/fab-button';\n\ndeclare const Application: IApplication;\n\ninterface CheckListSettingProps {\n name: SettingName,\n label: string,\n className?: string,\n hideSave?: boolean,\n defaultValue?: string,\n // availableOptions must be like this [['option1', 'label 1'], ['option2', 'label 2']]\n availableOptions: Array>,\n onChange?: (value: string) => void,\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n}\n\n/**\n * This component allows to configure multiples values for a setting, like a check list.\n * The result is stored as a string, composed of the checked values, e.g. 'option1,option2'\n */\nexport const CheckListSetting: React.FC = ({ name, label, hideSave, defaultValue, className, availableOptions, onChange, onSuccess, onError }) => {\n const { t } = useTranslation('admin');\n\n const [value, setValue] = useState(null);\n\n // on component load, we retrieve the current value of the list from the API\n useEffect(() => {\n SettingAPI.get(name)\n .then(res => {\n const value = res.value === null && defaultValue ? defaultValue : res.value;\n setValue(value);\n if (_.isFunction(onChange)) {\n onChange(value);\n }\n })\n .catch(err => onError(err));\n }, []);\n\n /**\n * Callback triggered when a checkbox is ticked or unticked.\n * This function construct the resulting string, by adding or deleting the provided option identifier.\n */\n const toggleCheckbox = (option: string) => {\n return (event: BaseSyntheticEvent) => {\n if (event.target.checked) {\n let newValue = value ? `${value},` : '';\n newValue += option;\n setValue(newValue);\n if (_.isFunction(onChange)) {\n onChange(newValue);\n }\n } else {\n const regex = new RegExp(`,?${option}`, 'g');\n const newValue = value.replace(regex, '');\n setValue(newValue);\n if (_.isFunction(onChange)) {\n onChange(newValue);\n }\n }\n };\n };\n\n /**\n * Callback triggered when the 'save' button is clicked.\n * Save the built string to the Setting API\n */\n const handleSave = () => {\n SettingAPI.update(name, value)\n .then(() => onSuccess(t('app.admin.check_list_setting.customization_of_SETTING_successfully_saved', {\n SETTING: t(`app.admin.settings.${name}`) // eslint-disable-line fabmanager/scoped-translation\n })))\n .catch(err => onError(err));\n };\n\n /**\n * Verify if the provided option is currently ticked (i.e. included in the value string)\n */\n const isChecked = (option) => {\n return value?.includes(option);\n };\n\n return (\n
    \n

    {label}

    \n {availableOptions.map(option =>
    \n \n \n
    )}\n {!hideSave && {t('app.admin.check_list_setting.save')}}\n
    \n );\n};\n\nconst CheckListSettingWrapper: React.FC = ({ availableOptions, onSuccess, onError, label, className, name, hideSave, defaultValue, onChange }) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('checkListSetting', react2angular(CheckListSettingWrapper, ['className', 'name', 'label', 'availableOptions', 'onSuccess', 'onError']));\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { SettingName } from '../../models/setting';\nimport { IApplication } from '../../models/application';\nimport { react2angular } from 'react2angular';\nimport SettingAPI from '../../api/setting';\nimport { Loader } from '../base/loader';\nimport { FabButton } from '../base/fab-button';\nimport { BooleanSetting } from './boolean-setting';\nimport { CheckListSetting } from './check-list-setting';\nimport { FabAlert } from '../base/fab-alert';\n\ndeclare const Application: IApplication;\n\ninterface UserValidationSettingProps {\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n}\n\n/**\n * This component allows an admin to configure the settings related to the user account validation.\n */\nexport const UserValidationSetting: React.FC = ({ onSuccess, onError }) => {\n const { t } = useTranslation('admin');\n\n const [userValidationRequired, setUserValidationRequired] = useState('false');\n const userValidationRequiredListDefault = ['subscription', 'machine', 'event', 'space', 'training', 'pack'];\n const [userValidationRequiredList, setUserValidationRequiredList] = useState(null);\n const userValidationRequiredOptions = userValidationRequiredListDefault.map(l => {\n return [l, t(`app.admin.settings.account.user_validation_setting.user_validation_required_list.${l}`)];\n });\n\n /**\n * Save the built string to the Setting API\n */\n const updateSetting = (name: SettingName, value: string) => {\n SettingAPI.update(name, value)\n .then(() => {\n if (name === 'user_validation_required') {\n onSuccess(t('app.admin.settings.account.user_validation_setting.customization_of_SETTING_successfully_saved', {\n SETTING: t(`app.admin.settings.account.${name}`) // eslint-disable-line fabmanager/scoped-translation\n }));\n }\n }).catch(err => {\n if (err.status === 304) return;\n\n if (err.status === 423) {\n if (name === 'user_validation_required') {\n onError(t('app.admin.settings.account.user_validation_setting.error_SETTING_locked', {\n SETTING: t(`app.admin.settings.account.${name}`) // eslint-disable-line fabmanager/scoped-translation\n }));\n }\n return;\n }\n\n console.log(err);\n onError(t('app.admin.settings.account.user_validation_setting.an_error_occurred_saving_the_setting'));\n });\n };\n\n /**\n * Callback triggered when the 'save' button is clicked.\n */\n const handleSave = () => {\n updateSetting('user_validation_required', userValidationRequired);\n if (userValidationRequiredList !== null) {\n if (userValidationRequired === 'true') {\n updateSetting('user_validation_required_list', userValidationRequiredList);\n } else {\n updateSetting('user_validation_required_list', null);\n }\n }\n };\n\n return (\n
    \n \n \n {userValidationRequired === 'true' &&\n
    \n

    {t('app.admin.settings.account.user_validation_setting.user_validation_required_list_title')}

    \n

    \n {t('app.admin.settings.account.user_validation_setting.user_validation_required_list_info')}\n

    \n \n {t('app.admin.settings.account.user_validation_setting.user_validation_required_list_other_info')}\n \n \n \n
    \n }\n {t('app.admin.settings.account.user_validation_setting.save')}\n
    \n );\n};\n\nconst UserValidationSettingWrapper: React.FC = ({ onSuccess, onError }) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('userValidationSetting', react2angular(UserValidationSettingWrapper, ['onSuccess', 'onError']));\n","import React, { useState, useReducer } from 'react';\nimport { FormState, UseFormRegister, UseFormSetValue } from 'react-hook-form';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { User } from '../../models/user';\nimport { SocialNetwork } from '../../models/social-network';\nimport Icons from '../../../../images/social-icons.svg';\nimport { FormInput } from '../form/form-input';\nimport { Trash } from 'phosphor-react';\nimport { useTranslation } from 'react-i18next';\n\ninterface EditSocialsProps {\n register: UseFormRegister,\n setValue: UseFormSetValue,\n networks: SocialNetwork[],\n formState: FormState,\n disabled: boolean|((id: string) => boolean),\n}\n\n/**\n * Allow a user to edit its personnal social networks\n */\nexport const EditSocials = ({ register, setValue, networks, formState, disabled }: EditSocialsProps) => {\n const { t } = useTranslation('shared');\n // regular expression to validate the the input fields\n const urlRegex = /^(https?:\\/\\/)([^.]+)\\.(.{2,30})(\\/.*)*\\/?$/;\n\n const initSelectedNetworks = networks.filter(el => !['', null, undefined].includes(el.url));\n const [selectedNetworks, setSelectedNetworks] = useState(initSelectedNetworks);\n\n /**\n * Callback triggered when the user adds a network, from the list of available networks, to the editable networks.\n */\n const selectNetwork = (network) => {\n setSelectedNetworks([...selectedNetworks, network]);\n };\n\n /**\n * Return a derivated state of the selected networks list, depending on the given action.\n */\n const reducer = (state, action) => {\n switch (action.type) {\n case 'delete':\n setSelectedNetworks(selectedNetworks.filter(el => el !== action.payload.network));\n setValue(action.payload.field, '');\n return state.map(el => el === action.payload.network\n ? { ...el, url: '' }\n : el);\n case 'update':\n return state.map(el => el === action.payload\n ? { ...el, url: action.payload.url }\n : el);\n default:\n return state;\n }\n };\n const [userNetworks, dispatch] = useReducer(reducer, networks);\n\n return (\n <>\n
    \n {userNetworks.map((network, index) =>\n !selectedNetworks.includes(network) && selectNetwork(network)} viewBox=\"0 0 24 24\" >\n \n \n )}\n
    \n {selectNetwork.length &&
    \n {userNetworks.map((network, index) =>\n selectedNetworks.includes(network) &&\n }\n addOn={}\n addOnAction={() => dispatch({ type: 'delete', payload: { network, field: `profile_attributes.${network.name}` } })} />\n )}\n
    }\n \n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { FormInput } from '../form/form-input';\nimport SettingAPI from '../../api/setting';\nimport { supportedNetworks } from '../../models/social-network';\nimport { IApplication } from '../../models/application';\nimport { Loader } from '../base/loader';\nimport { react2angular } from 'react2angular';\nimport { SettingName } from '../../models/setting';\nimport Icons from '../../../../images/social-icons.svg';\nimport { Trash } from 'phosphor-react';\nimport { useTranslation } from 'react-i18next';\nimport { FabButton } from '../base/fab-button';\n\ndeclare const Application: IApplication;\n\ninterface FabSocialsProps {\n show: boolean,\n onError: (message: string) => void,\n onSuccess: (message: string) => void\n}\n\n/**\n * Allows the Fablab to edit its corporate social networks, or to display them read-only to the end users (show=true)\n */\nexport const FabSocials: React.FC = ({ show = false, onError, onSuccess }) => {\n const { t } = useTranslation('shared');\n // regular expression to validate the input fields\n const urlRegex = /^(https?:\\/\\/)([\\da-z.-]+)\\.([-a-z\\d.]{2,30})([/\\w .-]*)*\\/?$/;\n\n const { handleSubmit, register, setValue, formState } = useForm();\n\n const settingsList = supportedNetworks.map(el => el as SettingName);\n\n const [fabNetworks, setFabNetworks] = useState([]);\n const [selectedNetworks, setSelectedNetworks] = useState([]);\n\n useEffect(() => {\n SettingAPI.query(settingsList).then(res => {\n setFabNetworks(Array.from(res, ([name, url]) => ({ name, url })));\n }).catch(error => console.error(error));\n }, []);\n\n useEffect(() => {\n setSelectedNetworks(fabNetworks.filter(el => el.url !== ''));\n }, [fabNetworks]);\n\n /**\n * Callback triggered when the social networks are saved\n */\n const onSubmit = (data) => {\n const updatedNetworks = new Map();\n Object.keys(data).forEach(key => updatedNetworks.set(key as SettingName, data[key]));\n SettingAPI.bulkUpdate(updatedNetworks).then(res => {\n const errorResults = Array.from(res.values()).filter(item => !item.status);\n if (errorResults.length > 0) {\n onError(t('app.shared.fab_socials.networks_update_error'));\n } else {\n onSuccess(t('app.shared.fab_socials.networks_update_success'));\n }\n });\n };\n\n /**\n * Callback triggered when the user adds a network, from the list of available networks, to the editable networks.\n */\n const selectNetwork = (network) => {\n setSelectedNetworks([...selectedNetworks, network]);\n };\n\n /**\n * Callback triggered when the user removes a network, from the list of editables networks, add put it back to the\n * list of avaiable networks.\n */\n const remove = (network) => {\n setSelectedNetworks(selectedNetworks.filter(el => el !== network));\n setValue(network.name, '');\n };\n\n return (\n
    {show\n ? (selectedNetworks.length > 0) && <>\n

    {t('app.shared.fab_socials.follow_us')}

    \n
    \n {fabNetworks.map((network, index) =>\n selectedNetworks.includes(network) &&\n \n \n \n )}\n
    \n \n\n : \n
    \n {fabNetworks.map((network, index) =>\n !selectedNetworks.includes(network) &&\n selectNetwork(network)}>\n \n \n )}\n
    \n {selectNetwork.length &&
    \n {fabNetworks.map((network, index) =>\n selectedNetworks.includes(network) &&\n }\n addOn={}\n addOnAction={() => remove(network)} />\n )}\n
    }\n \n {t('app.shared.fab_socials.save')}\n \n \n }
    \n );\n};\n\nconst FabSocialsWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\nApplication.Components.component('fabSocials', react2angular(FabSocialsWrapper, ['show', 'onError', 'onSuccess']));\n","import { PencilSimple, Trash } from 'phosphor-react';\nimport React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ProductCategory } from '../../../models/product-category';\nimport { FabButton } from '../../base/fab-button';\nimport { FabModal, ModalSize } from '../../base/fab-modal';\nimport { ProductCategoryForm } from './product-category-form';\n\ninterface ManageProductCategoryProps {\n action: 'create' | 'update' | 'delete',\n productCategories: Array,\n productCategory?: ProductCategory,\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n}\n\n/**\n * This component shows a button.\n * When clicked, we show a modal dialog allowing to fill the parameters of a product category.\n */\nexport const ManageProductCategory: React.FC = ({ productCategories, productCategory, action, onSuccess, onError }) => {\n const { t } = useTranslation('admin');\n\n // is the modal open?\n const [isOpen, setIsOpen] = useState(false);\n\n /**\n * Opens/closes the product category modal\n */\n const toggleModal = (): void => {\n setIsOpen(!isOpen);\n };\n\n /**\n * Close the modal if the form submission was successful\n */\n const handleSuccess = (message) => {\n setIsOpen(false);\n onSuccess(message);\n };\n\n /**\n * Render the appropriate button depending on the action type\n */\n const toggleBtn = () => {\n switch (action) {\n case 'create':\n return (\n \n {t('app.admin.store.manage_product_category.create')}\n \n );\n case 'update':\n return (}\n className=\"edit-btn\"\n onClick={toggleModal} />);\n case 'delete':\n return (}\n className=\"delete-btn\"\n onClick={toggleModal} />);\n }\n };\n\n return (\n
    \n { toggleBtn() }\n \n { action === 'update' &&

    {productCategory.name}

    }\n \n
    \n
    \n );\n};\n","import React from 'react';\nimport { ProductCategory } from '../../../models/product-category';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { ManageProductCategory } from './manage-product-category';\nimport { ArrowElbowDownRight, ArrowLeft, CaretDown, DotsSixVertical } from 'phosphor-react';\n\ninterface ProductCategoriesItemProps {\n productCategories: Array,\n category: ProductCategory,\n offset: 'up' | 'down' | null,\n collapsed?: boolean,\n handleCollapse?: (id: number) => void,\n status: 'child' | 'single' | 'parent',\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n}\n\n/**\n * Renders a draggable category item\n */\nexport const ProductCategoriesItem: React.FC = ({ productCategories, category, offset, collapsed, handleCollapse, status, onSuccess, onError }) => {\n const {\n attributes,\n listeners,\n setNodeRef,\n transform,\n transition,\n isDragging\n } = useSortable({ id: category.id });\n\n const style = {\n transition,\n transform: CSS.Transform.toString(transform)\n };\n\n return (\n
    \n {((isDragging && offset) || status === 'child') &&\n
    \n {(offset === 'down') && }\n {(offset === 'up') && }\n
    \n }\n
    \n
    \n {status === 'parent' &&
    \n \n
    }\n

    {category.name}

    \n \n
    \n
    \n {!isDragging &&\n
    \n \n \n
    \n }\n
    \n \n
    \n
    \n
    \n
    \n );\n};\n","import React, { useEffect } from 'react';\nimport { useImmer } from 'use-immer';\nimport { ProductCategory } from '../../../models/product-category';\nimport { DndContext, KeyboardSensor, PointerSensor, useSensor, useSensors, closestCenter, DragMoveEvent } from '@dnd-kit/core';\nimport { arrayMove, SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy } from '@dnd-kit/sortable';\nimport { restrictToWindowEdges } from '@dnd-kit/modifiers';\nimport { ProductCategoriesItem } from './product-categories-item';\n\ninterface ProductCategoriesTreeProps {\n productCategories: Array,\n onDnd: (list: Array, activeCategory: ProductCategory, position: number) => void,\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n}\n\n/**\n * This component shows a tree list of all Product's Categories\n */\nexport const ProductCategoriesTree: React.FC = ({ productCategories, onDnd, onSuccess, onError }) => {\n const [categoriesList, setCategoriesList] = useImmer(productCategories);\n const [activeData, setActiveData] = useImmer(initActiveData);\n const [extractedChildren, setExtractedChildren] = useImmer({});\n const [collapsed, setCollapsed] = useImmer([]);\n\n // Initialize state from props\n useEffect(() => {\n setCategoriesList(productCategories);\n }, [productCategories]);\n\n // @dnd-kit config\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates\n })\n );\n\n /**\n * On drag start\n * Collect dragged items' data\n * Extract children from list\n */\n const handleDragStart = ({ active }: DragMoveEvent) => {\n const activeIndex = active.data.current.sortable.index;\n const children = getChildren(active.id);\n\n setActiveData(draft => {\n draft.index = activeIndex;\n draft.category = getCategory(active.id);\n draft.status = getStatus(active.id);\n draft.children = children?.length ? children : null;\n });\n\n setExtractedChildren(draft => { draft[active.id] = children; });\n hideChildren(active.id, activeIndex);\n };\n\n /**\n * On drag move\n */\n const handleDragMove = ({ delta, active, over }: DragMoveEvent) => {\n const activeStatus = getStatus(active.id);\n if (activeStatus === 'single') {\n if (Math.ceil(delta.x) > 32 && getStatus(over.id) !== 'child') {\n setActiveData(draft => {\n return { ...draft, offset: 'down' };\n });\n } else if (Math.ceil(delta.x) < -32 && getStatus(over.id) === 'child') {\n setActiveData(draft => {\n return { ...draft, offset: 'up' };\n });\n } else {\n setActiveData(draft => {\n return { ...draft, offset: null };\n });\n }\n }\n if (activeStatus === 'child') {\n if (Math.ceil(delta.x) > 32 && getStatus(over.id) !== 'child') {\n setActiveData(draft => {\n return { ...draft, offset: 'down' };\n });\n } else if (Math.ceil(delta.x) < -32 && getStatus(over.id) === 'child') {\n setActiveData(draft => {\n return { ...draft, offset: 'up' };\n });\n } else {\n setActiveData(draft => {\n return { ...draft, offset: null };\n });\n }\n }\n };\n\n /**\n * On drag End\n * Insert children back in list\n */\n const handleDragEnd = ({ active, over }: DragMoveEvent) => {\n let newOrder = [...categoriesList];\n const currentIdsOrder = over?.data.current.sortable.items;\n let newIndex = over.data.current.sortable.index;\n let droppedItem = getCategory(active.id);\n const activeStatus = getStatus(active.id);\n const overStatus = getStatus(over.id);\n let newPosition = getCategory(over.id).position;\n\n // [A]:Single dropped over [B]:Single\n if (activeStatus === 'single' && overStatus === 'single') {\n const newIdsOrder = arrayMove(currentIdsOrder, activeData.index, newIndex);\n newOrder = newIdsOrder.map(sortedId => {\n let category = getCategory(sortedId);\n if (activeData.offset === 'down' && sortedId === active.id && activeData.index < newIndex && active.id !== over.id) {\n category = { ...category, parent_id: Number(over.id) };\n droppedItem = category;\n newPosition = 1;\n } else if (activeData.offset === 'down' && sortedId === active.id && (activeData.index > newIndex || active.id === over.id)) {\n const adopter = getPreviousAdopter(over.id);\n const siblingsLength = getChildren(adopter)?.length | 0;\n category = { ...category, parent_id: adopter };\n droppedItem = category;\n newPosition = siblingsLength + 1;\n }\n return category;\n });\n }\n\n // [A]:Child dropped over [B]:Single\n if ((activeStatus === 'child') && overStatus === 'single') {\n const newIdsOrder = arrayMove(currentIdsOrder, activeData.index, newIndex);\n newOrder = newIdsOrder.map(sortedId => {\n let category = getCategory(sortedId);\n if (activeData.offset === 'down' && sortedId === active.id && activeData.index < newIndex) {\n category = { ...category, parent_id: Number(over.id) };\n droppedItem = category;\n newPosition = 1;\n } else if (activeData.offset === 'down' && sortedId === active.id && activeData.index > newIndex) {\n category = { ...category, parent_id: getPreviousAdopter(over.id) };\n droppedItem = category;\n newPosition = getChildren(getPreviousAdopter(over.id))?.length || 1;\n } else if (sortedId === active.id) {\n category = { ...category, parent_id: null };\n droppedItem = category;\n newPosition = getCategory(over.id).position + 1;\n }\n return category;\n });\n }\n\n // [A]:Single || [A]:Child dropped over…\n if (activeStatus === 'single' || activeStatus === 'child') {\n // [B]:Parent\n if (overStatus === 'parent') {\n const newIdsOrder = arrayMove(currentIdsOrder, activeData.index, newIndex);\n if (activeData.index < newIndex) {\n newOrder = newIdsOrder.map(sortedId => {\n let category = getCategory(sortedId);\n if (sortedId === active.id) {\n category = { ...category, parent_id: Number(over.id) };\n droppedItem = category;\n newPosition = 1;\n }\n return category;\n });\n } else if (activeData.index > newIndex) {\n newOrder = newIdsOrder.map(sortedId => {\n let category = getCategory(sortedId);\n if (sortedId === active.id && !activeData.offset) {\n category = { ...category, parent_id: null };\n droppedItem = category;\n } else if (sortedId === active.id && activeData.offset === 'down') {\n category = { ...category, parent_id: getPreviousAdopter(over.id) };\n droppedItem = category;\n newPosition = getChildren(getPreviousAdopter(over.id))?.length || 1;\n }\n return category;\n });\n }\n }\n // [B]:Child\n if (overStatus === 'child') {\n if (activeData.offset === 'up') {\n const lastChildIndex = newOrder.findIndex(c => c.id === getChildren(getCategory(over.id).parent_id).pop().id);\n const newIdsOrder = arrayMove(currentIdsOrder, activeData.index, lastChildIndex);\n newOrder = newIdsOrder.map(sortedId => {\n let category = getCategory(sortedId);\n if (sortedId === active.id) {\n category = { ...category, parent_id: null };\n droppedItem = category;\n newPosition = getCategory(getCategory(over.id).parent_id).position + 1;\n }\n return category;\n });\n } else {\n const newIdsOrder = arrayMove(currentIdsOrder, activeData.index, newIndex);\n newOrder = newIdsOrder.map(sortedId => {\n let category = getCategory(sortedId);\n if (sortedId === active.id) {\n category = { ...category, parent_id: getCategory(over.id).parent_id };\n droppedItem = category;\n }\n return category;\n });\n }\n }\n }\n\n // [A]:Parent dropped over…\n if (activeStatus === 'parent') {\n // [B]:Single\n if (overStatus === 'single') {\n const newIdsOrder = arrayMove(currentIdsOrder, activeData.index, newIndex);\n newOrder = newIdsOrder.map(sortedId => getCategory(sortedId));\n }\n // [B]:Parent\n if (overStatus === 'parent') {\n if (activeData.index < newIndex) {\n newIndex = newOrder.findIndex(c => c.id === getChildren(over.id).pop().id);\n const newIdsOrder = arrayMove(currentIdsOrder, activeData.index, newIndex);\n newOrder = newIdsOrder.map(sortedId => getCategory(sortedId));\n } else {\n const newIdsOrder = arrayMove(currentIdsOrder, activeData.index, newIndex);\n newOrder = newIdsOrder.map(sortedId => getCategory(sortedId));\n }\n }\n // [B]:Child\n if (overStatus === 'child') {\n const parent = newOrder.find(c => c.id === getCategory(over.id).parent_id);\n if (activeData.index < newIndex) {\n newIndex = newOrder.findIndex(c => c.id === getChildren(parent.id).pop().id);\n const newIdsOrder = arrayMove(currentIdsOrder, activeData.index, newIndex);\n newOrder = newIdsOrder.map(sortedId => getCategory(sortedId));\n newPosition = parent.position;\n } else {\n newIndex = currentIdsOrder.indexOf(getCategory(over.id).parent_id);\n const newIdsOrder = arrayMove(currentIdsOrder, activeData.index, newIndex);\n newOrder = newIdsOrder.map(sortedId => getCategory(sortedId));\n newPosition = parent.position;\n }\n }\n // insert children back\n newOrder = showChildren(active.id, newOrder, newIndex);\n }\n\n setActiveData(initActiveData);\n onDnd(newOrder, droppedItem, newPosition);\n };\n\n /**\n * On drag cancel\n * Reset states\n */\n const handleDragCancel = ({ active }: DragMoveEvent) => {\n setCategoriesList(productCategories);\n setActiveData(initActiveData);\n setExtractedChildren({ ...extractedChildren, [active.id]: null });\n };\n\n /**\n * Get a category by its id\n */\n const getCategory = (id) => {\n return categoriesList.find(c => c.id === id);\n };\n\n /**\n * Get the children categories of a parent category by its id\n */\n const getChildren = (id) => {\n const displayedChildren = categoriesList.filter(c => c.parent_id === id);\n if (displayedChildren.length) {\n return displayedChildren;\n }\n return extractedChildren[id];\n };\n\n /**\n * Get previous category that can have children\n */\n const getPreviousAdopter = (overId) => {\n const reversedList = [...categoriesList].reverse();\n const dropIndex = reversedList.findIndex(c => c.id === overId);\n const adopter = reversedList.find((c, index) => index > dropIndex && !c.parent_id)?.id;\n return adopter || null;\n };\n\n /**\n * Get category's status by its id\n * child | single | parent\n */\n const getStatus = (id) => {\n const c = getCategory(id);\n return !c.parent_id\n ? getChildren(id)?.length\n ? 'parent'\n : 'single'\n : 'child';\n };\n\n /**\n * Extract children from the list by their parent's id\n */\n const hideChildren = (parentId, parentIndex) => {\n const children = getChildren(parentId);\n if (children?.length) {\n const shortenList = [...categoriesList];\n shortenList.splice(parentIndex + 1, children.length);\n setCategoriesList(shortenList);\n }\n };\n\n /**\n * Insert children back in the list by their parent's id\n */\n const showChildren = (parentId, currentList, insertIndex) => {\n if (extractedChildren[parentId]?.length) {\n currentList.splice(insertIndex + 1, 0, ...extractedChildren[parentId]);\n setExtractedChildren({ ...extractedChildren, [parentId]: null });\n }\n return currentList;\n };\n\n /**\n * Toggle parent category by hiding/showing its children\n */\n const handleCollapse = (id) => {\n const i = collapsed.findIndex(el => el === id);\n if (i === -1) {\n setCollapsed([...collapsed, id]);\n } else {\n const copy = [...collapsed];\n copy.splice(i, 1);\n setCollapsed(copy);\n }\n };\n\n return (\n \n \n
    \n {categoriesList\n .map((category) => (\n \n ))}\n
    \n
    \n \n );\n};\n\ninterface ActiveData {\n index: number,\n category: ProductCategory,\n status: 'child' | 'single' | 'parent',\n children: ProductCategory[],\n offset: 'up' | 'down' | null\n}\nconst initActiveData: ActiveData = {\n index: null,\n category: null,\n status: null,\n children: [],\n offset: null\n};\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ProductCategory } from '../../../models/product-category';\nimport ProductCategoryAPI from '../../../api/product-category';\nimport { ManageProductCategory } from './manage-product-category';\nimport { ProductCategoriesTree } from './product-categories-tree';\nimport { FabAlert } from '../../base/fab-alert';\nimport { HtmlTranslate } from '../../base/html-translate';\nimport { IApplication } from '../../../models/application';\nimport { Loader } from '../../base/loader';\nimport { react2angular } from 'react2angular';\nimport ProductLib from '../../../lib/product';\n\ndeclare const Application: IApplication;\n\ninterface ProductCategoriesProps {\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n}\n\n/**\n * This component shows a tree list of all product categories and offer to manager them\n * by creating, deleting, modifying and reordering each product categories.\n */\nconst ProductCategories: React.FC = ({ onSuccess, onError }) => {\n const { t } = useTranslation('admin');\n\n // List of all products' categories\n const [productCategories, setProductCategories] = useState>([]);\n\n // load the categories list on component mount\n useEffect(() => {\n refreshCategories();\n }, []);\n\n /**\n * The creation/edition/deletion was successful.\n * Show the provided message and refresh the list\n */\n const handleSuccess = (message: string): void => {\n onSuccess(message);\n refreshCategories();\n };\n\n /**\n * Update state after drop\n */\n const handleDnd = (list: ProductCategory[], activeCategory: ProductCategory, position: number) => {\n setProductCategories(list);\n ProductCategoryAPI\n .update(activeCategory)\n .then(c => {\n ProductCategoryAPI\n .updatePosition(c, position)\n .then(refreshCategories)\n .catch(error => onError(error));\n })\n .catch(error => onError(error));\n };\n\n /**\n * Refresh the list of categories\n */\n const refreshCategories = () => {\n ProductCategoryAPI.index().then(data => {\n setProductCategories(ProductLib.sortCategories(data));\n }).catch((error) => onError(error));\n };\n\n return (\n
    \n
    \n

    {t('app.admin.store.product_categories.title')}

    \n
    \n \n
    \n
    \n \n \n \n \n
    \n );\n};\n\nconst ProductCategoriesWrapper: React.FC = ({ onSuccess, onError }) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('productCategories', react2angular(ProductCategoriesWrapper, ['onSuccess', 'onError']));\n","import React, { useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useForm, SubmitHandler } from 'react-hook-form';\nimport slugify from 'slugify';\nimport { FormInput } from '../../form/form-input';\nimport { FormSelect } from '../../form/form-select';\nimport { ProductCategory } from '../../../models/product-category';\nimport { FabButton } from '../../base/fab-button';\nimport ProductCategoryAPI from '../../../api/product-category';\nimport { HtmlTranslate } from '../../base/html-translate';\nimport { SelectOption } from '../../../models/select';\n\ninterface ProductCategoryFormProps {\n action: 'create' | 'update' | 'delete',\n productCategories: Array,\n productCategory?: ProductCategory,\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n}\n\n/**\n * Form to create/edit/delete a product category\n */\nexport const ProductCategoryForm: React.FC = ({ action, productCategories, productCategory, onSuccess, onError }) => {\n const { t } = useTranslation('admin');\n\n const { register, watch, setValue, control, handleSubmit, formState } = useForm({ defaultValues: { ...productCategory } });\n\n // filter all first level product categorie\n let parents = productCategories.filter(c => !c.parent_id);\n if (action === 'update') {\n parents = parents.filter(c => c.id !== productCategory.id);\n }\n\n /**\n * Convert all parents to the react-select format\n */\n const buildOptions = (): Array> => {\n const options = parents.map(t => {\n return { value: t.id, label: t.name };\n });\n if (action === 'update') {\n options.unshift({ value: null, label: t('app.admin.store.product_category_form.no_parent') });\n }\n return options;\n };\n\n // Create slug from category's name\n useEffect(() => {\n const subscription = watch((value, { name }) => {\n if (name === 'name') {\n const _slug = slugify(value.name, { lower: true, strict: true });\n setValue('slug', _slug);\n }\n });\n return () => subscription.unsubscribe();\n }, [watch]);\n // Check slug pattern\n // Only lowercase alphanumeric groups of characters separated by an hyphen\n const slugPattern = /^[a-z\\d]+(?:-[a-z\\d]+)*$/g;\n\n // Form submit\n const onSubmit: SubmitHandler = (category: ProductCategory) => {\n switch (action) {\n case 'create':\n ProductCategoryAPI.create(category).then(() => {\n onSuccess(t('app.admin.store.product_category_form.create.success'));\n }).catch((error) => {\n onError(t('app.admin.store.product_category_form.create.error') + error);\n });\n break;\n case 'update':\n ProductCategoryAPI.update(category).then(() => {\n onSuccess(t('app.admin.store.product_category_form.update.success'));\n }).catch((error) => {\n onError(t('app.admin.store.product_category_form.update.error') + error);\n });\n break;\n case 'delete':\n ProductCategoryAPI.destroy(category.id).then(() => {\n onSuccess(t('app.admin.store.product_category_form.delete.success'));\n }).catch((error) => {\n onError(t('app.admin.store.product_category_form.delete.error') + error);\n });\n break;\n }\n };\n\n return (\n
    \n { action === 'delete'\n ? <>\n \n {t('app.admin.store.product_category_form.delete.save')}\n \n : <>\n \n \n \n {t('app.admin.store.product_category_form.save')}\n \n }\n \n );\n};\n","import React from 'react';\nimport { SubmitHandler, useForm } from 'react-hook-form';\nimport { FormInput } from '../form/form-input';\nimport { FormSwitch } from '../form/form-switch';\nimport { useTranslation } from 'react-i18next';\nimport { FabModal, ModalSize } from '../base/fab-modal';\nimport { Product } from '../../models/product';\nimport ProductAPI from '../../api/product';\n\ninterface CloneProductModalProps {\n isOpen: boolean,\n toggleModal: () => void,\n onSuccess: (product: Product) => void,\n onError: (message: string) => void,\n product: Product,\n}\n\n/**\n * Modal dialog to clone a product\n */\nexport const CloneProductModal: React.FC = ({ isOpen, toggleModal, onSuccess, onError, product }) => {\n const { t } = useTranslation('admin');\n const { handleSubmit, register, control, formState, reset } = useForm({\n defaultValues: {\n name: product.name,\n sku: product.sku,\n is_active: false\n }\n });\n\n /**\n * Call product clone api\n */\n const handleClone: SubmitHandler = (data: Product) => {\n ProductAPI.clone(product, data).then((res) => {\n reset(res);\n onSuccess(res);\n }).catch(onError);\n };\n\n return (\n \n
    \n \n \n {product.is_active &&\n \n }\n \n
    \n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { react2angular } from 'react2angular';\nimport { Loader } from '../base/loader';\nimport { IApplication } from '../../models/application';\nimport { ProductForm } from './product-form';\nimport { Product } from '../../models/product';\nimport ProductAPI from '../../api/product';\nimport { UIRouter } from '@uirouter/angularjs';\n\ndeclare const Application: IApplication;\n\ninterface EditProductProps {\n productId: number,\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n uiRouter: UIRouter\n}\n\n/**\n * This component show edit product form\n */\nconst EditProduct: React.FC = ({ productId, onSuccess, onError, uiRouter }) => {\n const { t } = useTranslation('admin');\n\n const [product, setProduct] = useState();\n\n useEffect(() => {\n ProductAPI.get(productId).then(data => {\n setProduct(data);\n }).catch(onError);\n }, []);\n\n /**\n * Success to save product and return to product list\n * or\n * Success to clone product and return to new product\n */\n const saveProductSuccess = (data: Product) => {\n if (data.id === product.id) {\n onSuccess(t('app.admin.store.edit_product.successfully_updated'));\n window.location.href = '/#!/admin/store/products';\n } else {\n onSuccess(t('app.admin.store.edit_product.successfully_cloned'));\n window.location.href = `/#!/admin/store/products/${data.id}/edit`;\n }\n };\n\n if (product) {\n return (\n
    \n \n
    \n );\n }\n return null;\n};\n\nconst EditProductWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('editProduct', react2angular(EditProductWrapper, ['productId', 'onSuccess', 'onError', 'uiRouter']));\n","import React from 'react';\nimport _ from 'lodash';\nimport { ProductIndexFilter } from '../../../models/product';\nimport { X } from 'phosphor-react';\nimport { ProductCategory } from '../../../models/product-category';\nimport { Machine } from '../../../models/machine';\nimport { useTranslation } from 'react-i18next';\n\ninterface ActiveFiltersTagsProps {\n filters: ProductIndexFilter,\n displayCategories?: boolean,\n onRemoveCategory?: (category: ProductCategory) => void,\n onRemoveMachine: (machine: Machine) => void,\n onRemoveKeyword: () => void,\n onRemoveStock?: () => void,\n}\n\n/**\n * Some tags listing the currently actives filters for a product list\n */\nexport const ActiveFiltersTags: React.FC = ({ filters, displayCategories = true, onRemoveCategory, onRemoveMachine, onRemoveKeyword, onRemoveStock }) => {\n const { t } = useTranslation('shared');\n return (\n <>\n {displayCategories && filters.categories.map(c => (\n
    \n

    {c.name}

    \n \n
    \n ))}\n {filters.machines.map(m => (\n
    \n

    {m.name}

    \n \n
    \n ))}\n {filters.keywords[0] &&
    \n

    {t('app.shared.active_filters_tags.keyword', { KEYWORD: filters.keywords[0] })}

    \n \n
    }\n {(!_.isNil(filters.stock_to) && (filters.stock_to !== 0 || filters.stock_from !== 0)) &&
    \n

    {t(`app.shared.active_filters_tags.stock_${filters.stock_type}`)} [{filters.stock_from || '…'} ⟶ {filters.stock_to || '…'}]

    \n \n
    }\n \n );\n};\n","import React, { useEffect, useState } from 'react';\nimport _ from 'lodash';\nimport ProductLib from '../../../lib/product';\nimport { ProductCategory } from '../../../models/product-category';\nimport { FabButton } from '../../base/fab-button';\nimport { AccordionItem } from '../../base/accordion-item';\nimport { useTranslation } from 'react-i18next';\n\ninterface CategoriesFilterProps {\n productCategories: Array,\n onApplyFilters: (categories: Array) => void,\n currentFilters: Array,\n openDefault?: boolean,\n instantUpdate?: boolean,\n}\n\n/**\n * Component to filter the products list by categories\n */\nexport const CategoriesFilter: React.FC = ({ productCategories, onApplyFilters, currentFilters, openDefault = false, instantUpdate = false }) => {\n const { t } = useTranslation('admin');\n\n const [openedAccordion, setOpenedAccordion] = useState(openDefault);\n const [selectedCategories, setSelectedCategories] = useState(currentFilters || []);\n\n useEffect(() => {\n if (currentFilters && !_.isEqual(currentFilters, selectedCategories)) {\n setSelectedCategories(currentFilters);\n }\n }, [currentFilters]);\n\n /**\n * Open/close the accordion item\n */\n const handleAccordion = (id, state: boolean) => {\n setOpenedAccordion(state);\n };\n\n /**\n * Callback triggered when a category filter is selected or unselected.\n * This may cause other categories to be selected or unselected accordingly.\n */\n const handleSelectCategory = (currentCategory: ProductCategory, checked: boolean) => {\n const list = ProductLib.categoriesSelectionTree(productCategories, selectedCategories, currentCategory, checked ? 'add' : 'remove');\n\n setSelectedCategories(list);\n if (instantUpdate) {\n onApplyFilters(list);\n }\n };\n\n return (\n <>\n \n
    \n
    \n {productCategories.map(pc => (\n \n ))}\n
    \n onApplyFilters(selectedCategories)} className=\"is-secondary\">{t('app.admin.store.categories_filter.filter_apply')}\n
    \n
    \n \n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { FabButton } from '../../base/fab-button';\nimport { AccordionItem } from '../../base/accordion-item';\nimport { useTranslation } from 'react-i18next';\nimport _ from 'lodash';\n\ninterface KeywordFilterProps {\n onApplyFilters: (keywork: string) => void,\n currentFilters?: string,\n openDefault?: boolean,\n instantUpdate?: boolean,\n}\n\n/**\n * Component to filter the products list by keyword or product reference\n */\nexport const KeywordFilter: React.FC = ({ onApplyFilters, currentFilters = '', openDefault = false, instantUpdate = false }) => {\n const { t } = useTranslation('admin');\n\n const [openedAccordion, setOpenedAccordion] = useState(openDefault);\n const [keyword, setKeyword] = useState(currentFilters || '');\n\n useEffect(() => {\n if (!_.isEqual(currentFilters, keyword)) {\n setKeyword(currentFilters);\n }\n }, [currentFilters]);\n\n /**\n * Open/close the accordion item\n */\n const handleAccordion = (id, state: boolean) => {\n setOpenedAccordion(state);\n };\n\n /**\n * Callback triggered when the user types anything in the input\n */\n const handleKeywordTyping = (evt: React.ChangeEvent) => {\n setKeyword(evt.target.value);\n\n if (instantUpdate) {\n onApplyFilters(evt.target.value);\n }\n };\n\n return (\n <>\n \n
    \n
    \n handleKeywordTyping(event)} value={keyword} />\n onApplyFilters(keyword || undefined)} className=\"is-secondary\">{t('app.admin.store.keyword_filter.filter_apply')}\n
    \n
    \n
    \n \n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { FabButton } from '../../base/fab-button';\nimport { AccordionItem } from '../../base/accordion-item';\nimport { useTranslation } from 'react-i18next';\nimport { Machine } from '../../../models/machine';\nimport MachineAPI from '../../../api/machine';\nimport _ from 'lodash';\n\ninterface MachinesFilterProps {\n allMachines?: Array,\n onError: (message: string) => void,\n onApplyFilters: (categories: Array) => void,\n currentFilters: Array,\n openDefault?: boolean,\n instantUpdate?: boolean\n}\n\n/**\n * Component to filter the products list by associated machine\n */\nexport const MachinesFilter: React.FC = ({ allMachines, onError, onApplyFilters, currentFilters, openDefault = false, instantUpdate = false }) => {\n const { t } = useTranslation('admin');\n\n const [machines, setMachines] = useState(allMachines || []);\n const [openedAccordion, setOpenedAccordion] = useState(openDefault);\n const [selectedMachines, setSelectedMachines] = useState(currentFilters || []);\n\n useEffect(() => {\n if (_.isEmpty(allMachines)) {\n MachineAPI.index({ disabled: false }).then(data => {\n setMachines(data);\n }).catch(onError);\n }\n }, []);\n\n useEffect(() => {\n if (currentFilters && !_.isEqual(currentFilters, selectedMachines)) {\n setSelectedMachines(currentFilters);\n }\n }, [currentFilters]);\n\n /**\n * Open/close the accordion item\n */\n const handleAccordion = (id, state: boolean) => {\n setOpenedAccordion(state);\n };\n\n /**\n * Callback triggered when a machine filter is seleced or unselected.\n */\n const handleSelectMachine = (currentMachine: Machine, checked: boolean) => {\n const list = [...selectedMachines];\n checked\n ? list.push(currentMachine)\n : list.splice(list.indexOf(currentMachine), 1);\n\n setSelectedMachines(list);\n if (instantUpdate) {\n onApplyFilters(list);\n }\n };\n\n return (\n <>\n \n
    \n
    \n {machines.map(m => (\n \n ))}\n
    \n onApplyFilters(selectedMachines)} className=\"is-secondary\">{t('app.admin.store.machines_filter.filter_apply')}\n
    \n
    \n \n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { FabButton } from '../../base/fab-button';\nimport { AccordionItem } from '../../base/accordion-item';\nimport { useTranslation } from 'react-i18next';\nimport { ProductIndexFilter, StockType } from '../../../models/product';\nimport { FormSelect } from '../../form/form-select';\nimport { FormInput } from '../../form/form-input';\nimport { useForm } from 'react-hook-form';\nimport _ from 'lodash';\nimport { SelectOption } from '../../../models/select';\n\ninterface StockFilterProps {\n onApplyFilters: (filters: ProductIndexFilter) => void,\n currentFilters: ProductIndexFilter,\n openDefault?: boolean\n}\n\n/**\n * Component to filter the products list by stock\n */\nexport const StockFilter: React.FC = ({ onApplyFilters, currentFilters, openDefault = false }) => {\n const { t } = useTranslation('admin');\n\n const [openedAccordion, setOpenedAccordion] = useState(openDefault);\n\n const { register, control, handleSubmit, getValues, reset } = useForm({ defaultValues: { ...currentFilters } });\n\n useEffect(() => {\n if (currentFilters && !_.isEqual(currentFilters, getValues())) {\n reset(currentFilters);\n }\n }, [currentFilters]);\n\n /**\n * Open/close the accordion item\n */\n const handleAccordion = (id, state: boolean) => {\n setOpenedAccordion(state);\n };\n\n /**\n * Callback triggered when the user clicks on \"apply\" to apply teh current filters.\n */\n const onSubmit = (data: ProductIndexFilter) => {\n onApplyFilters(data);\n };\n\n /** Creates sorting options to the react-select format */\n const buildStockOptions = (): Array> => {\n return [\n { value: 'internal', label: t('app.admin.store.stock_filter.stock_internal') },\n { value: 'external', label: t('app.admin.store.stock_filter.stock_external') }\n ];\n };\n\n return (\n <>\n \n
    \n
    \n \n
    \n \n \n
    \n {t('app.admin.store.stock_filter.filter_apply')}\n
    \n
    \n
    \n \n );\n};\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { react2angular } from 'react2angular';\nimport { Loader } from '../base/loader';\nimport { IApplication } from '../../models/application';\nimport { ProductForm } from './product-form';\nimport { UIRouter } from '@uirouter/angularjs';\n\ndeclare const Application: IApplication;\n\ninterface NewProductProps {\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n uiRouter: UIRouter,\n}\n\n/**\n * This component show new product form\n */\nconst NewProduct: React.FC = ({ onSuccess, onError, uiRouter }) => {\n const { t } = useTranslation('admin');\n\n const product = {\n id: undefined,\n name: '',\n slug: '',\n sku: '',\n description: '',\n is_active: false,\n quantity_min: 1,\n stock: {\n internal: 0,\n external: 0\n },\n low_stock_alert: false,\n machine_ids: [],\n product_files_attributes: [],\n product_images_attributes: []\n };\n\n /**\n * Success to save product and return to product list\n */\n const saveProductSuccess = () => {\n onSuccess(t('app.admin.store.new_product.successfully_created'));\n window.location.href = '/#!/admin/store/products';\n };\n\n return (\n
    \n \n
    \n );\n};\n\nconst NewProductWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('newProduct', react2angular(NewProductWrapper, ['onSuccess', 'onError', 'uiRouter']));\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Select from 'react-select';\nimport { FabModal } from '../base/fab-modal';\nimport OrderAPI from '../../api/order';\nimport { Order } from '../../models/order';\nimport FabTextEditor from '../base/text-editor/fab-text-editor';\nimport { HtmlTranslate } from '../base/html-translate';\nimport { SelectOption } from '../../models/select';\n\ninterface OrderActionsProps {\n order: Order,\n onSuccess: (order: Order, message: string) => void,\n onError: (message: string) => void,\n}\n\n/**\n * Actions for an order\n */\nexport const OrderActions: React.FC = ({ order, onSuccess, onError }) => {\n const { t } = useTranslation('shared');\n const [currentAction, setCurrentAction] = useState>();\n const [modalIsOpen, setModalIsOpen] = useState(false);\n const [readyNote, setReadyNote] = useState('');\n\n // Styles the React-select component\n const customStyles = {\n control: base => ({\n ...base,\n width: '20ch',\n backgroundColor: 'transparent'\n }),\n indicatorSeparator: () => ({\n display: 'none'\n })\n };\n\n /**\n * Close the action confirmation modal\n */\n const closeModal = (): void => {\n setModalIsOpen(false);\n setCurrentAction(null);\n };\n\n /**\n * Creates sorting options to the react-select format\n */\n const buildOptions = (): Array> => {\n let actions = [];\n switch (order.state) {\n case 'paid':\n actions = actions.concat(['in_progress', 'ready', 'delivered', 'canceled', 'refunded']);\n break;\n case 'payment_failed':\n actions = actions.concat(['canceled']);\n break;\n case 'in_progress':\n actions = actions.concat(['ready', 'delivered', 'canceled', 'refunded']);\n break;\n case 'ready':\n actions = actions.concat(['delivered', 'canceled', 'refunded']);\n break;\n case 'canceled':\n actions = actions.concat(['refunded']);\n break;\n default:\n actions = [];\n }\n return actions.map(action => {\n return { value: action, label: t(`app.shared.store.order_actions.state.${action}`) };\n });\n };\n\n /**\n * Callback after selecting an action\n */\n const handleAction = (action: SelectOption) => {\n setCurrentAction(action);\n setModalIsOpen(true);\n };\n\n /**\n * Callback after confirm an action\n */\n const handleActionConfirmation = () => {\n OrderAPI.updateState(order, currentAction.value, readyNote).then(data => {\n onSuccess(data, t(`app.shared.store.order_actions.order_${currentAction.value}_success`));\n setCurrentAction(null);\n setModalIsOpen(false);\n }).catch((e) => {\n onError(e);\n setCurrentAction(null);\n setModalIsOpen(false);\n });\n };\n\n return (\n <>\n {buildOptions().length > 0 &&\n handleAction(option)}\n value={currentAction}\n styles={customStyles}\n />\n }\n \n \n {currentAction?.value === 'ready' &&\n \n }\n \n \n );\n};\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Order } from '../../models/order';\nimport FormatLib from '../../lib/format';\nimport { FabButton } from '../base/fab-button';\nimport { User } from '../../models/user';\nimport { FabStateLabel } from '../base/fab-state-label';\nimport OrderLib from '../../lib/order';\nimport { PlusCircle } from 'phosphor-react';\n\ninterface OrderItemProps {\n order?: Order,\n currentUser?: User\n}\n\n/**\n * List item for an order\n */\nexport const OrderItem: React.FC = ({ order, currentUser }) => {\n const { t } = useTranslation('shared');\n /**\n * Go to order page\n */\n const showOrder = (order: Order) => {\n isPrivileged()\n ? window.location.href = `/#!/admin/store/orders/${order.id}`\n : window.location.href = `/#!/dashboard/orders/${order.id}`;\n };\n\n /**\n * Check if the current operator has administrative rights or is a normal member\n */\n const isPrivileged = (): boolean => {\n return (currentUser?.role === 'admin' || currentUser?.role === 'manager');\n };\n\n return (\n
    \n
    {order.reference}
    \n \n {t(`app.shared.store.order_item.state.${OrderLib.statusText(order)}`)}\n \n {isPrivileged() &&\n
    \n {t('app.shared.store.order_item.client')}\n

    {order?.user?.name || ''}

    \n
    \n }\n
    \n {t('app.shared.store.order_item.created_at')}\n
    \n

    {FormatLib.date(order.created_at)}\n \n \n \n {t('app.shared.store.order_item.last_update')}
    \n {FormatLib.date(order.updated_at)}\n
    \n
    \n

    \n
    \n
    \n
    \n {t('app.shared.store.order_item.total')}\n

    {FormatLib.price(order.state === 'cart' ? order.total : order.paid_total)}

    \n
    \n showOrder(order)} icon={} className=\"is-black\" />\n
    \n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { useImmer } from 'use-immer';\nimport { useTranslation } from 'react-i18next';\nimport { react2angular } from 'react2angular';\nimport { Loader } from '../base/loader';\nimport { IApplication } from '../../models/application';\nimport { useForm } from 'react-hook-form';\nimport { FabButton } from '../base/fab-button';\nimport { StoreListHeader } from './store-list-header';\nimport { AccordionItem } from '../base/accordion-item';\nimport { OrderItem } from './order-item';\nimport { MemberSelect } from '../user/member-select';\nimport { User } from '../../models/user';\nimport { FormInput } from '../form/form-input';\nimport OrderAPI from '../../api/order';\nimport { Order, OrderIndexFilter, OrderSortOption } from '../../models/order';\nimport { FabPagination } from '../base/fab-pagination';\nimport { CaretDoubleUp, X } from 'phosphor-react';\nimport { ChecklistOption, SelectOption } from '../../models/select';\n\ndeclare const Application: IApplication;\n\ninterface OrdersProps {\n currentUser?: User,\n onError: (message: string) => void,\n}\n\nconst initFilters: OrderIndexFilter = {\n reference: '',\n states: [],\n page: 1,\n sort: 'created_at-desc'\n};\n\nconst FablabOrdersFilters = 'FablabOrdersFilters';\n\n/**\n * Admin list of orders\n */\nconst Orders: React.FC = ({ currentUser, onError }) => {\n const { t } = useTranslation('admin');\n\n const { register, setValue } = useForm();\n\n const [orders, setOrders] = useState>([]);\n const [filters, setFilters] = useImmer(window[FablabOrdersFilters] || initFilters);\n const [accordion, setAccordion] = useState({});\n const [filtersPanel, setFiltersPanel] = useState(true);\n const [pageCount, setPageCount] = useState(0);\n const [totalCount, setTotalCount] = useState(0);\n const [reference, setReference] = useState(filters.reference);\n const [states, setStates] = useState>(filters.states);\n const [user, setUser] = useState<{ id: number, name?: string }>(filters.user);\n const [periodFrom, setPeriodFrom] = useState(filters.period_from);\n const [periodTo, setPeriodTo] = useState(filters.period_to);\n\n useEffect(() => {\n window[FablabOrdersFilters] = filters;\n OrderAPI.index(filters).then(res => {\n setPageCount(res.total_pages);\n setTotalCount(res.total_count);\n setOrders(res.data);\n }).catch(onError);\n }, [filters]);\n\n const statusOptions: ChecklistOption[] = [\n { value: 'cart', label: t('app.admin.store.orders.state.cart') },\n { value: 'paid', label: t('app.admin.store.orders.state.paid') },\n { value: 'payment_failed', label: t('app.admin.store.orders.state.payment_failed') },\n { value: 'in_progress', label: t('app.admin.store.orders.state.in_progress') },\n { value: 'ready', label: t('app.admin.store.orders.state.ready') },\n { value: 'canceled', label: t('app.admin.store.orders.state.canceled') }\n ];\n\n /**\n * Apply filters\n */\n const applyFilters = (filterType: string) => {\n return () => {\n setFilters(draft => {\n switch (filterType) {\n case 'reference':\n draft.reference = reference;\n break;\n case 'states':\n draft.states = states;\n break;\n case 'user':\n draft.user_id = user.id;\n draft.user = user;\n break;\n case 'period':\n if (periodFrom && periodTo) {\n draft.period_from = periodFrom;\n draft.period_to = periodTo;\n } else {\n draft.period_from = '';\n draft.period_to = '';\n }\n break;\n default:\n }\n });\n };\n };\n\n /**\n * Clear filter by type\n */\n const removeFilter = (filterType: string, state?: string) => {\n return () => {\n setFilters(draft => {\n draft.page = 1;\n draft.sort = 'created_at-desc';\n switch (filterType) {\n case 'reference':\n draft.reference = '';\n setReference('');\n break;\n case 'states': {\n const s = [...draft.states];\n s.splice(states.indexOf(state), 1);\n setStates(s);\n draft.states = s;\n break;\n }\n case 'user':\n delete draft.user_id;\n delete draft.user;\n setUser(null);\n break;\n case 'period':\n draft.period_from = '';\n draft.period_to = '';\n setPeriodFrom(null);\n setPeriodTo(null);\n break;\n default:\n }\n });\n };\n };\n\n /**\n * Clear filters\n */\n const clearAllFilters = () => {\n setFilters(initFilters);\n setReference('');\n setStates([]);\n setUser(null);\n setPeriodFrom(null);\n setPeriodTo(null);\n setValue('period_from', '');\n setValue('period_to', '');\n };\n\n /**\n * Creates sorting options to the react-select format\n */\n const buildOptions = (): Array> => {\n return [\n { value: 'created_at-desc', label: t('app.admin.store.orders.sort.newest') },\n { value: 'created_at-asc', label: t('app.admin.store.orders.sort.oldest') }\n ];\n };\n\n /**\n * Display option: sorting\n */\n const handleSorting = (option: SelectOption) => {\n setFilters(draft => {\n draft.sort = option.value;\n });\n };\n\n /**\n * Filter: by reference\n */\n const handleReferenceChanged = (value: string) => {\n setReference(value);\n };\n\n /**\n * Filter: by status\n */\n const handleSelectStatus = (s: ChecklistOption, checked: boolean) => {\n const list = [...states];\n checked\n ? list.push(s.value)\n : list.splice(list.indexOf(s.value), 1);\n setStates(list);\n };\n\n /**\n * Filter: by member\n */\n const handleSelectMember = (user: User) => {\n setUser(user);\n };\n\n /**\n * Filter: by period\n */\n const handlePeriodChanged = (period: string) => {\n return (event: React.ChangeEvent) => {\n const value = event.target.value;\n if (period === 'period_from') {\n setPeriodFrom(value);\n }\n if (period === 'period_to') {\n setPeriodTo(value);\n }\n };\n };\n\n /**\n * Open/close accordion items\n */\n const handleAccordion = (id, state) => {\n setAccordion({ ...accordion, [id]: state });\n };\n\n /**\n * Handle orders pagination\n */\n const handlePagination = (page: number) => {\n setFilters(draft => {\n draft.page = page;\n });\n };\n\n return (\n
    \n
    \n

    {t('app.admin.store.orders.heading')}

    \n
    \n\n \n\n
    \n \n
    \n {filters.reference &&
    \n

    {filters.reference}

    \n \n
    }\n {filters.states?.map((status, index) => (\n
    \n

    {t(`app.admin.store.orders.state.${status}`)}

    \n \n
    \n ))}\n {filters.user_id > 0 &&
    \n

    {user?.name}

    \n \n
    }\n {filters.period_from &&
    \n

    {filters.period_from} {'>'} {filters.period_to}

    \n \n
    }\n
    \n\n
    \n {orders.map(order => (\n \n ))}\n
    \n {pageCount > 1 &&\n \n }\n
    \n
    \n );\n};\n\nconst OrdersWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('orders', react2angular(OrdersWrapper, ['currentUser', 'onError']));\n","import React, { useEffect, useState } from 'react';\nimport { SubmitHandler, useForm, useWatch } from 'react-hook-form';\nimport { useTranslation } from 'react-i18next';\nimport slugify from 'slugify';\nimport _ from 'lodash';\nimport { HtmlTranslate } from '../base/html-translate';\nimport { Product } from '../../models/product';\nimport { FormInput } from '../form/form-input';\nimport { FormSwitch } from '../form/form-switch';\nimport { FormSelect } from '../form/form-select';\nimport { FormChecklist } from '../form/form-checklist';\nimport { FormRichText } from '../form/form-rich-text';\nimport { FabButton } from '../base/fab-button';\nimport { FabAlert } from '../base/fab-alert';\nimport ProductCategoryAPI from '../../api/product-category';\nimport MachineAPI from '../../api/machine';\nimport ProductAPI from '../../api/product';\nimport { ProductStockForm } from './product-stock-form';\nimport { CloneProductModal } from './clone-product-modal';\nimport ProductLib from '../../lib/product';\nimport { UnsavedFormAlert } from '../form/unsaved-form-alert';\nimport { UIRouter } from '@uirouter/angularjs';\nimport { SelectOption, ChecklistOption } from '../../models/select';\nimport { FormMultiFileUpload } from '../form/form-multi-file-upload';\nimport { FormMultiImageUpload } from '../form/form-multi-image-upload';\n\ninterface ProductFormProps {\n product: Product,\n title: string,\n onSuccess: (product: Product) => void,\n onError: (message: string) => void,\n uiRouter: UIRouter\n}\n\n/**\n * Form component to create or update a product\n */\nexport const ProductForm: React.FC = ({ product, title, onSuccess, onError, uiRouter }) => {\n const { t } = useTranslation('admin');\n\n const { handleSubmit, register, control, formState, setValue, reset } = useForm({ defaultValues: { ...product } });\n const output = useWatch({ control });\n const [isActivePrice, setIsActivePrice] = useState(product.id && _.isFinite(product.amount));\n const [productCategories, setProductCategories] = useState[]>([]);\n const [machines, setMachines] = useState[]>([]);\n const [stockTab, setStockTab] = useState(false);\n const [openCloneModal, setOpenCloneModal] = useState(false);\n const [saving, setSaving] = useState(false);\n\n useEffect(() => {\n ProductCategoryAPI.index().then(data => {\n setProductCategories(buildSelectOptions(ProductLib.sortCategories(data)));\n }).catch(onError);\n MachineAPI.index({ disabled: false }).then(data => {\n setMachines(buildChecklistOptions(data));\n }).catch(onError);\n }, []);\n\n /**\n * Convert the provided array of items to the react-select format\n */\n const buildSelectOptions = (items: Array<{ id?: number, name: string, parent_id?: number }>): Array> => {\n return items.map(t => {\n return {\n value: t.id,\n label: t.parent_id\n ? {t.name}\n : t.name\n };\n });\n };\n\n /**\n * Convert the provided array of items to the checklist format\n */\n const buildChecklistOptions = (items: Array<{ id?: number, name: string }>): Array> => {\n return items.map(t => {\n return { value: t.id, label: t.name };\n });\n };\n\n /**\n * Callback triggered when the name has changed.\n */\n const handleNameChange = (event: React.ChangeEvent): void => {\n const name = event.target.value;\n const slug = slugify(name, { lower: true, strict: true });\n setValue('slug', slug);\n };\n\n /**\n * Callback triggered when the user toggles the visibility of the product in the store.\n */\n const handleIsActiveChanged = (value: boolean): void => {\n if (value) {\n setValue('is_active_price', true);\n setIsActivePrice(true);\n }\n };\n\n /**\n * Callback triggered when is active price has changed.\n */\n const toggleIsActivePrice = (value: boolean) => {\n if (!value) {\n setValue('amount', null);\n setValue('is_active', false);\n }\n setIsActivePrice(value);\n };\n\n /**\n * Callback triggered when the form is submitted: process with the product creation or update.\n */\n const onSubmit: SubmitHandler = (data: Product) => {\n saveProduct(data);\n };\n\n /**\n * Call product creation or update api\n */\n const saveProduct = (data: Product) => {\n setSaving(true);\n if (product.id) {\n ProductAPI.update(data).then((res) => {\n reset(res);\n setSaving(false);\n onSuccess(res);\n }).catch(e => {\n setSaving(false);\n onError(e);\n });\n } else {\n ProductAPI.create(data).then((res) => {\n reset(res);\n onSuccess(res);\n }).catch(e => {\n setSaving(false);\n onError(e);\n });\n }\n };\n\n /**\n * Toggle clone product modal\n */\n const toggleCloneModal = () => {\n setOpenCloneModal(!openCloneModal);\n };\n\n return (\n <>\n
    \n

    {title}

    \n
    \n {product.id &&\n <>\n {t('app.admin.store.product_form.clone')}\n \n \n }\n \n {!saving && t('app.admin.store.product_form.save')}\n {saving && }\n \n
    \n
    \n
    \n \n
    \n

    setStockTab(false)}>{t('app.admin.store.product_form.product_parameters')}

    \n

    setStockTab(true)}>{t('app.admin.store.product_form.stock_management')}

    \n
    \n {stockTab\n ? \n :
    \n
    \n \n \n
    \n
    \n \n \n
    \n\n
    \n\n
    \n
    \n

    {t('app.admin.store.product_form.price_and_rule_of_selling_product')}

    \n \n
    \n {isActivePrice &&
    \n \n \n
    }\n
    \n\n
    \n\n
    \n

    {t('app.admin.store.product_form.product_images')}

    \n \n \n \n \n
    \n\n
    \n\n
    \n

    {t('app.admin.store.product_form.assigning_category')}

    \n \n \n \n \n
    \n\n
    \n\n
    \n

    {t('app.admin.store.product_form.assigning_machines')}

    \n \n \n \n \n
    \n\n
    \n\n
    \n

    {t('app.admin.store.product_form.product_description')}

    \n \n \n \n \n
    \n\n
    \n\n
    \n

    {t('app.admin.store.product_form.product_files')}

    \n \n \n \n \n
    \n\n
    \n \n {!saving && t('app.admin.store.product_form.save')}\n {saving && }\n \n
    \n
    \n }\n \n \n );\n};\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { FabButton } from '../base/fab-button';\nimport { Product } from '../../models/product';\nimport { PencilSimple, Trash } from 'phosphor-react';\nimport noImage from '../../../../images/no_image.png';\nimport { FabStateLabel } from '../base/fab-state-label';\nimport { ProductPrice } from './product-price';\n\ninterface ProductItemProps {\n product: Product,\n onEdit: (product: Product) => void,\n onDelete: (productId: number) => void,\n}\n\n/**\n * This component shows a product item in the admin view\n */\nexport const ProductItem: React.FC = ({ product, onEdit, onDelete }) => {\n const { t } = useTranslation('admin');\n\n /**\n * Get the main image\n */\n const thumbnail = () => {\n return product.product_images_attributes.find(att => att.is_main);\n };\n /**\n * Init the process of editing the given product\n */\n const editProduct = (product: Product): () => void => {\n return (): void => {\n onEdit(product);\n };\n };\n\n /**\n * Init the process of delete the given product\n */\n const deleteProduct = (productId: number): () => void => {\n return (): void => {\n onDelete(productId);\n };\n };\n\n /**\n * Returns CSS class from stock status\n */\n const stockColor = (product: Product, stockType: string) => {\n if (product.stock[stockType] < (product.quantity_min || 1)) {\n return 'out-of-stock';\n }\n if (product.low_stock_threshold && product.stock[stockType] <= product.low_stock_threshold) {\n return 'low';\n }\n return '';\n };\n\n return (\n
    \n
    \n \n

    {product.name}

    \n
    \n
    \n \n {product.is_active\n ? t('app.admin.store.product_item.visible')\n : t('app.admin.store.product_item.hidden')\n }\n \n
    \n {t('app.admin.store.product_item.stock.internal')}\n

    {product.stock.internal}

    \n
    \n
    \n {t('app.admin.store.product_item.stock.external')}\n

    {product.stock.external}

    \n
    \n \n
    \n
    \n
    \n \n \n \n \n \n \n
    \n
    \n
    \n );\n};\n","import React from 'react';\nimport { Product } from '../../models/product';\nimport FormatLib from '../../lib/format';\nimport { useTranslation } from 'react-i18next';\n\ninterface ProductPriceProps {\n product: Product;\n className?: string;\n}\n\n/**\n * Render the formatted price for the given product, or \"free\" if the price is 0 or not set\n */\nexport const ProductPrice: React.FC = ({ product, className }) => {\n const { t } = useTranslation('public');\n\n /**\n * Return the formatted price data\n */\n const renderPrice = (product: Product) => {\n if (product.amount === 0) {\n return

    {t('app.public.product_price.free')}

    ;\n }\n if ([null, undefined].includes(product.amount)) {\n return
    ;\n }\n return <>\n

    {FormatLib.price(product.amount)}

    \n {t('app.public.product_price.per_unit')}\n ;\n };\n\n return (\n
    \n {renderPrice(product)}\n
    \n );\n};\n","import React, { useEffect, useState } from 'react';\nimport Select from 'react-select';\nimport { PencilSimple, X } from 'phosphor-react';\nimport { useFieldArray, UseFormRegister } from 'react-hook-form';\nimport { Control, FormState, UseFormSetValue } from 'react-hook-form/dist/types/form';\nimport { useTranslation } from 'react-i18next';\nimport {\n Product,\n stockMovementAllReasons, StockMovementIndex, StockMovementIndexFilter,\n StockMovementReason,\n StockType\n} from '../../models/product';\nimport { HtmlTranslate } from '../base/html-translate';\nimport { FormSwitch } from '../form/form-switch';\nimport { FormInput } from '../form/form-input';\nimport { FabAlert } from '../base/fab-alert';\nimport { FabButton } from '../base/fab-button';\nimport { ProductStockModal } from './product-stock-modal';\nimport { FabStateLabel } from '../base/fab-state-label';\nimport ProductAPI from '../../api/product';\nimport FormatLib from '../../lib/format';\nimport ProductLib from '../../lib/product';\nimport { useImmer } from 'use-immer';\nimport { FabPagination } from '../base/fab-pagination';\n\ninterface ProductStockFormProps {\n currentFormValues: Product,\n register: UseFormRegister,\n control: Control,\n formState: FormState,\n setValue: UseFormSetValue,\n onSuccess: (product: Product) => void,\n onError: (message: string) => void,\n}\n\nconst DEFAULT_LOW_STOCK_THRESHOLD = 30;\n\n/**\n * Form tab to manage a product's stock\n */\nexport const ProductStockForm = ({ currentFormValues, register, control, formState, setValue, onError }: ProductStockFormProps) => {\n const { t } = useTranslation('admin');\n\n const [activeThreshold, setActiveThreshold] = useState(currentFormValues.low_stock_threshold != null);\n // is the update stock modal open?\n const [isOpen, setIsOpen] = useState(false);\n const [stockMovements, setStockMovements] = useState(null);\n const [filters, setFilters] = useImmer({ page: 1 });\n\n const { fields, append, remove } = useFieldArray({ control, name: 'product_stock_movements_attributes' });\n\n useEffect(() => {\n if (!currentFormValues?.id) return;\n\n ProductAPI.stockMovements(currentFormValues.id, filters).then(setStockMovements).catch(onError);\n }, [filters]);\n\n // Styles the React-select component\n const customStyles = {\n control: base => ({\n ...base,\n width: '20ch',\n border: 'none',\n backgroundColor: 'transparent'\n }),\n indicatorSeparator: () => ({\n display: 'none'\n })\n };\n\n type reasonSelectOption = { value: StockMovementReason, label: string };\n /**\n * Creates sorting options to the react-select format\n */\n const buildReasonsOptions = (): Array => {\n return stockMovementAllReasons.map(key => {\n return { value: key, label: t(ProductLib.stockMovementReasonTrKey(key)) };\n });\n };\n\n type typeSelectOption = { value: StockType, label: string };\n /**\n * Creates sorting options to the react-select format\n */\n const buildStocksOptions = (): Array => {\n return [\n { value: 'internal', label: t('app.admin.store.product_stock_form.internal') },\n { value: 'external', label: t('app.admin.store.product_stock_form.external') },\n { value: 'all', label: t('app.admin.store.product_stock_form.all') }\n ];\n };\n\n /**\n * On stock movement reason filter change\n */\n const eventsOptionsChange = (evt: reasonSelectOption) => {\n setFilters(draft => {\n return {\n ...draft,\n reason: evt.value\n };\n });\n };\n /**\n * On stocks type filter change\n */\n const stocksOptionsChange = (evt: typeSelectOption) => {\n setFilters(draft => {\n return {\n ...draft,\n stock_type: evt.value\n };\n });\n };\n\n /**\n * Callback triggered when the user wants to swich the current page of stock movements\n */\n const handlePagination = (page: number) => {\n setFilters(draft => {\n return {\n ...draft,\n page\n };\n });\n };\n\n /**\n * Toggle stock threshold\n */\n const toggleStockThreshold = (checked: boolean) => {\n setActiveThreshold(checked);\n setValue(\n 'low_stock_threshold',\n (checked ? DEFAULT_LOW_STOCK_THRESHOLD : null)\n );\n };\n\n /**\n * Opens/closes the product stock edition modal\n */\n const toggleModal = (): void => {\n setIsOpen(!isOpen);\n };\n\n /**\n * Triggered when a new product stock movement was added\n */\n const onNewStockMovement = (movement): void => {\n append({ ...movement });\n };\n\n /**\n * Return the data of the update of the stock for the current product\n */\n const lastStockUpdate = () => {\n if (stockMovements?.data[0]) {\n return stockMovements?.data[0].date;\n } else {\n return currentFormValues?.created_at || new Date();\n }\n };\n\n return (\n
    \n

    {t('app.admin.store.product_stock_form.stock_up_to_date')} \n {t('app.admin.store.product_stock_form.date_time', {\n DATE: FormatLib.date(lastStockUpdate()),\n TIME: FormatLib.time((lastStockUpdate()))\n })}\n

    \n
    \n
    \n

    {currentFormValues?.name}

    \n
    \n {t('app.admin.store.product_stock_form.internal')}\n

    {currentFormValues?.stock?.internal}

    \n
    \n
    \n {t('app.admin.store.product_stock_form.external')}\n

    {currentFormValues?.stock?.external}

    \n
    \n } className=\"is-black\">Modifier\n
    \n\n {fields.length > 0 &&
    \n {t('app.admin.store.product_stock_form.ongoing_operations')}\n {t('app.admin.store.product_stock_form.save_reminder')}\n {fields.map((newMovement, index) => (\n
    \n
    \n

    {t(`app.admin.store.product_stock_form.type_${ProductLib.stockMovementType(newMovement.reason)}`)}

    \n
    \n
    \n {t(`app.admin.store.product_stock_form.${newMovement.stock_type}`)}\n

    {ProductLib.absoluteStockMovement(newMovement.quantity, newMovement.reason)}

    \n
    \n
    \n {t('app.admin.store.product_stock_form.reason')}\n

    {t(ProductLib.stockMovementReasonTrKey(newMovement.reason))}

    \n
    \n

    remove(index)}>\n {t('app.admin.store.product_stock_form.cancel')}\n \n

    \n \n \n \n
    \n ))}\n
    }\n\n
    \n\n
    \n
    \n

    {t('app.admin.store.product_stock_form.low_stock_threshold')}

    \n \n
    \n \n \n \n {activeThreshold && <>\n {t('app.admin.store.product_stock_form.low_stock')}\n
    \n \n \n
    \n }\n
    \n
    \n\n
    \n

    {t('app.admin.store.product_stock_form.events_history')}

    \n
    \n
    \n

    {t('app.admin.store.product_stock_form.event_type')}

    \n eventsOptionsChange(evt)}\n styles={customStyles}\n />\n
    \n
    \n

    {t('app.admin.store.product_stock_form.stocks')}

    \n stocksOptionsChange(evt)}\n styles={customStyles}\n />\n
    \n
    \n {stockMovements?.data?.map(movement =>
    \n
    \n

    {currentFormValues.name}

    \n

    {FormatLib.date(movement.date)}

    \n
    \n {t(`app.admin.store.product_stock_form.${movement.stock_type}`)}\n

    {ProductLib.absoluteStockMovement(movement.quantity, movement.reason)}

    \n
    \n
    \n {t('app.admin.store.product_stock_form.reason')}\n

    {t(ProductLib.stockMovementReasonTrKey(movement.reason))}

    \n
    \n
    \n {t('app.admin.store.product_stock_form.remaining_stock')}\n

    {movement.remaining_stock}

    \n
    \n
    \n
    )}\n {stockMovements?.total_pages > 1 &&\n \n }\n
    \n \n
    \n );\n};\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n ProductStockMovement,\n stockMovementInReasons,\n stockMovementOutReasons,\n StockMovementReason,\n StockType\n} from '../../models/product';\nimport { FormSelect } from '../form/form-select';\nimport { FormInput } from '../form/form-input';\nimport { FabButton } from '../base/fab-button';\nimport { FabModal, ModalSize } from '../base/fab-modal';\nimport { useForm } from 'react-hook-form';\nimport ProductLib from '../../lib/product';\n\ntype reasonSelectOption = { value: StockMovementReason, label: string };\ntype typeSelectOption = { value: StockType, label: string };\n\ninterface ProductStockModalProps {\n onSuccess: (movement: ProductStockMovement) => void,\n isOpen: boolean,\n toggleModal: () => void,\n}\n\n/**\n * Form to manage a product's stock movement and quantity\n */\nexport const ProductStockModal: React.FC = ({ onSuccess, isOpen, toggleModal }) => {\n const { t } = useTranslation('admin');\n\n const [movement, setMovement] = useState<'in' | 'out'>('in');\n\n const { handleSubmit, register, control, formState } = useForm();\n\n /**\n * Toggle between adding or removing product from stock\n */\n const toggleMovementType = (evt: React.MouseEvent, type: 'in' | 'out') => {\n evt.preventDefault();\n setMovement(type);\n };\n\n /**\n * Callback triggered when the user validates the new stock movement.\n * We do not use handleSubmit() directly to prevent the propagaion of the \"submit\" event to the parent form\n */\n const onSubmit = (event: React.FormEvent) => {\n if (event) {\n event.stopPropagation();\n event.preventDefault();\n }\n return handleSubmit((data: ProductStockMovement) => {\n onSuccess(data);\n toggleModal();\n })(event);\n };\n\n /**\n * Creates sorting options to the react-select format\n */\n const buildEventsOptions = (): Array => {\n return (movement === 'in' ? stockMovementInReasons : stockMovementOutReasons).map(key => {\n return { value: key, label: t(ProductLib.stockMovementReasonTrKey(key)) };\n });\n };\n /**\n * Creates sorting options to the react-select format\n */\n const buildStocksOptions = (): Array => {\n return [\n { value: 'internal', label: t('app.admin.store.product_stock_modal.internal') },\n { value: 'external', label: t('app.admin.store.product_stock_modal.external') }\n ];\n };\n\n return (\n \n
    \n

    {t('app.admin.store.product_stock_modal.new_event')}

    \n
    \n \n \n
    \n \n \n \n {t('app.admin.store.product_stock_modal.update_stock')} \n \n
    \n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { useImmer } from 'use-immer';\nimport { useTranslation } from 'react-i18next';\nimport { react2angular } from 'react2angular';\nimport { Loader } from '../base/loader';\nimport { IApplication } from '../../models/application';\nimport {\n initialFilters, initialResources,\n Product,\n ProductIndexFilter,\n ProductResourcesFetching,\n ProductsIndex,\n ProductSortOption\n} from '../../models/product';\nimport { ProductCategory } from '../../models/product-category';\nimport { FabButton } from '../base/fab-button';\nimport { ProductItem } from './product-item';\nimport ProductAPI from '../../api/product';\nimport { StoreListHeader } from './store-list-header';\nimport { FabPagination } from '../base/fab-pagination';\nimport { CategoriesFilter } from './filters/categories-filter';\nimport { Machine } from '../../models/machine';\nimport { MachinesFilter } from './filters/machines-filter';\nimport { KeywordFilter } from './filters/keyword-filter';\nimport { StockFilter } from './filters/stock-filter';\nimport ProductLib from '../../lib/product';\nimport { ActiveFiltersTags } from './filters/active-filters-tags';\nimport SettingAPI from '../../api/setting';\nimport { UIRouter } from '@uirouter/angularjs';\nimport { CaretDoubleUp } from 'phosphor-react';\nimport { SelectOption } from '../../models/select';\n\ndeclare const Application: IApplication;\n\ninterface ProductsProps {\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n uiRouter: UIRouter,\n}\n\n/** This component shows the admin view of the store */\nconst Products: React.FC = ({ onSuccess, onError, uiRouter }) => {\n const { t } = useTranslation('admin');\n\n const [productsList, setProductList] = useState>([]);\n // this includes the resources fetch from the API (machines, categories) and from the URL (filters)\n const [resources, setResources] = useImmer(initialResources);\n const [machinesModule, setMachinesModule] = useState(false);\n const [pageCount, setPageCount] = useState(0);\n const [currentPage, setCurrentPage] = useState(1);\n const [productsCount, setProductsCount] = useState(0);\n const [filtersPanel, setFiltersPanel] = useState(true);\n\n useEffect(() => {\n ProductLib.fetchInitialResources(setResources, onError);\n SettingAPI.get('machines_module').then(data => {\n setMachinesModule(data.value === 'true');\n }).catch(onError);\n }, []);\n\n useEffect(() => {\n if (resources.filters.ready) {\n fetchProducts();\n uiRouter.stateService.transitionTo(uiRouter.globals.current, ProductLib.indexFiltersToRouterParams(resources.filters.data));\n }\n }, [resources.filters]);\n\n useEffect(() => {\n if (resources.machines.ready && resources.categories.ready) {\n setResources(draft => {\n return {\n ...draft,\n filters: {\n data: ProductLib.readFiltersFromUrl(uiRouter.globals.params, resources.machines.data, resources.categories.data),\n ready: true\n }\n };\n });\n }\n }, [resources.machines, resources.categories]);\n\n /**\n * Handle products pagination\n */\n const handlePagination = (page: number) => {\n if (page !== currentPage) {\n ProductLib.updateFilter(setResources, 'page', page);\n }\n };\n\n /**\n * Fetch the products from the API, according to the current filters\n */\n const fetchProducts = async (): Promise => {\n try {\n const data = await ProductAPI.index(resources.filters.data);\n setCurrentPage(data.page);\n setProductList(data.data);\n setPageCount(data.total_pages);\n setProductsCount(data.total_count);\n return data;\n } catch (error) {\n onError(t('app.admin.store.products.unexpected_error_occurred') + error);\n }\n };\n\n /** Goto edit product page */\n const editProduct = (product: Product) => {\n window.location.href = `/#!/admin/store/products/${product.id}/edit`;\n };\n\n /** Delete a product */\n const deleteProduct = async (productId: number): Promise => {\n try {\n await ProductAPI.destroy(productId);\n await fetchProducts();\n onSuccess(t('app.admin.store.products.successfully_deleted'));\n } catch (e) {\n onError(t('app.admin.store.products.unable_to_delete') + e);\n }\n };\n\n /** Goto new product page */\n const newProduct = (): void => {\n window.location.href = '/#!/admin/store/products/new';\n };\n\n /** Filter: toggle non-available products visibility */\n const toggleVisible = (checked: boolean) => {\n ProductLib.updateFilter(setResources, 'is_active', checked);\n };\n\n /**\n * Update the list of applied filters with the given categories\n */\n const handleCategoriesFilterUpdate = (categories: Array) => {\n ProductLib.updateFilter(setResources, 'categories', categories);\n };\n\n /**\n * Remove the provided category from the filters selection\n */\n const handleRemoveCategory = (category: ProductCategory) => {\n const list = ProductLib.categoriesSelectionTree(resources.categories.data, resources.filters.data.categories, category, 'remove');\n handleCategoriesFilterUpdate(list);\n };\n\n /**\n * Update the list of applied filters with the given machines\n */\n const handleMachinesFilterUpdate = (machines: Array) => {\n ProductLib.updateFilter(setResources, 'machines', machines);\n };\n\n /**\n * Update the list of applied filters with the given keywords (or reference)\n */\n const handleKeywordFilterUpdate = (keywords: Array) => {\n ProductLib.updateFilter(setResources, 'keywords', keywords);\n };\n\n /** Filter: by stock range */\n const handleStockFilterUpdate = (filters: ProductIndexFilter) => {\n setResources(draft => {\n return { ...draft, filters: { ...draft.filters, data: { ...draft.filters.data, ...filters } } };\n });\n };\n\n /** Display option: sorting */\n const handleSorting = (option: SelectOption) => {\n ProductLib.updateFilter(setResources, 'sort', option.value);\n };\n\n /** Clear filters */\n const clearAllFilters = () => {\n setResources(draft => {\n return { ...draft, filters: { ...draft.filters, data: initialFilters } };\n });\n };\n\n /** Creates sorting options to the react-select format */\n const buildSortOptions = (): Array> => {\n return [\n { value: 'name-asc', label: t('app.admin.store.products.sort.name_az') },\n { value: 'name-desc', label: t('app.admin.store.products.sort.name_za') },\n { value: 'amount-asc', label: t('app.admin.store.products.sort.price_low') },\n { value: 'amount-desc', label: t('app.admin.store.products.sort.price_high') }\n ];\n };\n\n return (\n
    \n
    \n

    {t('app.admin.store.products.all_products')}

    \n
    \n {t('app.admin.store.products.create_a_product')}\n
    \n
    \n \n
    \n \n
    \n handleMachinesFilterUpdate(resources.filters.data.machines.filter(machine => machine !== m))}\n onRemoveKeyword={() => handleKeywordFilterUpdate([])}\n onRemoveStock={() => handleStockFilterUpdate({ stock_type: 'internal', stock_to: 0, stock_from: 0 })} />\n
    \n\n
    \n {productsList.map((product) => (\n \n ))}\n
    \n {pageCount > 1 &&\n \n }\n
    \n
    \n );\n};\n\nconst ProductsWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('products', react2angular(ProductsWrapper, ['onSuccess', 'onError', 'uiRouter']));\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { IApplication } from '../../models/application';\nimport { User } from '../../models/user';\nimport { react2angular } from 'react2angular';\nimport { Loader } from '../base/loader';\nimport noImage from '../../../../images/no_image.png';\nimport { FabStateLabel } from '../base/fab-state-label';\nimport OrderAPI from '../../api/order';\nimport { Order } from '../../models/order';\nimport FormatLib from '../../lib/format';\nimport OrderLib from '../../lib/order';\nimport { OrderActions } from './order-actions';\n\ndeclare const Application: IApplication;\n\ninterface ShowOrderProps {\n orderId: string,\n currentUser?: User,\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n}\n\n/**\n * This component shows an order details\n */\nexport const ShowOrder: React.FC = ({ orderId, currentUser, onSuccess, onError }) => {\n const { t } = useTranslation('shared');\n\n const [order, setOrder] = useState();\n const [withdrawalInstructions, setWithdrawalInstructions] = useState(null);\n\n useEffect(() => {\n OrderAPI.get(orderId).then(data => {\n setOrder(data);\n OrderAPI.withdrawalInstructions(data)\n .then(setWithdrawalInstructions)\n .catch(onError);\n }).catch(onError);\n }, []);\n\n /**\n * Check if the current operator has administrative rights or is a normal member\n */\n const isPrivileged = (): boolean => {\n return (currentUser?.role === 'admin' || currentUser?.role === 'manager');\n };\n\n /**\n * Returns order's payment info\n */\n const paymentInfo = (): string => {\n let paymentVerbose = '';\n if (order.payment_method === 'card') {\n paymentVerbose = t('app.shared.store.show_order.payment.settlement_by_debit_card');\n } else if (order.payment_method === 'wallet') {\n paymentVerbose = t('app.shared.store.show_order.payment.settlement_by_wallet');\n } else {\n paymentVerbose = t('app.shared.store.show_order.payment.settlement_done_at_the_reception');\n }\n paymentVerbose += ' ' + t('app.shared.store.show_order.payment.on_DATE_at_TIME', {\n DATE: FormatLib.date(order.payment_date),\n TIME: FormatLib.time(order.payment_date)\n });\n if (order.payment_method !== 'wallet') {\n paymentVerbose += ' ' + t('app.shared.store.show_order.payment.for_an_amount_of_AMOUNT', { AMOUNT: FormatLib.price(order.paid_total) });\n }\n if (order.wallet_amount) {\n if (order.payment_method === 'wallet') {\n paymentVerbose += ' ' + t('app.shared.store.show_order.payment.for_an_amount_of_AMOUNT', { AMOUNT: FormatLib.price(order.wallet_amount) });\n } else {\n paymentVerbose += ' ' + t('app.shared.store.show_order.payment.and') + ' ' + t('app.shared.store.show_order.payment.by_wallet') + ' ' +\n t('app.shared.store.show_order.payment.for_an_amount_of_AMOUNT', { AMOUNT: FormatLib.price(order.wallet_amount) });\n }\n }\n return paymentVerbose;\n };\n\n /**\n * Callback after action success\n */\n const handleActionSuccess = (data: Order, message: string) => {\n setOrder(data);\n onSuccess(message);\n };\n\n /**\n * Ruturn item's ordrable url\n */\n const itemOrderableUrl = (item) => {\n if (isPrivileged()) {\n return `/#!/admin/store/products/${item.orderable_id}/edit`;\n }\n return `/#!/store/p/${item.orderable_slug}`;\n };\n\n if (!order) {\n return null;\n }\n\n return (\n
    \n
    \n

    [{order.reference}]

    \n
    \n {isPrivileged() &&\n \n }\n {order?.invoice_id && (\n \n {t('app.shared.store.show_order.see_invoice')}\n \n )}\n
    \n
    \n\n
    \n \n
    \n {isPrivileged() && order.user &&\n
    \n {t('app.shared.store.show_order.client')}\n

    {order.user.name}

    \n
    \n }\n
    \n {t('app.shared.store.show_order.created_at')}\n

    {FormatLib.date(order.created_at)}

    \n
    \n
    \n {t('app.shared.store.show_order.last_update')}\n

    {FormatLib.date(order.updated_at)}

    \n
    \n \n {t(`app.shared.store.show_order.state.${OrderLib.statusText(order)}`)}\n \n
    \n
    \n\n
    \n \n
    \n {order.order_items_attributes.map(item => (\n
    \n
    \n \n
    \n
    \n {t('app.shared.store.show_order.reference_short')} {item.orderable_ref || ''}\n

    {item.orderable_name}

    \n
    \n
    \n
    \n

    {FormatLib.price(item.amount)}

    \n / {t('app.shared.store.show_order.unit')}\n
    \n\n {item.quantity}\n\n
    \n {t('app.shared.store.show_order.item_total')}\n

    {FormatLib.price(OrderLib.itemAmount(item))}

    \n
    \n
    \n
    \n ))}\n
    \n
    \n\n
    \n
    \n \n {order.invoice_id &&

    {paymentInfo()}

    }\n
    \n
    \n \n

    {t('app.shared.store.show_order.products_total')}{FormatLib.price(OrderLib.totalBeforeOfferedAmount(order))}

    \n {OrderLib.hasOfferedItem(order) &&\n

    {t('app.shared.store.show_order.gift_total')}-{FormatLib.price(OrderLib.offeredAmount(order))}

    \n }\n {order.coupon &&\n

    {t('app.shared.store.show_order.coupon')}-{FormatLib.price(OrderLib.couponAmount(order))}

    \n }\n

    {t('app.shared.store.show_order.cart_total')} {FormatLib.price(OrderLib.paidTotal(order))}

    \n
    \n
    \n \n

    \n

    \n
    \n
    \n );\n};\n\nconst ShowOrderWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('showOrder', react2angular(ShowOrderWrapper, ['orderId', 'currentUser', 'onError', 'onSuccess']));\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Select from 'react-select';\nimport Switch from 'react-switch';\nimport { SortOption } from '../../models/api';\nimport { SelectOption } from '../../models/select';\n\ninterface StoreListHeaderProps {\n productsCount: number,\n selectOptions: SelectOption[],\n onSelectOptionsChange: (option: SelectOption) => void,\n selectValue?: SortOption,\n switchLabel?: string,\n switchChecked?: boolean,\n onSwitch?: (boolean) => void\n}\n\n/**\n * Renders an accordion item\n */\nexport const StoreListHeader: React.FC = ({ productsCount, selectOptions, onSelectOptionsChange, switchLabel, switchChecked, onSwitch, selectValue }) => {\n const { t } = useTranslation('admin');\n\n // Styles the React-select component\n const customStyles = {\n control: base => ({\n ...base,\n width: '20ch',\n border: 'none',\n backgroundColor: 'transparent'\n }),\n indicatorSeparator: () => ({\n display: 'none'\n })\n };\n\n return (\n
    \n
    \n

    {t('app.admin.store.store_list_header.result_count')}{productsCount}

    \n
    \n
    \n
    \n

    {t('app.admin.store.store_list_header.sort')}

    \n onSelectOptionsChange(evt)}\n value={selectOptions.find(option => option.value === selectValue)}\n styles={customStyles}\n />\n
    \n {onSwitch &&\n
    \n \n
    \n }\n
    \n
    \n );\n};\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport _ from 'lodash';\nimport { FabButton } from '../base/fab-button';\nimport { Product } from '../../models/product';\nimport { Order } from '../../models/order';\nimport { FabStateLabel } from '../base/fab-state-label';\nimport CartAPI from '../../api/cart';\nimport noImage from '../../../../images/no_image.png';\nimport { ProductPrice } from './product-price';\nimport ProductLib from '../../lib/product';\n\ninterface StoreProductItemProps {\n product: Product,\n cart: Order,\n onSuccessAddProductToCart: (cart: Order) => void,\n onError: (message: string) => void\n}\n\n/**\n * This component shows a product item \"card\" in the public store list\n */\nexport const StoreProductItem: React.FC = ({ product, cart, onSuccessAddProductToCart, onError }) => {\n const { t } = useTranslation('public');\n\n /**\n * Return main image of Product, if the product has no image, show default image\n */\n const productImageUrl = (product: Product) => {\n const productImage = _.find(product.product_images_attributes, { is_main: true });\n if (productImage) {\n return productImage.attachment_url;\n }\n return noImage;\n };\n\n /**\n * Add the product to cart\n */\n const addProductToCart = (e: React.BaseSyntheticEvent) => {\n e.preventDefault();\n e.stopPropagation();\n CartAPI.addItem(cart, product.id, 1).then(onSuccessAddProductToCart).catch(() => {\n onError(t('app.public.store_product_item.stock_limit'));\n });\n };\n\n /**\n * Goto show product page\n */\n const showProduct = (product: Product): void => {\n window.location.href = `/#!/store/p/${product.slug}`;\n };\n\n /**\n * Returns CSS class from stock status\n */\n const statusColor = (product: Product) => {\n if (product.stock.external < (product.quantity_min || 1)) {\n return 'out-of-stock';\n }\n if (product.low_stock_threshold && product.stock.external <= product.low_stock_threshold) {\n return 'low';\n }\n return '';\n };\n\n return (\n
    showProduct(product)}>\n
    \n \n
    \n

    {product.name}

    \n {product.quantity_min > 1 &&\n {t('app.public.store_product_item.minimum_purchase')}{product.quantity_min}\n }\n \n \n {t(ProductLib.stockStatusTrKey(product))}\n \n {product.stock.external >= (product.quantity_min || 1) &&\n } className=\"main-action-btn\" onClick={addProductToCart}>\n {t('app.public.store_product_item.add')}\n \n }\n
    \n );\n};\n","import React, { useEffect, useState, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { react2angular } from 'react2angular';\nimport { Loader } from '../base/loader';\nimport { IApplication } from '../../models/application';\nimport _ from 'lodash';\nimport { Product } from '../../models/product';\nimport { User } from '../../models/user';\nimport ProductAPI from '../../api/product';\nimport CartAPI from '../../api/cart';\nimport noImage from '../../../../images/no_image.png';\nimport { FabButton } from '../base/fab-button';\nimport useCart from '../../hooks/use-cart';\nimport { FilePdf, Minus, Plus } from 'phosphor-react';\nimport { FabStateLabel } from '../base/fab-state-label';\nimport { ProductPrice } from './product-price';\nimport ProductLib from '../../lib/product';\n\ndeclare const Application: IApplication;\n\ninterface StoreProductProps {\n productSlug: string,\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n currentUser?: User\n}\n\n/**\n * This component shows the details of a single product, in full page\n */\nexport const StoreProduct: React.FC = ({ productSlug, currentUser, onSuccess, onError }) => {\n const { t } = useTranslation('public');\n\n const { cart, setCart } = useCart(currentUser);\n const [product, setProduct] = useState();\n const [showImage, setShowImage] = useState(null);\n const [toCartCount, setToCartCount] = useState(0);\n const [displayToggle, setDisplayToggle] = useState(false);\n const [collapseDescription, setCollapseDescription] = useState(true);\n const descContainer = useRef(null);\n\n useEffect(() => {\n ProductAPI.get(productSlug).then(data => {\n setProduct(data);\n const productImage = _.find(data.product_images_attributes, { is_main: true });\n if (productImage) {\n setShowImage(productImage.id);\n }\n setToCartCount(data.quantity_min ? data.quantity_min : 1);\n setDisplayToggle(descContainer.current.offsetHeight < descContainer.current.scrollHeight);\n }).catch((e) => {\n onError(t('app.public.store_product.unexpected_error_occurred') + e);\n });\n }, []);\n\n /**\n * Return main image of Product, if the product has no image, show default image\n */\n const productImageUrl = (id: number) => {\n const productImage = _.find(product.product_images_attributes, { id });\n if (productImage) {\n return productImage.attachment_url;\n }\n return noImage;\n };\n\n /**\n * Returns CSS class from stock status\n */\n const statusColor = (product: Product) => {\n if (product.stock.external < (product.quantity_min || 1)) {\n return 'out-of-stock';\n }\n if (product.low_stock_threshold && product.stock.external <= product.low_stock_threshold) {\n return 'low';\n }\n return '';\n };\n\n /**\n * Update product count\n */\n const setCount = (type: 'add' | 'remove') => {\n switch (type) {\n case 'add':\n if (toCartCount < product.stock.external) {\n setToCartCount(toCartCount + 1);\n }\n break;\n case 'remove':\n if (toCartCount > product.quantity_min) {\n setToCartCount(toCartCount - 1);\n }\n break;\n }\n };\n /**\n * Update product count\n */\n const typeCount = (evt: React.ChangeEvent) => {\n evt.preventDefault();\n setToCartCount(Number(evt.target.value));\n };\n\n /**\n * Add product to cart\n */\n const addToCart = () => {\n if (toCartCount <= product.stock.external) {\n CartAPI.addItem(cart, product.id, toCartCount).then(data => {\n setCart(data);\n onSuccess(t('app.public.store_product.add_to_cart_success'));\n }).catch(() => {\n onError(t('app.public.store_product.stock_limit'));\n });\n }\n };\n\n if (product) {\n return (\n
    \n {product.sku && {t('app.public.store_product.ref', { REF: product.sku })}}\n

    {product.name}

    \n
    \n
    \n
    \n \n
    \n
    \n {product.product_images_attributes.length > 1 &&\n
    \n {product.product_images_attributes.map(i => (\n
    \n setShowImage(i.id)} src={i.thumb_attachment_url} />\n
    \n ))}\n
    \n }\n
    \n
    \n
    \n {displayToggle &&\n \n }\n {product.product_files_attributes.length > 0 &&\n
    \n

    {t('app.public.store_product.documentation')}

    \n
    \n {product.product_files_attributes.map(f =>\n \n \n {f.attachment_name}\n \n )}\n
    \n
    \n }\n
    \n\n \n
    \n );\n }\n return null;\n};\n\nconst StoreProductWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('storeProduct', react2angular(StoreProductWrapper, ['productSlug', 'currentUser', 'onSuccess', 'onError']));\n","import { SettingName, SettingValue } from '../models/setting';\nimport ParsingLib from './parsing';\n\nexport default class SettingLib {\n /**\n * Convert the provided data to a map, as expected by BulkUpdate\n */\n static objectToBulkMap = (data: Record): Map => {\n const res = new Map();\n for (const key in data) {\n res.set(key as SettingName, `${data[key]}`);\n }\n return res;\n };\n\n /**\n * Convert the provided map to a simple javascript object, usable by react-hook-form\n */\n static bulkMapToObject = (data: Map): Record => {\n const res = {} as Record;\n data.forEach((value, key) => {\n res[key] = ParsingLib.simpleParse(value);\n });\n return res;\n };\n}\n","import React, { useEffect } from 'react';\nimport { react2angular } from 'react2angular';\nimport { Loader } from '../base/loader';\nimport { IApplication } from '../../models/application';\nimport { useTranslation } from 'react-i18next';\nimport { HtmlTranslate } from '../base/html-translate';\nimport { useForm, SubmitHandler } from 'react-hook-form';\nimport { FabAlert } from '../base/fab-alert';\nimport { FormRichText } from '../form/form-rich-text';\nimport { FabButton } from '../base/fab-button';\nimport SettingAPI from '../../api/setting';\nimport SettingLib from '../../lib/setting';\nimport { SettingName, SettingValue, storeSettings } from '../../models/setting';\nimport { FormSwitch } from '../form/form-switch';\n\ndeclare const Application: IApplication;\n\ninterface StoreSettingsProps {\n onError: (message: string) => void,\n onSuccess: (message: string) => void\n}\n\n/**\n * Store settings display and edition\n */\nexport const StoreSettings: React.FC = ({ onError, onSuccess }) => {\n const { t } = useTranslation('admin');\n const { control, handleSubmit, reset } = useForm>();\n\n useEffect(() => {\n SettingAPI.query(storeSettings)\n .then(settings => {\n const data = SettingLib.bulkMapToObject(settings);\n reset(data);\n })\n .catch(onError);\n }, []);\n\n /**\n * Callback triggered when the form is submitted: save the settings\n */\n const onSubmit: SubmitHandler> = (data) => {\n SettingAPI.bulkUpdate(SettingLib.objectToBulkMap(data)).then(() => {\n onSuccess(t('app.admin.store_settings.update_success'));\n }, reason => {\n onError(reason);\n });\n };\n\n return (\n
    \n
    \n

    {t('app.admin.store_settings.title')}

    \n
    \n
    \n
    \n

    {t('app.admin.store_settings.withdrawal_instructions')}

    \n \n \n \n \n
    \n
    \n

    {t('app.admin.store_settings.store_hidden_title')}

    \n \n \n \n \n
    \n {t('app.admin.store_settings.save')}\n
    \n
    \n );\n};\n\nconst StoreSettingsWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('storeSettings', react2angular(StoreSettingsWrapper, ['onError', 'onSuccess']));\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { react2angular } from 'react2angular';\nimport { Loader } from '../base/loader';\nimport { IApplication } from '../../models/application';\nimport { FabButton } from '../base/fab-button';\nimport {\n initialFilters,\n initialResources,\n Product,\n ProductResourcesFetching,\n ProductsIndex,\n ProductSortOption\n} from '../../models/product';\nimport { ProductCategory } from '../../models/product-category';\nimport ProductAPI from '../../api/product';\nimport { StoreProductItem } from './store-product-item';\nimport useCart from '../../hooks/use-cart';\nimport { User } from '../../models/user';\nimport { Order } from '../../models/order';\nimport { StoreListHeader } from './store-list-header';\nimport { FabPagination } from '../base/fab-pagination';\nimport { MachinesFilter } from './filters/machines-filter';\nimport { useImmer } from 'use-immer';\nimport { Machine } from '../../models/machine';\nimport { KeywordFilter } from './filters/keyword-filter';\nimport { ActiveFiltersTags } from './filters/active-filters-tags';\nimport ProductLib from '../../lib/product';\nimport { UIRouter } from '@uirouter/angularjs';\nimport SettingAPI from '../../api/setting';\nimport { SelectOption } from '../../models/select';\n\ndeclare const Application: IApplication;\n\nconst storeInitialFilters = {\n ...initialFilters,\n is_active: true\n};\n\nconst storeInitialResources = {\n ...initialResources,\n filters: {\n data: storeInitialFilters,\n ready: false\n }\n};\n\ninterface StoreProps {\n onError: (message: string) => void,\n onSuccess: (message: string) => void,\n currentUser: User,\n uiRouter: UIRouter,\n}\n\n/**\n * This component shows public store\n */\nconst Store: React.FC = ({ onError, onSuccess, currentUser, uiRouter }) => {\n const { t } = useTranslation('public');\n\n const { cart, setCart } = useCart(currentUser);\n\n const [products, setProducts] = useState>([]);\n // this includes the resources fetch from the API (machines, categories) and from the URL (filters)\n const [resources, setResources] = useImmer(storeInitialResources);\n const [machinesModule, setMachinesModule] = useState(false);\n const [categoriesTree, setCategoriesTree] = useState([]);\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [filtersPanel, setFiltersPanel] = useState(false);\n const [pageCount, setPageCount] = useState(0);\n const [productsCount, setProductsCount] = useState(0);\n const [currentPage, setCurrentPage] = useState(1);\n\n useEffect(() => {\n ProductLib.fetchInitialResources(setResources, onError, formatCategories);\n SettingAPI.get('machines_module').then(data => {\n setMachinesModule(data.value === 'true');\n }).catch(onError);\n }, []);\n\n useEffect(() => {\n if (resources.filters.ready) {\n fetchProducts();\n uiRouter.stateService.transitionTo(uiRouter.globals.current, ProductLib.indexFiltersToRouterParams(resources.filters.data));\n }\n }, [resources.filters]);\n\n useEffect(() => {\n if (resources.machines.ready && resources.categories.ready) {\n setResources(draft => {\n return {\n ...draft,\n filters: {\n data: ProductLib.readFiltersFromUrl(uiRouter.globals.params, resources.machines.data, resources.categories.data, storeInitialFilters),\n ready: true\n }\n };\n });\n }\n }, [resources.machines, resources.categories]);\n\n /**\n * Create categories tree (parent/children)\n */\n const formatCategories = (list: ProductCategory[]) => {\n const tree: Array = [];\n const parents = list.filter(c => !c.parent_id);\n parents.forEach(p => {\n tree.push({\n parent: p,\n children: list.filter(c => c.parent_id === p.id)\n });\n });\n setCategoriesTree(tree);\n };\n\n /**\n * Filter by category: the selected category will always be first\n */\n const filterCategory = (category: ProductCategory) => {\n ProductLib.updateFilter(\n setResources,\n 'categories',\n category\n ? Array.from(new Set([category, ...ProductLib.categoriesSelectionTree(resources.categories.data, [], category, 'add')]))\n : []\n );\n };\n\n /**\n * Update the list of applied filters with the given machines\n */\n const applyMachineFilters = (machines: Array) => {\n ProductLib.updateFilter(setResources, 'machines', machines);\n };\n\n /**\n * Update the list of applied filters with the given keywords (or reference)\n */\n const applyKeywordFilter = (keywords: Array) => {\n ProductLib.updateFilter(setResources, 'keywords', keywords);\n };\n /**\n * Clear filters\n */\n const clearAllFilters = () => {\n setResources(draft => {\n return {\n ...draft,\n filters: {\n ...draft.filters,\n data: {\n ...storeInitialFilters,\n categories: draft.filters.data.categories\n }\n }\n };\n });\n };\n\n /**\n * Creates sorting options to the react-select format\n */\n const buildOptions = (): Array> => {\n return [\n { value: 'name-asc', label: t('app.public.store.products.sort.name_az') },\n { value: 'name-desc', label: t('app.public.store.products.sort.name_za') },\n { value: 'amount-asc', label: t('app.public.store.products.sort.price_low') },\n { value: 'amount-desc', label: t('app.public.store.products.sort.price_high') }\n ];\n };\n /**\n * Display option: sorting\n */\n const handleSorting = (option: SelectOption) => {\n ProductLib.updateFilter(setResources, 'sort', option.value);\n };\n\n /**\n * Filter: toggle non-available products visibility\n */\n const toggleVisible = (checked: boolean) => {\n ProductLib.updateFilter(setResources, 'is_available', checked);\n };\n\n /**\n * Add product to the cart\n */\n const addToCart = (cart: Order) => {\n setCart(cart);\n onSuccess(t('app.public.store.add_to_cart_success'));\n };\n\n /**\n * Handle products pagination\n */\n const handlePagination = (page: number) => {\n if (page !== currentPage) {\n ProductLib.updateFilter(setResources, 'page', page);\n }\n };\n\n /**\n * Fetch the products from the API, according to the current filters\n */\n const fetchProducts = async (): Promise => {\n try {\n const data = await ProductAPI.index(Object.assign({ store: true }, resources.filters.data));\n setCurrentPage(data.page);\n setProducts(data.data);\n setPageCount(data.total_pages);\n setProductsCount(data.total_count);\n return data;\n } catch (error) {\n onError(t('app.public.store.unexpected_error_occurred') + error);\n }\n };\n\n const selectedCategory = resources.filters.data.categories[0];\n const parent = resources.categories.data.find(c => c.id === selectedCategory?.parent_id);\n return (\n
    \n
      \n
    • \n filterCategory(null)}>{t('app.public.store.products.all_products')}\n
    • \n {parent &&\n
    • \n filterCategory(parent)}>\n {parent.name}\n \n
    • \n }\n {selectedCategory &&\n
    • \n filterCategory(selectedCategory)}>\n {selectedCategory.name}\n \n
    • \n }\n
    \n \n
    \n \n
    \n applyMachineFilters(resources.filters.data.machines.filter(machine => machine !== m))}\n onRemoveKeyword={() => applyKeywordFilter([])} />\n
    \n
    \n {products.map((product) => (\n \n ))}\n
    \n {pageCount > 1 &&\n \n }\n
    \n
    \n );\n};\n\nconst StoreWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('store', react2angular(StoreWrapper, ['onError', 'onSuccess', 'currentUser', 'uiRouter']));\n\ninterface CategoryTree {\n parent: ProductCategory,\n children: ProductCategory[]\n}\n","import React, { useEffect, useState } from 'react';\nimport { Subscription } from '../../models/subscription';\nimport { FabModal, ModalSize } from '../base/fab-modal';\nimport { useTranslation } from 'react-i18next';\nimport { FabAlert } from '../base/fab-alert';\nimport { FabInput } from '../base/fab-input';\nimport FormatLib from '../../lib/format';\nimport { Loader } from '../base/loader';\nimport { react2angular } from 'react2angular';\nimport { IApplication } from '../../models/application';\nimport LocalPaymentAPI from '../../api/local-payment';\nimport { PaymentMethod } from '../../models/payment';\nimport { TDateISO } from '../../typings/date-iso';\n\ndeclare const Application: IApplication;\n\ninterface FreeExtendModalProps {\n isOpen: boolean,\n toggleModal: () => void,\n subscription: Subscription,\n customerId: number,\n onSuccess: (message: string, newExpirationDate: Date) => void,\n onError: (message: string) => void,\n}\n\n/**\n * Modal dialog shown to extend the current subscription of a customer, for free\n */\nexport const FreeExtendModal: React.FC = ({ isOpen, toggleModal, subscription, customerId, onError, onSuccess }) => {\n // we do not render the modal if the subscription was not provided\n if (!subscription) return null;\n\n const { t } = useTranslation('admin');\n\n const [expirationDate, setExpirationDate] = useState(new Date(subscription.expired_at));\n const [freeDays, setFreeDays] = useState(0);\n\n // we update the number of free days when the new expiration date is updated\n useEffect(() => {\n if (!expirationDate || !subscription.expired_at) {\n setFreeDays(0);\n }\n // 86400000 = 1000 * 3600 * 24 = number of ms per day\n setFreeDays(Math.ceil((expirationDate.getTime() - new Date(subscription.expired_at).getTime()) / 86400000));\n }, [expirationDate]);\n\n /**\n * Return the formatted localized date for the given date\n */\n const formatDateTime = (date: TDateISO): string => {\n return t('app.admin.free_extend_modal.DATE_TIME', { DATE: FormatLib.date(date), TIME: FormatLib.time(date) });\n };\n\n /**\n * Return the given date formatted for the HTML input-date\n */\n const formatDefaultDate = (date: Date): string => {\n return date.toISOString().substr(0, 10);\n };\n\n /**\n * Parse the given date and record it as the new expiration date of the subscription\n */\n const handleDateUpdate = (date: string): void => {\n setExpirationDate(new Date(Date.parse(date)));\n };\n\n /**\n * Callback triggered when the user validates the free extent of the subscription\n */\n const handleConfirmExtend = (): void => {\n LocalPaymentAPI.confirmPayment({\n customer_id: customerId,\n payment_method: PaymentMethod.Other,\n items: [\n {\n free_extension: {\n end_at: expirationDate\n }\n }\n ]\n }).then(() => {\n onSuccess(t('app.admin.free_extend_modal.extend_success'), expirationDate);\n toggleModal();\n }).catch(err => onError(err));\n };\n\n return (\n \n \n

    {t('app.admin.free_extend_modal.offer_free_days_infos')}

    \n

    {t('app.admin.free_extend_modal.credits_will_remain_unchanged')}

    \n
    \n
    \n \n \n \n \n \n \n \n
    \n );\n};\n\nconst FreeExtendModalWrapper: React.FC = ({ toggleModal, subscription, customerId, isOpen, onSuccess, onError }) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('freeExtendModal', react2angular(FreeExtendModalWrapper, ['toggleModal', 'subscription', 'customerId', 'isOpen', 'onError', 'onSuccess']));\n","import React, { useEffect, useState } from 'react';\nimport { Subscription } from '../../models/subscription';\nimport { FabModal, ModalSize } from '../base/fab-modal';\nimport { useTranslation } from 'react-i18next';\nimport { FabAlert } from '../base/fab-alert';\nimport { FabInput } from '../base/fab-input';\nimport FormatLib from '../../lib/format';\nimport { Loader } from '../base/loader';\nimport { react2angular } from 'react2angular';\nimport { IApplication } from '../../models/application';\nimport { PaymentMethod, ShoppingCart } from '../../models/payment';\nimport moment from 'moment';\nimport { SelectSchedule } from '../payment-schedule/select-schedule';\nimport SubscriptionAPI from '../../api/subscription';\nimport PriceAPI from '../../api/price';\nimport { ComputePriceResult } from '../../models/price';\nimport { PaymentScheduleSummary } from '../payment-schedule/payment-schedule-summary';\nimport { PaymentSchedule } from '../../models/payment-schedule';\nimport { LocalPaymentModal } from '../payment/local-payment/local-payment-modal';\nimport { User } from '../../models/user';\nimport { TDateISO } from '../../typings/date-iso';\n\ndeclare const Application: IApplication;\n\ninterface RenewModalProps {\n isOpen: boolean,\n toggleModal: () => void,\n subscription?: Subscription,\n customer: User,\n operator: User,\n onSuccess: (message: string, newExpirationDate: Date) => void,\n onError: (message: string) => void,\n}\n\n/**\n * Modal dialog shown to renew the current subscription of a customer, for free\n */\nexport const RenewModal: React.FC = ({ isOpen, toggleModal, subscription, customer, operator, onError, onSuccess }) => {\n // we do not render the modal if the subscription was not provided\n if (!subscription) return null;\n\n const { t } = useTranslation('admin');\n\n const [expirationDate, setExpirationDate] = useState(new Date());\n const [localPaymentModal, setLocalPaymentModal] = useState(false);\n const [cart, setCart] = useState(null);\n const [price, setPrice] = useState(null);\n const [scheduleRequired, setScheduleRequired] = useState(false);\n\n // on init, we compute the new expiration date\n useEffect(() => {\n setExpirationDate(moment(subscription.expired_at)\n .add(subscription.plan.interval_count, subscription.plan.interval)\n .toDate());\n SubscriptionAPI.paymentsDetails(subscription.id)\n .then(res => setScheduleRequired(res.payment_schedule))\n .catch(err => onError(err));\n }, []);\n\n // when the payment schedule is toggled (requested/ignored), we update the cart accordingly\n useEffect(() => {\n setCart({\n customer_id: customer.id,\n items: [{\n subscription: {\n plan_id: subscription.plan.id,\n start_at: subscription.expired_at\n }\n }],\n payment_method: PaymentMethod.Other,\n payment_schedule: scheduleRequired\n });\n }, [scheduleRequired]);\n\n // when the cart is updated, re-compute the price and the payment schedule\n useEffect(() => {\n if (!cart) return;\n\n PriceAPI.compute(cart)\n .then(res => setPrice(res))\n .catch(err => onError(err));\n }, [cart]);\n\n /**\n * Return the formatted localized date for the given date\n */\n const formatDateTime = (date: Date|TDateISO): string => {\n return t('app.admin.renew_modal.DATE_TIME', { DATE: FormatLib.date(date), TIME: FormatLib.time(date) });\n };\n\n /**\n * Callback triggered when the payment of the subscription renewal was successful\n */\n const onPaymentSuccess = (): void => {\n onSuccess(t('app.admin.renew_modal.renew_success'), expirationDate);\n toggleModal();\n };\n\n /**\n * Open/closes the local payment modal\n */\n const toggleLocalPaymentModal = (): void => {\n setLocalPaymentModal(!localPaymentModal);\n };\n\n return (\n \n \n

    {t('app.admin.renew_modal.renew_subscription_info')}

    \n

    {t('app.admin.renew_modal.credits_will_be_reset')}

    \n
    \n
    \n
    \n \n \n \n \n \n \n \n
    \n {subscription.plan.monthly_payment && }\n {price?.schedule && }\n {price && !price?.schedule &&
    \n

    {t('app.admin.renew_modal.pay_in_one_go')}

    \n {FormatLib.price(price.price)}\n
    }\n
    \n
    \n \n
    \n );\n};\n\nconst RenewModalWrapper: React.FC = ({ toggleModal, subscription, customer, operator, isOpen, onSuccess, onError }) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('renewModal', react2angular(RenewModalWrapper, ['toggleModal', 'subscription', 'customer', 'operator', 'isOpen', 'onError', 'onSuccess']));\n","import React, { useEffect, useState } from 'react';\nimport Select from 'react-select';\nimport { useTranslation } from 'react-i18next';\nimport { Subscription } from '../../models/subscription';\nimport { User } from '../../models/user';\nimport { PaymentMethod, ShoppingCart } from '../../models/payment';\nimport { FabModal } from '../base/fab-modal';\nimport SubscriptionAPI from '../../api/subscription';\nimport { Plan } from '../../models/plan';\nimport PlanAPI from '../../api/plan';\nimport { Loader } from '../base/loader';\nimport { react2angular } from 'react2angular';\nimport { IApplication } from '../../models/application';\nimport FormatLib from '../../lib/format';\nimport { SelectSchedule } from '../payment-schedule/select-schedule';\nimport { ComputePriceResult } from '../../models/price';\nimport { PaymentScheduleSummary } from '../payment-schedule/payment-schedule-summary';\nimport { PaymentSchedule } from '../../models/payment-schedule';\nimport PriceAPI from '../../api/price';\nimport { LocalPaymentModal } from '../payment/local-payment/local-payment-modal';\nimport { SelectOption } from '../../models/select';\n\ndeclare const Application: IApplication;\n\ninterface SubscribeModalProps {\n isOpen: boolean,\n toggleModal: () => void,\n customer: User,\n operator: User,\n onSuccess: (message: string, subscription: Subscription) => void,\n onError: (message: string) => void,\n}\n\n/**\n * Modal dialog shown to create a subscription for the given customer\n */\nexport const SubscribeModal: React.FC = ({ isOpen, toggleModal, customer, operator, onError, onSuccess }) => {\n const { t } = useTranslation('admin');\n\n const [selectedPlan, setSelectedPlan] = useState(null);\n const [selectedSchedule, setSelectedSchedule] = useState(false);\n const [allPlans, setAllPlans] = useState>(null);\n const [price, setPrice] = useState(null);\n const [cart, setCart] = useState(null);\n const [localPaymentModal, setLocalPaymentModal] = useState(false);\n\n // fetch all plans from the API on component mount\n useEffect(() => {\n PlanAPI.index()\n .then(plans => setAllPlans(plans))\n .catch(error => onError(error));\n }, []);\n\n // when the plan is updated, update the default value for the payment schedule requirement\n useEffect(() => {\n if (!selectedPlan) return;\n\n setSelectedSchedule(selectedPlan.monthly_payment);\n }, [selectedPlan]);\n\n // when the plan or the requirement for a payment schedule are updated, update the cart accordingly\n useEffect(() => {\n if (!selectedPlan) return;\n\n setCart({\n customer_id: customer.id,\n items: [{\n subscription: {\n plan_id: selectedPlan.id\n }\n }],\n payment_method: PaymentMethod.Other,\n payment_schedule: selectedSchedule\n });\n }, [selectedSchedule, selectedPlan]);\n\n // when the cart is updated, update the price accordingly\n useEffect(() => {\n if (!cart) return;\n\n PriceAPI.compute(cart)\n .then(res => setPrice(res))\n .catch(err => onError(err));\n }, [cart]);\n\n /**\n * Callback triggered when the user selects a group in the dropdown list\n */\n const handlePlanSelect = (option: SelectOption): void => {\n const plan = allPlans.find(p => p.id === option.value);\n setSelectedPlan(plan);\n };\n\n /**\n * Callback triggered when the payment of the subscription was successful\n */\n const onPaymentSuccess = (res): void => {\n SubscriptionAPI.get(res.main_object.id).then(subscription => {\n onSuccess(t('app.admin.subscribe_modal.subscription_success'), subscription);\n toggleModal();\n }).catch(error => onError(error));\n };\n\n /**\n * Open/closes the local payment modal\n */\n const toggleLocalPaymentModal = (): void => {\n setLocalPaymentModal(!localPaymentModal);\n };\n\n /**\n * Convert all groups to the react-select format\n */\n const buildOptions = (): Array> => {\n if (!allPlans) return [];\n\n return allPlans.filter(p => !p.disabled && p.group_id === customer.group_id).map(p => {\n return { value: p.id, label: `${p.base_name} (${FormatLib.duration(p.interval, p.interval_count)})` };\n });\n };\n\n return (\n \n
    \n \n \n \n
    \n {errors.includes(documentType.id) && \n {t('app.logged.dashboard.supporting_documents_files.file_size_error', { SIZE: maxProofOfIdentityFileSizeMb })}\n }\n
    \n );\n })}\n
    \n {hasProofOfIdentityTypes() && (\n 0}>\n {t('app.logged.dashboard.supporting_documents_files.save')}\n \n )}\n \n );\n};\n\nconst SupportingDocumentsFilesWrapper: React.FC = ({ currentUser, onSuccess, onError }) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('supportingDocumentsFiles', react2angular(SupportingDocumentsFilesWrapper, ['currentUser', 'onSuccess', 'onError']));\n","import React, { BaseSyntheticEvent, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { ProofOfIdentityType } from '../../models/proof-of-identity-type';\n\ninterface SupportingDocumentsRefusalFormProps {\n proofOfIdentityTypes: Array,\n onChange: (field: string, value: string | Array) => void,\n}\n\n/**\n * Form to set the refuse the uploaded supporting documents\n */\nexport const SupportingDocumentsRefusalForm: React.FC = ({ proofOfIdentityTypes, onChange }) => {\n const { t } = useTranslation('admin');\n\n const [values, setValues] = useState>([]);\n const [message, setMessage] = useState('');\n\n /**\n * Callback triggered when the message has changed.\n */\n const handleMessageChange = (e: BaseSyntheticEvent): void => {\n const { value } = e.target;\n setMessage(value);\n onChange('message', value);\n };\n\n /**\n * Callback triggered when the document type checkbox is ticked or unticked.\n */\n const handleTypeSelectionChange = (value: number) => {\n return (event: BaseSyntheticEvent) => {\n let newValues: Array;\n if (event.target.checked) {\n newValues = values.concat(value);\n } else {\n newValues = values.filter(x => x !== value);\n }\n setValues(newValues);\n onChange('proof_of_identity_type_ids', newValues);\n };\n };\n\n /**\n * Verify if the provided type is currently ticked (i.e. about to be refused)\n */\n const isChecked = (typeId: number) => {\n return values.includes(typeId);\n };\n\n return (\n
    \n
    \n
    \n {proofOfIdentityTypes.map(type =>
    \n \n \n
    )}\n
    \n
    \n \n \n
    \n
    \n
    \n );\n};\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { ProofOfIdentityRefusal, ProofOfIdentityRefusalIndexFilter } from '../models/proof-of-identity-refusal';\nimport ApiLib from '../lib/api';\n\nexport default class ProofOfIdentityRefusalAPI {\n static async index (filters?: ProofOfIdentityRefusalIndexFilter): Promise> {\n const res: AxiosResponse> = await apiClient.get(`/api/proof_of_identity_refusals${ApiLib.filtersToQuery(filters)}`);\n return res?.data;\n }\n\n static async create (proofOfIdentityRefusal: ProofOfIdentityRefusal): Promise {\n const res: AxiosResponse = await apiClient.post('/api/proof_of_identity_refusals', { proof_of_identity_refusal: proofOfIdentityRefusal });\n return res?.data;\n }\n}\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { FabModal } from '../base/fab-modal';\nimport { ProofOfIdentityType } from '../../models/proof-of-identity-type';\nimport { ProofOfIdentityRefusal } from '../../models/proof-of-identity-refusal';\nimport { User } from '../../models/user';\nimport ProofOfIdentityRefusalAPI from '../../api/proof-of-identity-refusal';\nimport { SupportingDocumentsRefusalForm } from './supporting-documents-refusal-form';\n\ninterface SupportingDocumentsRefusalModalProps {\n isOpen: boolean,\n toggleModal: () => void,\n onSuccess: (message: string) => void,\n onError: (message: string) => void,\n proofOfIdentityTypes: Array,\n operator: User,\n member: User\n}\n\n/**\n * Modal dialog to notify the member that his documents are refused\n */\nexport const SupportingDocumentsRefusalModal: React.FC = ({ isOpen, toggleModal, onSuccess, proofOfIdentityTypes, operator, member, onError }) => {\n const { t } = useTranslation('admin');\n\n const [data, setData] = useState({\n id: null,\n operator_id: operator.id,\n user_id: member.id,\n proof_of_identity_type_ids: [],\n message: ''\n });\n\n /**\n * Callback triggered when any field has changed in the child form\n */\n const handleRefusalChanged = (field: string, value: string | Array) => {\n setData({\n ...data,\n [field]: value\n });\n };\n\n /**\n * Save the refusal to the API and send a result message to the parent component\n */\n const handleSaveRefusal = async (): Promise => {\n try {\n await ProofOfIdentityRefusalAPI.create(data);\n onSuccess(t('app.admin.supporting_documents_refusal_modal.refusal_successfully_sent'));\n } catch (e) {\n onError(t('app.admin.supporting_documents_refusal_modal.unable_to_send') + e);\n }\n };\n\n /**\n * Check if the refusal can be saved (i.e. is not empty)\n */\n const isPreventedSaveRefusal = (): boolean => {\n return !data.message || data.proof_of_identity_type_ids.length === 0;\n };\n\n return (\n \n \n \n );\n};\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Select from 'react-select';\nimport { FabInput } from '../base/fab-input';\nimport { ProofOfIdentityType } from '../../models/proof-of-identity-type';\nimport { Group } from '../../models/group';\nimport { SelectOption } from '../../models/select';\n\ninterface SupportingDocumentsTypeFormProps {\n groups: Array,\n proofOfIdentityType?: ProofOfIdentityType,\n onChange: (field: string, value: string | Array) => void,\n}\n\n/**\n * Form to set create/edit supporting documents type\n */\nexport const SupportingDocumentsTypeForm: React.FC = ({ groups, proofOfIdentityType, onChange }) => {\n const { t } = useTranslation('admin');\n\n /**\n * Convert all groups to the react-select format\n */\n const buildOptions = (): Array> => {\n return groups.map(t => {\n return { value: t.id, label: t.name };\n });\n };\n\n /**\n * Return the group(s) associated with the current type, formatted to match the react-select format\n */\n const groupsValues = (): Array> => {\n const res = [];\n const groupIds = proofOfIdentityType?.group_ids || [];\n if (groupIds.length > 0) {\n groups.forEach(t => {\n if (groupIds.indexOf(t.id) > -1) {\n res.push({ value: t.id, label: t.name });\n }\n });\n }\n return res;\n };\n\n /**\n * Callback triggered when the selection of group has changed.\n */\n const handleGroupsChange = (selectedOptions: Array>): void => {\n onChange('group_ids', selectedOptions.map(o => o.value));\n };\n\n /**\n * Callback triggered when the name has changed.\n */\n const handleNameChange = (value: string): void => {\n onChange('name', value);\n };\n\n return (\n
    \n
    \n {t('app.admin.settings.account.supporting_documents_type_form.type_form_info')}\n
    \n
    \n
    \n )} />\n \n \n
    \n );\n};\n","import React, { useState, useEffect } from 'react';\nimport AsyncSelect from 'react-select/async';\nimport { useTranslation } from 'react-i18next';\nimport MemberAPI from '../../api/member';\nimport { User } from '../../models/user';\nimport { SelectOption } from '../../models/select';\n\ninterface MemberSelectProps {\n defaultUser?: User,\n value?: User,\n onSelected?: (user: { id: number, name: string }) => void,\n noHeader?: boolean,\n hasError?: boolean\n}\n\n/**\n * This component renders the member select for manager.\n */\nexport const MemberSelect: React.FC = ({ defaultUser, value, onSelected, noHeader, hasError }) => {\n const { t } = useTranslation('public');\n const [option, setOption] = useState>();\n\n useEffect(() => {\n if (defaultUser) {\n setOption({ value: defaultUser.id, label: defaultUser.name });\n }\n }, []);\n\n useEffect(() => {\n if (!defaultUser && option) {\n onSelected({ id: option.value, name: option.label });\n }\n }, [defaultUser]);\n\n useEffect(() => {\n if (value && value?.id !== option?.value) {\n setOption({ value: value.id, label: value.name });\n }\n if (!value) {\n setOption(null);\n }\n }, [value]);\n\n /**\n * search members by name\n */\n const loadMembers = async (inputValue: string): Promise>> => {\n if (!inputValue) {\n return [];\n }\n const data = await MemberAPI.search(inputValue);\n return data.map(u => {\n return { value: u.id, label: u.name };\n });\n };\n\n /**\n * callback for handle select changed\n */\n const onChange = (v: SelectOption) => {\n setOption(v);\n onSelected({ id: v.value, name: v.label });\n };\n\n return (\n
    \n {!noHeader &&\n
    \n

    {t('app.public.member_select.select_a_member')}

    \n
    \n }\n \n
    \n );\n};\n\nMemberSelect.defaultProps = {\n hasError: false\n};\n","import React from 'react';\nimport { UseFormRegister } from 'react-hook-form';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { useTranslation } from 'react-i18next';\nimport { FormInput } from '../form/form-input';\nimport { FormState } from 'react-hook-form/dist/types/form';\n\ninterface PasswordInputProps {\n register: UseFormRegister,\n currentFormPassword: string,\n formState: FormState,\n}\n\n/**\n * Passwords inputs: new password and confirmation.\n */\nexport const PasswordInput = ({ register, currentFormPassword, formState }: PasswordInputProps) => {\n const { t } = useTranslation('shared');\n\n return (\n
    \n {\n if (value.length < 12) {\n return t('app.shared.password_input.password_too_short') as string;\n }\n return true;\n }\n }}\n formState={formState}\n label={t('app.shared.password_input.new_password')}\n type=\"password\" />\n {\n if (value !== currentFormPassword) {\n return t('app.shared.password_input.confirmation_mismatch') as string;\n }\n return true;\n }\n }}\n formState={formState}\n label={t('app.shared.password_input.confirm_password')}\n type=\"password\" />\n
    \n );\n};\n","import { Plan } from './plan';\nimport { TDateISO, TDateISODate } from '../typings/date-iso';\nimport { supportedNetworks, SupportedSocialNetwork } from './social-network';\n\nexport type UserRole = 'member' | 'manager' | 'admin';\n\ntype ProfileAttributesSocial = {\n [network in SupportedSocialNetwork]: string\n}\n\nexport interface User {\n id: number,\n username: string,\n email: string,\n group_id: number,\n role: UserRole\n name: string,\n need_completion: boolean,\n ip_address: string,\n mapped_from_sso?: string[],\n password?: string,\n password_confirmation?: string,\n cgu?: boolean, // Accepted terms and conditions?\n profile_attributes: ProfileAttributesSocial & {\n id: number,\n first_name: string,\n last_name: string,\n interest: string,\n software_mastered: string,\n phone: string,\n website: string,\n job: string,\n tours: Array,\n user_avatar_attributes: {\n id: number,\n attachment?: File,\n attachment_url?: string,\n attachment_files: FileList,\n _destroy?: boolean\n }\n },\n invoicing_profile_attributes: {\n id: number,\n address_attributes: {\n id: number,\n address: string\n },\n organization_attributes: {\n id: number,\n name: string,\n address_attributes: {\n id: number,\n address: string\n }\n },\n user_profile_custom_fields_attributes: Array<\n {\n id?: number,\n value: string,\n invoicing_profile_id: number,\n profile_custom_field_id: number\n }\n >\n },\n statistic_profile_attributes: {\n id: number,\n gender: string,\n birthday: TDateISODate\n training_ids: Array\n },\n subscribed_plan: Plan,\n subscription: {\n id: number,\n expired_at: TDateISO,\n canceled_at: TDateISO,\n stripe: boolean,\n plan: {\n id: number,\n base_name: string,\n name: string,\n interval: string,\n interval_count: number,\n amount: number\n }\n },\n training_credits: Array,\n machine_credits: Array<{ machine_id: number, hours_used: number }>,\n last_sign_in_at: TDateISO\n validated_at: TDateISO,\n tag_ids: Array\n}\n\ntype OrderingKey = 'last_name' | 'first_name' | 'email' | 'phone' | 'group' | 'plan' | 'id'\n\nexport interface UserIndexFilter {\n search?: string,\n filter?: 'inactive_for_3_years' | 'not_confirmed',\n order_by?: OrderingKey | `-${OrderingKey}`,\n page?: number,\n size?: number\n}\n\nconst socialMappings = supportedNetworks.map(network => {\n return { [`profile_attributes.${network}`]: `profile.${network}` };\n});\n\nexport const UserFieldMapping = Object.assign({\n 'profile_attributes.user_avatar_attributes.attachment': 'profile.avatar',\n 'statistic_profile_attributes.gender': 'profile.gender',\n 'profile_attributes.last_name': 'profile.last_name',\n 'profile_attributes.first_name': 'profile.first_name',\n 'statistic_profile_attributes.birthday': 'profile.birthday',\n 'profile_attributes.phone': 'profile.phone',\n username: 'user.username',\n email: 'user.email',\n 'invoicing_profile_attributes.address_attributes.address': 'profile.address',\n 'invoicing_profile_attributes.organization_attributes.name': 'profile.organization_name',\n 'invoicing_profile_attributes.organization_attributes.address_attributes.address': 'profile.organization_address',\n 'profile_attributes.website': 'profile.website',\n 'profile_attributes.job': 'profile.job',\n 'profile_attributes.interest': 'profile.interest',\n 'profile_attributes.software_mastered': 'profile.software_mastered',\n is_allow_contact: 'user.is_allow_contact',\n is_allow_newsletter: 'user.is_allow_newsletter',\n group_id: 'user.group_id'\n}, ...socialMappings);\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { Training, TrainingIndexFilter } from '../models/training';\nimport ApiLib from '../lib/api';\n\nexport default class TrainingAPI {\n static async index (filters?: TrainingIndexFilter): Promise> {\n const res: AxiosResponse> = await apiClient.get(`/api/trainings${ApiLib.filtersToQuery(filters)}`);\n return res?.data;\n }\n}\n","import apiClient from './clients/api-client';\nimport { AxiosResponse } from 'axios';\nimport { Tag } from '../models/tag';\n\nexport default class TagAPI {\n static async index (): Promise> {\n const res: AxiosResponse> = await apiClient.get('/api/tags');\n return res?.data;\n }\n}\n","import React, { useEffect, useState } from 'react';\nimport { react2angular } from 'react2angular';\nimport { useForm, useWatch, ValidateResult } from 'react-hook-form';\nimport { isNil as _isNil } from 'lodash';\nimport { User, UserFieldMapping } from '../../models/user';\nimport { IApplication } from '../../models/application';\nimport { Loader } from '../base/loader';\nimport { FormInput } from '../form/form-input';\nimport { useTranslation } from 'react-i18next';\nimport { GenderInput } from './gender-input';\nimport { ChangePassword } from './change-password';\nimport { PasswordInput } from './password-input';\nimport { FormSwitch } from '../form/form-switch';\nimport { FormRichText } from '../form/form-rich-text';\nimport MemberAPI from '../../api/member';\nimport { AvatarInput } from './avatar-input';\nimport { FabButton } from '../base/fab-button';\nimport { EditSocials } from '../socials/edit-socials';\nimport UserLib from '../../lib/user';\nimport AuthProviderAPI from '../../api/auth-provider';\nimport { FormSelect } from '../form/form-select';\nimport GroupAPI from '../../api/group';\nimport CustomAssetAPI from '../../api/custom-asset';\nimport { CustomAsset, CustomAssetName } from '../../models/custom-asset';\nimport { HtmlTranslate } from '../base/html-translate';\nimport TrainingAPI from '../../api/training';\nimport TagAPI from '../../api/tag';\nimport { FormMultiSelect } from '../form/form-multi-select';\nimport ProfileCustomFieldAPI from '../../api/profile-custom-field';\nimport { ProfileCustomField } from '../../models/profile-custom-field';\nimport { SettingName } from '../../models/setting';\nimport SettingAPI from '../../api/setting';\nimport { SelectOption } from '../../models/select';\n\ndeclare const Application: IApplication;\n\ninterface UserProfileFormProps {\n action: 'create' | 'update',\n size?: 'small' | 'large',\n user: User,\n className?: string,\n onError: (message: string) => void,\n onSuccess: (user: User) => void,\n showGroupInput?: boolean,\n showTermsAndConditionsInput?: boolean,\n showTrainingsInput?: boolean,\n showTagsInput?: boolean,\n}\n\n/**\n * Form component to create or update a user\n */\nexport const UserProfileForm: React.FC = ({ action, size, user, className, onError, onSuccess, showGroupInput, showTermsAndConditionsInput, showTrainingsInput, showTagsInput }) => {\n const { t } = useTranslation('shared');\n\n // regular expression to validate the input fields\n const phoneRegex = /^((00|\\+)\\d{2,3})?[\\d -]{4,14}$/;\n const urlRegex = /^(https?:\\/\\/)([^.]+)\\.(.{2,30})(\\/.*)*\\/?$/;\n\n const { handleSubmit, register, control, formState, setValue, reset } = useForm({ defaultValues: { ...user } });\n const output = useWatch({ control });\n\n const [isOrganization, setIsOrganization] = useState(!_isNil(user.invoicing_profile_attributes.organization_attributes));\n const [isLocalDatabaseProvider, setIsLocalDatabaseProvider] = useState(false);\n const [groups, setGroups] = useState[]>([]);\n const [termsAndConditions, setTermsAndConditions] = useState(null);\n const [profileCustomFields, setProfileCustomFields] = useState([]);\n const [requiredFieldsSettings, setRequiredFieldsSettings] = useState>(new Map());\n\n useEffect(() => {\n AuthProviderAPI.active().then(data => {\n setIsLocalDatabaseProvider(data.providable_type === 'DatabaseProvider');\n }).catch(error => onError(error));\n if (showGroupInput) {\n GroupAPI.index({ disabled: false }).then(data => {\n setGroups(buildOptions(data));\n }).catch(error => onError(error));\n }\n if (showTermsAndConditionsInput) {\n CustomAssetAPI.get(CustomAssetName.CguFile).then(cgu => {\n if (cgu?.custom_asset_file_attributes) setTermsAndConditions(cgu);\n }).catch(error => onError(error));\n }\n ProfileCustomFieldAPI.index().then(data => {\n const fData = data.filter(f => f.actived);\n setProfileCustomFields(fData);\n const userProfileCustomFields = fData.map(f => {\n const upcf = user?.invoicing_profile_attributes?.user_profile_custom_fields_attributes?.find(uf => uf.profile_custom_field_id === f.id);\n return upcf || {\n value: '',\n invoicing_profile_id: user.invoicing_profile_attributes.id,\n profile_custom_field_id: f.id\n };\n });\n setValue('invoicing_profile_attributes.user_profile_custom_fields_attributes', userProfileCustomFields);\n }).catch(error => onError(error));\n SettingAPI.query(['phone_required', 'address_required'])\n .then(settings => setRequiredFieldsSettings(settings))\n .catch(error => onError(error));\n }, []);\n\n /**\n * Convert the provided array of items to the react-select format\n */\n const buildOptions = (items: Array<{ id?: number, name: string }>): Array> => {\n return items.map(t => {\n return { value: t.id, label: t.name };\n });\n };\n\n /**\n * Asynchronously load the full list of enabled trainings to display in the drop-down select field\n */\n const loadTrainings = (inputValue: string, callback: (options: Array>) => void): void => {\n TrainingAPI.index({ disabled: false }).then(data => {\n callback(buildOptions(data));\n }).catch(error => onError(error));\n };\n\n /**\n * Asynchronously load the full list of tags to display in the drop-down select field\n */\n const loadTags = (inputValue: string, callback: (options: Array>) => void): void => {\n TagAPI.index().then(data => {\n callback(buildOptions(data));\n }).catch(error => onError(error));\n };\n\n /**\n * Callback triggered when the form is submitted: process with the user creation or update.\n */\n const onSubmit = (event: React.FormEvent) => {\n if (showTermsAndConditionsInput) {\n // When the form is submitted, we consider that the user should have accepted the terms and conditions,\n // so we mark the field as dirty, even if he doesn't touch it. Like that, the error message is displayed.\n setValue('cgu', !!output.cgu, { shouldDirty: true, shouldTouch: true });\n }\n\n return handleSubmit((data: User) => {\n MemberAPI[action](data)\n .then(res => {\n reset(res);\n onSuccess(res);\n })\n .catch((error) => { onError(error); });\n })(event);\n };\n\n /**\n * Check if the given field path should be disabled\n */\n const isDisabled = function (id: string) {\n // if the current provider is the local database, then all fields are enabled\n if (isLocalDatabaseProvider) {\n return false;\n }\n\n // if the current provider is not the local database, then fields are disabled based on their mapping status.\n return user.mapped_from_sso?.includes(UserFieldMapping[id]);\n };\n\n /**\n * Check if the user has accepted the terms and conditions\n */\n const checkAcceptTerms = function (value: boolean): ValidateResult {\n return value === true || (t('app.shared.user_profile_form.must_accept_terms') as string);\n };\n\n const userNetworks = new UserLib(user).getUserSocialNetworks();\n\n return (\n \n
    \n \n
    \n
    \n
    \n

    {t('app.shared.user_profile_form.personal_data')}

    \n \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n

    {t('app.shared.user_profile_form.account_data')}

    \n \n \n {isLocalDatabaseProvider &&
    \n { action === 'update' && }\n {action === 'create' && }\n
    }\n
    \n
    \n

    {t('app.shared.user_profile_form.organization_data')}

    \n \n {isOrganization &&
    \n \n \n \n \n {profileCustomFields.map((f, i) => {\n return ();\n })}\n
    }\n
    \n
    \n

    {t('app.shared.user_profile_form.profile_data')}

    \n
    \n \n \n
    \n
    \n \n \n
    \n
    \n
    \n

    {t('app.shared.user_profile_form.account_networks')}

    \n \n
    \n
    \n

    {t('app.shared.user_profile_form.preferences_data')}

    \n \n \n
    \n {showGroupInput &&
    \n \n
    }\n {showTrainingsInput &&
    \n \n
    }\n {showTagsInput &&
    \n \n
    }\n {showTermsAndConditionsInput && termsAndConditions &&
    \n }\n />\n
    }\n
    \n {t('app.shared.user_profile_form.save')}\n
    \n
    \n \n );\n};\n\nUserProfileForm.defaultProps = {\n size: 'large',\n showGroupInput: false,\n showTrainingsInput: false,\n showTermsAndConditionsInput: false,\n showTagsInput: false\n};\n\nconst UserProfileFormWrapper: React.FC = (props) => {\n return (\n \n \n \n );\n};\n\nApplication.Components.component('userProfileForm', react2angular(UserProfileFormWrapper, ['action', 'size', 'user', 'className', 'onError', 'onSuccess', 'showGroupInput', 'showTermsAndConditionsInput', 'showTagsInput', 'showTrainingsInput']));\n","import React, { useState, useEffect } from 'react';\nimport Switch from 'react-switch';\nimport _ from 'lodash';\nimport { useTranslation } from 'react-i18next';\nimport { User } from '../../models/user';\nimport { IApplication } from '../../models/application';\nimport { react2angular } from 'react2angular';\nimport MemberAPI from '../../api/member';\nimport { TDateISO } from '../../typings/date-iso';\n\ndeclare const Application: IApplication;\n\ninterface UserValidationProps {\n member: User\n onSuccess: (user: User, message: string) => void,\n onError: (message: string) => void,\n}\n\n/**\n * This component allows to configure boolean value for a setting.\n */\nexport const UserValidation: React.FC = ({ member, onSuccess, onError }) => {\n const { t } = useTranslation('admin');\n\n const [value, setValue] = useState(!!(member?.validated_at));\n\n useEffect(() => {\n setValue(!!(member?.validated_at));\n }, [member]);\n\n /**\n * Callback triggered when the 'switch' is changed.\n */\n const handleChanged = (_value: boolean) => {\n setValue(_value);\n const _member = _.clone(member);\n if (_value) {\n _member.validated_at = new Date().toISOString() as TDateISO;\n } else {\n _member.validated_at = null;\n }\n MemberAPI.validate(_member)\n .then((user: User) => {\n onSuccess(user, t(`app.admin.user_validation.${_value ? 'validate' : 'invalidate'}_member_success`));\n }).catch(err => {\n setValue(!_value);\n onError(t(`app.admin.user_validation.${_value ? 'validate' : 'invalidate'}_member_error`) + err);\n });\n };\n\n return (\n
    \n \n \n
    \n );\n};\n\nApplication.Components.component('userValidation', react2angular(UserValidation, ['member', 'onSuccess', 'onError']));\n","'use strict';\n\nApplication.Controllers.controller('AboutController', ['$scope', 'Setting', 'CustomAsset', function ($scope, Setting, CustomAsset) {\n /* PUBLIC SCOPE */\n\n Setting.get({ name: 'about_title' }, data => { $scope.aboutTitle = data.setting; });\n\n Setting.get({ name: 'about_body' }, data => { $scope.aboutBody = data.setting; });\n\n Setting.get({ name: 'about_contacts' }, data => { $scope.aboutContacts = data.setting; });\n\n Setting.get({ name: 'privacy_body' }, data => { $scope.privacyPolicy = data.setting; });\n\n // retrieve the CGU\n CustomAsset.get({ name: 'cgu-file' }, cgu => { $scope.cgu = cgu.custom_asset; });\n\n // retrieve the CGV\n CustomAsset.get({ name: 'cgv-file' }, cgv => { $scope.cgv = cgv.custom_asset; });\n}\n]);\n","/**\n * Controller used in abuses management page\n */\nApplication.Controllers.controller('AbusesController', ['$scope', '$state', 'Abuse', 'abusesPromise', 'dialogs', 'growl', '_t',\n function ($scope, $state, Abuse, abusesPromise, dialogs, growl, _t) {\n /* PUBLIC SCOPE */\n\n // List of all reported abuses\n $scope.abuses = [];\n\n /**\n * Callback handling a click on the ✓ button: confirm before delete\n */\n $scope.confirmProcess = function (abuseId) {\n dialogs.confirm(\n {\n resolve: {\n object () {\n return {\n title: _t('app.admin.manage_abuses.confirmation_required'),\n msg: _t('app.admin.manage_abuses.report_will_be_destroyed')\n };\n }\n }\n },\n function () { // cancel confirmed\n Abuse.remove({ id: abuseId }, function () { // successfully canceled\n growl.success(_t('app.admin.manage_abuses.report_removed'));\n Abuse.query({}, function (abuses) {\n $scope.abuses = abuses.abuses.filter(a => a.signaled_type === 'Project');\n });\n }\n , function () { // error while canceling\n growl.error(_t('app.admin.manage_abuses.failed_to_remove'));\n });\n }\n );\n };\n\n /* PRIVATE SCOPE */\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n // we display only abuses related to projects\n $scope.abuses = abusesPromise.abuses.filter(a => a.signaled_type === 'Project');\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n","/* eslint-disable\n camelcase,\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\n/* COMMON CODE */\n\n// list of supported authentication methods\nconst METHODS = {\n DatabaseProvider: 'local_database',\n OAuth2Provider: 'o_auth2',\n OpenIdConnectProvider: 'openid_connect'\n};\n\n/**\n * Iterate through the provided array and return the index of the requested element\n * @param elements {Array<{id:*}>}\n * @param id {*} id of the element to retrieve in the list\n * @returns {number} index of the requested element, in the provided array\n */\nconst findIdxById = function (elements, id) {\n return (elements.map(function (elem) { return elem.id; })).indexOf(id);\n};\n\n/**\n * Page listing all authentication providers\n */\nApplication.Controllers.controller('AuthentificationController', ['$scope', '$state', '$rootScope', 'dialogs', 'growl', 'authProvidersPromise', 'AuthProvider', '_t',\n function ($scope, $state, $rootScope, dialogs, growl, authProvidersPromise, AuthProvider, _t) {\n /* PUBLIC SCOPE */\n\n // full list of authentication providers\n $scope.providers = authProvidersPromise;\n\n /**\n * Translate the classname into an explicit textual message\n * @param type {string} Ruby polymorphic model classname\n * @returns {string}\n */\n $scope.getType = function (type) {\n const text = METHODS[type];\n if (typeof text !== 'undefined') {\n return _t(`app.admin.members.authentication_form.${text}`);\n } else {\n return _t('app.admin.members.authentication_form.unknown') + type;\n }\n };\n\n /**\n * Translate the status string into an explicit textual message\n * @param status {string} active | pending | previous\n * @returns {string}\n */\n $scope.getState = function (status) {\n switch (status) {\n case 'active': return _t('app.admin.members.authentication_form.active');\n case 'pending': return _t('app.admin.members.authentication_form.pending');\n case 'previous': return _t('app.admin.members.authentication_form.previous_provider');\n default: return _t('app.admin.members.authentication_form.unknown') + status;\n }\n };\n\n /**\n * Ask for confirmation then delete the specified provider\n * @param providers {Array} full list of authentication providers\n * @param provider {Object} provider to delete\n */\n $scope.destroyProvider = function (providers, provider) {\n dialogs.confirm(\n {\n resolve: {\n object () {\n return {\n title: _t('app.admin.members.authentication_form.confirmation_required'),\n msg: _t('app.admin.members.authentication_form.do_you_really_want_to_delete_the_TYPE_authentication_provider_NAME', { TYPE: $scope.getType(provider.providable_type), NAME: provider.name })\n };\n }\n }\n },\n function () {\n // the admin has confirmed, delete\n AuthProvider.delete(\n { id: provider.id },\n function () {\n providers.splice(findIdxById(providers, provider.id), 1);\n growl.success(_t('app.admin.members.authentication_form.authentication_provider_successfully_deleted'));\n },\n function () { growl.error(_t('app.admin.members.authentication_form.an_error_occurred_unable_to_delete_the_specified_provider')); }\n );\n }\n );\n };\n }\n\n]);\n\n/**\n * Page to add a new authentication provider\n */\nApplication.Controllers.controller('NewAuthenticationController', ['$scope', '$state', 'growl',\n function ($scope, $state, growl) {\n /**\n * Shows a success message forwarded from a child react component\n */\n $scope.onSuccess = function (message) {\n growl.success(message);\n $scope.cancel();\n };\n\n /**\n * Callback triggered by react components\n */\n $scope.onError = function (message) {\n growl.error(message);\n };\n\n $scope.cancel = function () { $state.go('app.admin.members'); };\n }\n]);\n\n/**\n * Page to edit an already added authentication provider\n */\nApplication.Controllers.controller('EditAuthenticationController', ['$scope', '$state', 'growl', 'providerPromise',\n function ($scope, $state, growl, providerPromise) {\n // parameters of the currently edited authentication provider\n $scope.provider = cleanProvider(providerPromise);\n\n /**\n * Shows a success message forwarded from a child react component\n */\n $scope.onSuccess = function (message) {\n growl.success(message);\n };\n\n /**\n * Callback triggered by react components\n */\n $scope.onError = function (message) {\n growl.error(message);\n };\n\n $scope.cancel = function () { $state.go('app.admin.members'); };\n\n // prepare the provider for the react-hook-form\n function cleanProvider (provider) {\n delete provider.$promise;\n delete provider.$resolved;\n return provider;\n }\n }\n]);\n","/* eslint-disable\n camelcase,\n handle-callback-err,\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\n/**\n * Controller used in the calendar management page\n */\n\nApplication.Controllers.controller('AdminCalendarController', ['$scope', '$state', '$uibModal', 'moment', 'AuthService', 'Availability', 'SlotsReservation', 'Setting', 'Export', 'growl', 'dialogs', 'bookingWindowStart', 'bookingWindowEnd', 'machinesPromise', 'plansPromise', 'groupsPromise', 'settingsPromise', '_t', 'uiCalendarConfig', 'CalendarConfig', 'Member', 'uiTourService',\n function ($scope, $state, $uibModal, moment, AuthService, Availability, SlotsReservation, Setting, Export, growl, dialogs, bookingWindowStart, bookingWindowEnd, machinesPromise, plansPromise, groupsPromise, settingsPromise, _t, uiCalendarConfig, CalendarConfig, Member, uiTourService) {\n /* PRIVATE STATIC CONSTANTS */\n\n // The calendar is divided in slots of 30 minutes\n const BASE_SLOT = '00:30:00';\n\n // The bookings can be positioned every half hours\n const BOOKING_SNAP = '00:30:00';\n\n // We do not allow the creation of slots that are not a multiple of 60 minutes\n const SLOT_MULTIPLE = parseInt(settingsPromise.slot_duration, 10);\n\n /* PUBLIC SCOPE */\n\n // list of the FabLab machines\n $scope.machines = machinesPromise;\n\n // currently selected availability\n $scope.availability = null;\n\n // corresponding fullCalendar item in the DOM\n $scope.availabilityDom = null;\n\n // Should we show the scheduled events in the calendar?\n $scope.eventsInCalendar = (settingsPromise.events_in_calendar === 'true');\n\n // bind the availabilities slots with full-Calendar events\n $scope.eventSources = [{\n url: '/api/availabilities',\n textColor: 'black'\n }];\n\n // fullCalendar (v2) configuration\n $scope.calendarConfig = CalendarConfig({\n slotDuration: BASE_SLOT,\n snapDuration: BOOKING_SNAP,\n selectable: true,\n selectHelper: true,\n minTime: moment.duration(moment(bookingWindowStart.setting.value).format('HH:mm:ss')),\n maxTime: moment.duration(moment(bookingWindowEnd.setting.value).format('HH:mm:ss')),\n select (start, end, jsEvent, view) {\n return calendarSelectCb(start, end, jsEvent, view);\n },\n eventClick (event, jsEvent, view) {\n return calendarEventClickCb(event, jsEvent, view);\n },\n eventRender (event, element, view) {\n return eventRenderCb(event, element, view);\n },\n viewRender (view, element) {\n return viewRenderCb(view, element);\n },\n loading (isLoading, view) {\n return loadingCb(isLoading, view);\n }\n });\n\n /**\n * Open a confirmation modal to cancel the booking of a user for the currently selected event.\n * @param slot_reservation {Object} reserved slot, as returned by /api/availabilities/:id/reservations\n */\n $scope.cancelBooking = function (slot_reservation) {\n // open a confirmation dialog\n dialogs.confirm(\n {\n resolve: {\n object () {\n return {\n title: _t('app.admin.calendar.confirmation_required'),\n msg: _t('app.admin.calendar.do_you_really_want_to_cancel_the_USER_s_reservation_the_DATE_at_TIME_concerning_RESERVATION'\n , { GENDER: getGender($scope.currentUser), USER: slot_reservation.user.name, DATE: moment(slot_reservation.start_at).format('L'), TIME: moment(slot_reservation.start_at).format('LT'), RESERVATION: slot_reservation.reservable.name })\n };\n }\n }\n },\n function () {\n // the admin has confirmed, cancel the reservation\n SlotsReservation.cancel(\n { id: slot_reservation.id },\n function (data, status) { // success\n // update the canceled_at attribute\n for (const resa of Array.from($scope.reservations)) {\n if (resa.id === data.id) {\n resa.canceled_at = data.canceled_at;\n break;\n }\n }\n // notify the admin\n return growl.success(_t('app.admin.calendar.reservation_was_successfully_cancelled'));\n },\n function (data, status) { // failed\n growl.error(_t('app.admin.calendar.reservation_cancellation_failed'));\n }\n );\n }\n );\n };\n\n /**\n * Open a confirmation modal to remove a machine for the currently selected availability,\n * except if it is the last machine of the reservation.\n * @param machine {Object} must contain the machine ID and name\n */\n $scope.removeMachine = function (machine) {\n if ($scope.availability.machine_ids.length === 1) {\n return growl.error(_t('app.admin.calendar.unable_to_remove_the_last_machine_of_the_slot_delete_the_slot_rather'));\n } else {\n // open a confirmation dialog\n return dialogs.confirm({\n resolve: {\n object () {\n return {\n title: _t('app.admin.calendar.confirmation_required'),\n msg: _t('app.admin.calendar.do_you_really_want_to_remove_MACHINE_from_this_slot', { GENDER: getGender($scope.currentUser), MACHINE: machine.name }) + ' ' +\n _t('app.admin.calendar.this_will_prevent_any_new_reservation_on_this_slot_but_wont_cancel_those_existing') + '
    ' +\n _t('app.admin.calendar.beware_this_cannot_be_reverted') + ''\n };\n }\n }\n }\n , function () {\n // the admin has confirmed, remove the machine\n const machines = $scope.availability.machine_ids;\n for (let m_id = 0; m_id < machines.length; m_id++) {\n const key = machines[m_id];\n if (m_id === machine.id) {\n machines.splice(key, 1);\n }\n }\n\n return Availability.update({ id: $scope.availability.id }, { availability: { machines_attributes: [{ id: machine.id, _destroy: true }] } }\n , function (data, status) { // success\n // update the machine_ids attribute\n $scope.availability.machine_ids = data.machine_ids;\n $scope.availability.title = data.title;\n uiCalendarConfig.calendars.calendar.fullCalendar('rerenderEvents');\n // notify the admin\n return growl.success(_t('app.admin.calendar.the_machine_was_successfully_removed_from_the_slot'));\n }\n , function (data, status) { // failed\n growl.error(_t('app.admin.calendar.deletion_failed'));\n }\n );\n });\n }\n };\n\n /**\n * Open a confirmation modal to remove a plan for the currently selected availability,\n * @param plan {Object} must contain the machine ID and name\n */\n $scope.removePlan = function (plan) {\n // open a confirmation dialog\n return dialogs.confirm({\n resolve: {\n object () {\n return {\n title: _t('app.admin.calendar.confirmation_required'),\n msg: _t('app.admin.calendar.do_you_really_want_to_remove_PLAN_from_this_slot', { GENDER: getGender($scope.currentUser), PLAN: plan.name })\n };\n }\n }\n },\n function () {\n // the admin has confirmed, remove the plan\n _.drop($scope.availability.plan_ids, plan.id);\n\n Availability.update({ id: $scope.availability.id }, { availability: { plans_attributes: [{ id: plan.id, _destroy: true }] } }\n , function (data, status) { // success\n // update the plan_ids attribute\n $scope.availability.plan_ids = data.plan_ids;\n $scope.availability.plans = availabilityPlans();\n uiCalendarConfig.calendars.calendar.fullCalendar('rerenderEvents');\n // notify the admin\n return growl.success(_t('app.admin.calendar.the_plan_was_successfully_removed_from_the_slot'));\n }\n , function (data, status) { // failed\n growl.error(_t('app.admin.calendar.deletion_failed'));\n }\n );\n });\n };\n\n /**\n * Callback to alert the admin that the export request was acknowledged and is\n * processing right now.\n */\n $scope.alertExport = function (type) {\n Export.status({ category: 'availabilities', type }).then(function (res) {\n if (!res.data.exists) {\n return growl.success(_t('app.admin.calendar.export_is_running_you_ll_be_notified_when_its_ready'));\n }\n });\n };\n\n /**\n * Mark the selected slot as unavailable for new reservations or allow reservations again on it\n */\n $scope.toggleLockReservations = function () {\n // first, define a shortcut to the lock property\n const locked = $scope.availability.lock;\n // then check if we'll allow reservations locking\n let prevent = !locked; // if currently locked, allow unlock anyway\n if (!locked) {\n prevent = false;\n angular.forEach($scope.reservations, function (r) {\n if (r.canceled_at === null) {\n return prevent = true;\n }\n }); // if currently unlocked and has any non-cancelled reservation, disallow locking\n }\n if (!prevent) {\n // open a confirmation dialog\n dialogs.confirm(\n {\n resolve: {\n object () {\n return {\n title: _t('app.admin.calendar.confirmation_required'),\n msg: locked ? _t('app.admin.calendar.do_you_really_want_to_allow_reservations') : _t('app.admin.calendar.do_you_really_want_to_block_this_slot')\n };\n }\n }\n },\n function () {\n // the admin has confirmed, lock/unlock the slot\n Availability.lock(\n { id: $scope.availability.id },\n { lock: !locked },\n function (data) { // success\n $scope.availability = data;\n growl.success(locked ? _t('app.admin.calendar.unlocking_success') : _t('app.admin.calendar.locking_success'));\n uiCalendarConfig.calendars.calendar.fullCalendar('refetchEvents');\n },\n function (error) { // failed\n growl.error(locked ? _t('app.admin.calendar.unlocking_failed') : _t('app.admin.calendar.locking_failed'));\n console.error(error);\n }\n );\n }\n );\n } else {\n return growl.error(_t('app.admin.calendar.unlockable_because_reservations'));\n }\n };\n\n /**\n * Confirm and destroy the slot in $scope.availability\n */\n $scope.removeSlot = function () {\n // open a confirmation dialog\n const modalInstance = $uibModal.open({\n animation: true,\n templateUrl: '/admin/calendar/deleteRecurrent.html',\n size: 'md',\n controller: 'DeleteRecurrentAvailabilityController',\n resolve: {\n availabilityPromise: ['Availability', function (Availability) { return Availability.get({ id: $scope.availability.id }).$promise; }]\n }\n });\n // once the dialog was closed, do things depending on the result\n modalInstance.result.then(function (res) {\n if (res.status === 'success') {\n $scope.availability = null;\n }\n for (const availability of res.availabilities) {\n uiCalendarConfig.calendars.calendar.fullCalendar('removeEvents', availability);\n }\n });\n };\n\n /**\n * Setup the feature-tour for the admin/calendar page.\n * This is intended as a contextual help (when pressing F1)\n */\n $scope.setupCalendarTour = function () {\n // get the tour defined by the ui-tour directive\n const uitour = uiTourService.getTourByName('calendar');\n uitour.createStep({\n selector: 'body',\n stepId: 'welcome',\n order: 0,\n title: _t('app.admin.tour.calendar.welcome.title'),\n content: _t('app.admin.tour.calendar.welcome.content'),\n placement: 'bottom',\n orphan: true\n });\n uitour.createStep({\n selector: '.admin-calendar .fc-view-container',\n stepId: 'agenda',\n order: 1,\n title: _t('app.admin.tour.calendar.agenda.title'),\n content: _t('app.admin.tour.calendar.agenda.content'),\n placement: 'right',\n popupClass: 'width-350'\n });\n if (AuthService.isAuthorized('admin')) {\n uitour.createStep({\n selector: '.admin-calendar .export-xls-button',\n stepId: 'export',\n order: 2,\n title: _t('app.admin.tour.calendar.export.title'),\n content: _t('app.admin.tour.calendar.export.content'),\n placement: 'left'\n });\n }\n uitour.createStep({\n selector: '.heading .import-ics-button',\n stepId: 'import',\n order: 3,\n title: _t('app.admin.tour.calendar.import.title'),\n content: _t('app.admin.tour.calendar.import.content'),\n placement: 'left'\n });\n uitour.createStep({\n selector: 'body',\n stepId: 'conclusion',\n order: 4,\n title: _t('app.admin.tour.conclusion.title'),\n content: _t('app.admin.tour.conclusion.content'),\n placement: 'bottom',\n orphan: true\n });\n // on tour end, save the status in database\n uitour.on('ended', function () {\n if (uitour.getStatus() === uitour.Status.ON && $scope.currentUser.profile_attributes.tours.indexOf('calendar') < 0) {\n Member.completeTour({ id: $scope.currentUser.id }, { tour: 'calendar' }, function (res) {\n $scope.currentUser.profile_attributes.tours = res.tours;\n });\n }\n });\n // if the user has never seen the tour, show him now\n if (settingsPromise.feature_tour_display !== 'manual' && $scope.currentUser.profile_attributes.tours.indexOf('calendar') < 0) {\n uitour.start();\n }\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {};\n\n /**\n * Return an enumerable meaninful string for the gender of the provider user\n * @param user {Object} Database user record\n * @return {string} 'male' or 'female'\n */\n const getGender = function (user) {\n if (user.statistic_profile_attributes) {\n if (user.statistic_profile_attributes.gender === 'true') { return 'male'; } else { return 'female'; }\n } else { return 'other'; }\n };\n\n /**\n * Return a list of plans classified by group\n *\n * @returns {array}\n */\n const availabilityPlans = function () {\n const plansClassifiedByGroup = [];\n const _plans = _.filter(plansPromise, function (p) { return _.includes($scope.availability.plan_ids, p.id); });\n for (const group of Array.from(groupsPromise)) {\n const groupObj = { id: group.id, name: group.name, plans: [] };\n for (const plan of Array.from(_plans)) {\n if (plan.group_id === group.id) { groupObj.plans.push(plan); }\n }\n if (groupObj.plans.length > 0) {\n plansClassifiedByGroup.push(groupObj);\n }\n }\n return plansClassifiedByGroup;\n };\n\n // Triggered when the admin drag on the agenda to create a new reservable slot.\n // @see http://fullcalendar.io/docs/selection/select_callback/\n //\n const calendarSelectCb = function (start, end, jsEvent, view) {\n start = moment.tz(start.toISOString(), Fablab.timezone);\n end = moment.tz(end.toISOString(), Fablab.timezone);\n if (view.name === 'month') {\n end = end.subtract(1, 'day').startOf('day');\n }\n\n // check if slot is not in the past\n const today = new Date();\n if (Math.trunc((start.valueOf() - today) / (60 * 1000)) < 0) {\n return dialogs.confirm({\n resolve: {\n object () {\n return {\n title: _t('app.admin.calendar.event_in_the_past'),\n msg: _t('app.admin.calendar.confirm_create_event_in_the_past')\n };\n }\n }\n },\n function () { // confirmed\n startAvailabilityCreation(start, end);\n }, function () { // canceled\n uiCalendarConfig.calendars.calendar.fullCalendar('unselect');\n });\n }\n\n startAvailabilityCreation(start, end);\n };\n\n /**\n * Start the process to create a new availability between the given start and end datetimes\n */\n const startAvailabilityCreation = function (start, end) {\n // check that the selected slot is an multiple of SLOT_MULTIPLE (ie. not decimal)\n const slots = Math.trunc((end.valueOf() - start.valueOf()) / (60 * 1000)) / SLOT_MULTIPLE;\n if (!Number.isInteger(slots)) {\n // otherwise, round it to upper decimal\n const upper = (Math.ceil(slots) || 1) * SLOT_MULTIPLE;\n end = moment(start).add(upper, 'minutes');\n }\n\n // then we open a modal window to let the admin specify the slot type\n const modalInstance = $uibModal.open({\n templateUrl: '/admin/calendar/eventModal.html',\n controller: 'CreateEventModalController',\n backdrop: 'static',\n keyboard: false,\n resolve: {\n start () { return start; },\n end () { return end; },\n slots () { return Math.ceil(slots); },\n machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }],\n trainingsPromise: ['Training', function (Training) { return Training.query().$promise; }],\n spacesPromise: ['Space', function (Space) { return Space.query().$promise; }],\n tagsPromise: ['Tag', function (Tag) { return Tag.query().$promise; }],\n plansPromise: ['Plan', function (Plan) { return Plan.query().$promise; }],\n groupsPromise: ['Group', function (Group) { return Group.query().$promise; }],\n slotDurationPromise: ['Setting', function (Setting) { return Setting.get({ name: 'slot_duration' }).$promise; }]\n }\n });\n // when the modal is closed, we send the slot to the server for saving\n modalInstance.result.then(\n function (availability) {\n uiCalendarConfig.calendars.calendar.fullCalendar(\n 'renderEvent',\n {\n id: availability.id,\n title: availability.title,\n start: availability.start_at,\n end: availability.end_at,\n textColor: 'black',\n backgroundColor: availability.backgroundColor,\n borderColor: availability.borderColor,\n tag_ids: availability.tag_ids,\n tags: availability.tags,\n machine_ids: availability.machine_ids,\n plan_ids: availability.plan_ids,\n slot_duration: availability.slot_duration\n },\n true\n );\n },\n function () { uiCalendarConfig.calendars.calendar.fullCalendar('unselect'); }\n );\n\n return uiCalendarConfig.calendars.calendar.fullCalendar('unselect');\n };\n\n /**\n * Triggered when the admin clicks on a availability slot in the agenda.\n * @see http://fullcalendar.io/docs/mouse/eventClick/\n */\n const calendarEventClickCb = function (event, jsEvent, view) {\n $scope.availability = event;\n $scope.availability.plans = availabilityPlans();\n\n // mark the side panel as available to be opened\n $('label.calendar-admin-info').removeClass('is-empty');\n\n if ($scope.availabilityDom) {\n $scope.availabilityDom.classList.remove('fc-selected');\n }\n $scope.availabilityDom = jsEvent.target.closest('.fc-event');\n $scope.availabilityDom.classList.add('fc-selected');\n\n // if the user has clicked on the delete event button, delete the event\n if ($(jsEvent.target).hasClass('remove-event')) {\n return $scope.removeSlot();\n // if the user has only clicked on the event, display its reservations\n } else {\n return Availability.reservations({ id: event.id }, function (reservations) { $scope.reservations = reservations; });\n }\n };\n\n /**\n * Triggered when fullCalendar tries to graphicaly render an event block.\n * Append the event tag into the block, just after the event title.\n * @see http://fullcalendar.io/docs/event_rendering/eventRender/\n */\n const eventRenderCb = function (event, element) {\n if (event.available_type !== 'event') {\n element.find('.fc-content').prepend('');\n }\n if (event.tags && event.tags.length > 0) {\n let html = '';\n for (const tag of Array.from(event.tags)) {\n html += `${tag.name} `;\n }\n element.find('.fc-title').append(`
    ${html}`);\n }\n };\n\n /**\n * Triggered when resource fetching starts/stops.\n * @see https://fullcalendar.io/docs/resource_data/loading/\n */\n const loadingCb = function (isLoading, view) {\n if (isLoading && uiCalendarConfig.calendars.calendar) {\n // we remove existing events when fetching starts to prevent duplicates\n uiCalendarConfig.calendars.calendar.fullCalendar('removeEvents');\n }\n };\n\n /**\n * Triggered when the view is changed\n * @see https://fullcalendar.io/docs/v3/viewRender#v2\n */\n const viewRenderCb = function (view, element) {\n // we unselect the current event to keep consistency\n $scope.availability = null;\n $scope.availabilityDom = null;\n\n // mark the side panel as available to hide because no event is selected anymore\n $('label.calendar-admin-info').addClass('is-empty');\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n\n]);\n\n/**\n * Controller used in the slot creation modal window\n */\nApplication.Controllers.controller('CreateEventModalController', ['$scope', '$uibModalInstance', '$sce', 'moment', 'start', 'end', 'slots', 'machinesPromise', 'Availability', 'trainingsPromise', 'spacesPromise', 'tagsPromise', 'plansPromise', 'groupsPromise', 'slotDurationPromise', 'growl', '_t',\n function ($scope, $uibModalInstance, $sce, moment, start, end, slots, machinesPromise, Availability, trainingsPromise, spacesPromise, tagsPromise, plansPromise, groupsPromise, slotDurationPromise, growl, _t) {\n // $uibModal parameter\n $scope.start = start;\n\n // $uibModal parameter\n $scope.end = end;\n\n // machines list\n $scope.machines = machinesPromise.filter(function (m) { return !m.disabled; });\n\n // trainings list\n $scope.trainings = trainingsPromise.filter(function (t) { return !t.disabled; });\n\n // spaces list\n $scope.spaces = spacesPromise.filter(function (s) { return !s.disabled; });\n\n // all tags list\n $scope.tags = tagsPromise;\n\n $scope.isOnlySubscriptions = false;\n $scope.selectedPlans = [];\n $scope.selectedPlansBinding = {};\n // list of plans, classified by group\n $scope.plansClassifiedByGroup = [];\n\n // machines associated with the created slot\n $scope.selectedMachines = [];\n $scope.selectedMachinesBinding = {};\n\n // training associated with the created slot\n $scope.selectedTraining = null;\n\n // space associated with the created slot\n $scope.selectedSpace = null;\n\n // UI step\n $scope.step = 1;\n\n // the user is not able to edit the ending time of the availability, unless he set the type to 'training'\n $scope.endDateReadOnly = true;\n\n // timepickers configuration\n $scope.timepickers = {\n start: {\n hstep: 1,\n mstep: 5\n },\n end: {\n hstep: 1,\n mstep: 5\n }\n };\n\n // slot details\n $scope.availability = {\n start_at: start,\n end_at: end,\n available_type: $scope.$root.modules.machines ? 'machines' : undefined, // default to machines if enabled\n tag_ids: [],\n is_recurrent: false,\n period: 'week',\n nb_periods: 1,\n end_date: undefined, // recurrence end\n slot_duration: parseInt(slotDurationPromise.setting.value, 10)\n };\n\n // recurrent slots\n $scope.occurrences = [];\n\n // localized name(s) of the reservable item(s)\n $scope.reservableName = '';\n\n // localized name(s) of the selected tag(s)\n $scope.tagsName = '';\n\n // localized name(s) of the selected plan(s)\n $scope.plansName = '';\n\n // number of slots for this availability\n $scope.slots_nb = slots;\n\n /**\n * Adds or removes the provided machine from the current slot\n * @param machine {Object}\n */\n $scope.toggleSelection = function (machine) {\n const index = $scope.selectedMachines.indexOf(machine);\n if (index > -1) {\n return $scope.selectedMachines.splice(index, 1);\n } else {\n return $scope.selectedMachines.push(machine);\n }\n };\n\n /**\n * Select/unselect all the machines\n */\n $scope.toggleAll = function () {\n const count = $scope.selectedMachines.length;\n $scope.selectedMachines = [];\n $scope.selectedMachinesBinding = {};\n if (count === 0) {\n $scope.machines.forEach(function (machine) {\n $scope.selectedMachines.push(machine);\n $scope.selectedMachinesBinding[machine.id] = true;\n });\n }\n };\n\n /**\n * Adds or removes the provided plan from the current slot\n * @param plan {Object}\n */\n $scope.toggleSelectPlan = function (plan) {\n const index = $scope.selectedPlans.indexOf(plan);\n if (index > -1) {\n return $scope.selectedPlans.splice(index, 1);\n } else {\n return $scope.selectedPlans.push(plan);\n }\n };\n\n /**\n * Select/unselect all the plans\n */\n $scope.toggleAllPlans = function () {\n const count = $scope.selectedPlans.length;\n $scope.selectedPlans = [];\n $scope.selectedPlansBinding = {};\n if (count === 0) {\n plansPromise.filter(p => !p.disabled).forEach(function (plan) {\n $scope.selectedPlans.push(plan);\n $scope.selectedPlansBinding[plan.id] = true;\n });\n }\n };\n\n /**\n * Callback for the modal window validation: save the slot and closes the modal\n */\n $scope.ok = function () {\n if ($scope.availability.available_type === 'machines') {\n if ($scope.selectedMachines.length > 0) {\n $scope.availability.machine_ids = $scope.selectedMachines.map(function (m) { return m.id; });\n } else {\n growl.error(_t('app.admin.calendar.you_should_select_at_least_a_machine'));\n return;\n }\n } else if ($scope.availability.available_type === 'training') {\n $scope.availability.training_ids = [$scope.selectedTraining.id];\n } else if ($scope.availability.available_type === 'space') {\n $scope.availability.space_ids = [$scope.selectedSpace.id];\n }\n if ($scope.availability.is_recurrent) {\n $scope.availability.occurrences = $scope.occurrences;\n }\n if ($scope.isOnlySubscriptions && $scope.selectedPlans.length > 0) {\n $scope.availability.plan_ids = $scope.selectedPlans.map(function (p) { return p.id; });\n }\n return Availability.save(\n { availability: $scope.availability },\n function (availability) { $uibModalInstance.close(availability); }\n );\n };\n\n /**\n * Move the modal UI to the next step\n */\n $scope.next = function () {\n if ($scope.step === 1) { return validateType(); }\n if ($scope.step === 2) { return validateSelection(); }\n if ($scope.step === 3) { return validateTimes(); }\n if ($scope.step === 5) { return validateRecurrence(); }\n return $scope.step++;\n };\n\n /**\n * Move the modal UI to the next step\n */\n $scope.previous = function () { return $scope.step--; };\n\n /**\n * Callback to cancel the slot creation\n */\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n\n /**\n * For training/space availabilities, set the maximum number of people allowed registering on this slot.\n * Also, set the default slot duration\n */\n $scope.setNbTotalPlaces = function () {\n if ($scope.availability.available_type === 'training') {\n $scope.availability.nb_total_places = $scope.selectedTraining.nb_total_places;\n } else if ($scope.availability.available_type === 'space') {\n $scope.availability.nb_total_places = $scope.selectedSpace.default_places;\n }\n };\n\n /*\n * Test if the current availability type is divided in slots\n */\n $scope.isTypeDivided = function () {\n return isTypeDivided($scope.availability.available_type);\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n if ($scope.trainings.length > 0) {\n $scope.selectedTraining = $scope.trainings[0];\n }\n if ($scope.spaces.length > 0) {\n $scope.selectedSpace = $scope.spaces[0];\n }\n\n // when disable is only subscriptions option, reset all selected plans\n $scope.$watch('isOnlySubscriptions', function (value) {\n if (!value) {\n $scope.selectedPlans = [];\n $scope.selectedPlansBinding = {};\n }\n });\n\n // group plans by Group\n for (const group of groupsPromise.filter(g => !g.disabled)) {\n const groupObj = { id: group.id, name: group.name, plans: [] };\n for (const plan of plansPromise.filter(g => !g.disabled)) {\n if (plan.group_id === group.id) { groupObj.plans.push(plan); }\n }\n if (groupObj.plans.length > 0) {\n $scope.plansClassifiedByGroup.push(groupObj);\n }\n }\n\n // When the slot duration changes, we increment the availability to match the value\n $scope.$watch('availability.slot_duration', function (newValue, oldValue, scope) {\n if (newValue === undefined) return;\n\n const startSlot = moment($scope.start);\n startSlot.add(newValue * $scope.slots_nb, 'minutes');\n $scope.end = startSlot.toDate();\n });\n\n // When the number of slot changes, we increment the availability to match the value\n $scope.$watch('slots_nb', function (newValue, oldValue, scope) {\n const startSlot = moment($scope.start);\n startSlot.add($scope.availability.slot_duration * newValue, 'minutes');\n $scope.end = startSlot.toDate();\n });\n\n // When we configure a machine/space availability, do not let the user change the end time, as the total\n // time must be dividable by $scope.availability.slot_duration minutes (base slot duration). For training availabilities, the user\n // can configure any duration as it does not matters.\n $scope.$watch('availability.available_type', function (newValue, oldValue, scope) {\n if (isTypeDivided(newValue)) {\n $scope.endDateReadOnly = true;\n const slotDuration = $scope.availability.slot_duration || parseInt(slotDurationPromise.setting.value, 10);\n const slotsCurrentRange = Math.trunc(($scope.end.valueOf() - $scope.start.valueOf()) / (60 * 1000)) / slotDuration;\n if (!Number.isInteger(slotsCurrentRange)) {\n // otherwise, round it to upper decimal\n const upperSlots = Math.ceil(slotsCurrentRange);\n const upper = upperSlots * $scope.availability.slot_duration;\n $scope.end = moment($scope.start).add(upper, 'minutes').toDate();\n $scope.slots_nb = upperSlots;\n } else {\n $scope.slots_nb = slotsCurrentRange;\n }\n $scope.availability.end_at = $scope.end;\n } else {\n $scope.endDateReadOnly = false;\n }\n });\n\n // When the start date is changed, if we are configuring a machine/space availability,\n // maintain the relative length of the slot (ie. change the end time accordingly)\n $scope.$watch('start', function (newValue, oldValue, scope) {\n // adjust the end time\n const endSlot = moment($scope.end);\n endSlot.add(moment(newValue).diff(oldValue), 'milliseconds');\n $scope.end = endSlot.toDate();\n\n // update availability object\n $scope.availability.start_at = $scope.start;\n });\n\n // Maintain consistency between the end time and the date object in the availability object\n $scope.$watch('end', function (newValue, oldValue, scope) {\n if (newValue.valueOf() !== oldValue.valueOf()) {\n // we prevent the admin from setting the end of the availability before its beginning\n if (moment($scope.start).add($scope.availability.slot_duration, 'minutes').isAfter(newValue)) {\n $scope.end = oldValue;\n }\n // update availability object\n $scope.availability.end_at = $scope.end;\n }\n });\n };\n\n /*\n * Test if the provided availability type is divided in slots\n */\n const isTypeDivided = function (type) {\n return ((type === 'machines') || (type === 'space'));\n };\n\n /**\n * Validates that a machine or more was/were selected before continuing to step 3 (adjust time + tags)\n */\n const validateSelection = function () {\n if ($scope.availability.available_type === 'machines') {\n if ($scope.selectedMachines.length === 0) {\n return growl.error(_t('app.admin.calendar.you_should_select_at_least_a_machine'));\n }\n }\n $scope.step++;\n };\n\n /**\n * Validates that the slots/availability date and times are correct\n */\n const validateTimes = function () {\n if (moment($scope.end).isSameOrBefore($scope.start)) {\n return growl.error(_t('app.admin.calendar.inconsistent_times'));\n }\n if ($scope.isTypeDivided()) {\n if (!$scope.slots_nb) {\n return growl.error(_t('app.admin.calendar.min_one_slot'));\n }\n if (!$scope.availability.slot_duration) {\n return growl.error(_t('app.admin.calendar.min_slot_duration'));\n }\n }\n $scope.step++;\n };\n\n /**\n * Validates that the recurrence parameters were correctly set before continuing to step 5 (summary)\n */\n const validateRecurrence = function () {\n if ($scope.availability.is_recurrent) {\n if (!$scope.availability.period) {\n return growl.error(_t('app.admin.calendar.select_period'));\n }\n if (!$scope.availability.nb_periods || $scope.availability.nb_periods < 1) {\n return growl.error(_t('app.admin.calendar.select_nb_period'));\n }\n if (!$scope.availability.end_date) {\n return growl.error(_t('app.admin.calendar.select_end_date'));\n }\n }\n // settings are ok\n computeOccurrences();\n computeNames();\n $scope.step++;\n };\n\n /**\n * Initialize some settings, depending on the availability type, before continuing to step 2 (select a machine/training/space)\n */\n const validateType = function () {\n if ($scope.availability.available_type === null || $scope.availability.available_type === undefined) {\n return growl.error(_t('app.admin.calendar.select_type'));\n }\n $scope.setNbTotalPlaces();\n if ($scope.availability.available_type === 'training') {\n $scope.availability.slot_duration = undefined;\n } else {\n $scope.availability.slot_duration = parseInt(slotDurationPromise.setting.value, 10);\n }\n $scope.step++;\n };\n\n /**\n * Compute the various occurrences of the availability, according to the recurrence settings\n */\n const computeOccurrences = function () {\n $scope.occurrences = [];\n\n if ($scope.availability.is_recurrent) {\n const date = moment($scope.availability.start_at);\n const diff = moment($scope.availability.end_at).diff($scope.availability.start_at);\n const end = moment($scope.availability.end_date).endOf('day');\n while (date.isBefore(end)) {\n const occur_end = moment(date).add(diff, 'ms');\n $scope.occurrences.push({\n start_at: date.toDate(),\n end_at: occur_end.toDate()\n });\n date.add($scope.availability.nb_periods, $scope.availability.period);\n }\n } else {\n $scope.occurrences.push({\n start_at: $scope.availability.start_at,\n end_at: $scope.availability.end_at\n });\n }\n };\n\n const computeNames = function () {\n $scope.reservableName = '';\n switch ($scope.availability.available_type) {\n case 'machines':\n $scope.reservableName = localizedList($scope.selectedMachines);\n break;\n case 'training':\n $scope.reservableName = `${$scope.selectedTraining.name}`;\n break;\n case 'space':\n $scope.reservableName = `${$scope.selectedSpace.name}`;\n break;\n default:\n $scope.reservableName = `${_t('app.admin.calendar.none')}`;\n }\n const tags = $scope.tags.filter(function (t) {\n return $scope.availability.tag_ids.indexOf(t.id) > -1;\n });\n $scope.tagsName = localizedList(tags);\n if ($scope.isOnlySubscriptions && $scope.selectedPlans.length > 0) {\n $scope.plansName = localizedList($scope.selectedPlans, 'base_name');\n }\n };\n\n const localizedList = function (items, attr = 'name') {\n if (items.length === 0) return `${_t('app.admin.calendar.none')}`;\n\n const names = items.map(function (i) { return $sce.trustAsHtml(`${i[attr]}`); });\n if (items.length > 1) return names.slice(0, -1).join(', ') + ` ${_t('app.admin.calendar.and')} ` + names[names.length - 1];\n\n return names[0];\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n\n/**\n * Controller used in the slot deletion modal window\n */\nApplication.Controllers.controller('DeleteRecurrentAvailabilityController', ['$scope', '$uibModalInstance', 'Availability', 'availabilityPromise', 'growl', '_t',\n function ($scope, $uibModalInstance, Availability, availabilityPromise, growl, _t) {\n // is the current slot (to be deleted) recurrent?\n $scope.isRecurrent = availabilityPromise.is_recurrent;\n\n // with recurrent slots: how many slots should we delete?\n $scope.deleteMode = 'single';\n\n /**\n * Confirmation callback\n */\n $scope.ok = function () {\n const { id, start_at, end_at } = availabilityPromise;\n // the admin has confirmed, delete the slot\n Availability.delete(\n { id, mode: $scope.deleteMode },\n function (res) {\n // delete success\n if (res.deleted > 1) {\n growl.success(_t(\n 'app.admin.calendar.slots_deleted',\n { START: moment(start_at).format('LL LT'), COUNT: res.deleted - 1 }\n ));\n } else {\n growl.success(_t(\n 'app.admin.calendar.slot_successfully_deleted',\n { START: moment(start_at).format('LL LT'), END: moment(end_at).format('LT') }\n ));\n }\n $uibModalInstance.close({\n status: 'success',\n availabilities: res.details.map(function (d) { return d.availability.id; })\n });\n },\n function (res) {\n // not everything was deleted\n const { data } = res;\n if (data.total > 1) {\n growl.warning(_t(\n 'app.admin.calendar.slots_not_deleted',\n { TOTAL: data.total, COUNT: data.total - data.deleted }\n ));\n } else {\n growl.error(_t(\n 'app.admin.calendar.unable_to_delete_the_slot',\n { START: moment(start_at).format('LL LT'), END: moment(end_at).format('LT') }\n ));\n }\n $uibModalInstance.close({\n status: 'failed',\n availabilities: data.details.filter(function (d) { return d.status; }).map(function (d) { return d.availability.id; })\n });\n });\n };\n\n /**\n * Cancellation callback\n */\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n }\n]);\n\n/**\n * Controller used in the iCalendar (ICS) imports management page\n */\n\nApplication.Controllers.controller('AdminICalendarController', ['$scope', 'iCalendars', 'ICalendar', 'dialogs', 'growl', '_t',\n function ($scope, iCalendars, ICalendar, dialogs, growl, _t) {\n // list of ICS sources\n $scope.calendars = iCalendars;\n\n // configuration of a new ICS source\n $scope.newCalendar = {\n color: undefined,\n text_color: undefined,\n url: undefined,\n name: undefined,\n text_hidden: false\n };\n\n /**\n * Save the new iCalendar in database\n */\n $scope.save = function () {\n ICalendar.save({}, { i_calendar: $scope.newCalendar }, function (data) {\n // success\n $scope.calendars.push(data);\n $scope.newCalendar.url = undefined;\n $scope.newCalendar.name = undefined;\n $scope.newCalendar.color = null;\n $scope.newCalendar.text_color = null;\n $scope.newCalendar.text_hidden = false;\n }, function (error) {\n // failed\n growl.error(_t('app.admin.icalendar.create_error'));\n console.error(error);\n });\n };\n\n /**\n * Return a CSS-like style of the given calendar configuration\n * @param calendar\n */\n $scope.calendarStyle = function (calendar) {\n return {\n 'border-color': calendar.color,\n color: calendar.text_color,\n width: calendar.text_hidden ? '50px' : 'auto',\n height: calendar.text_hidden ? '21px' : 'auto'\n };\n };\n\n /**\n * Delete the given calendar from the database\n * @param calendar\n */\n $scope.delete = function (calendar) {\n dialogs.confirm(\n {\n resolve: {\n object () {\n return {\n title: _t('app.admin.icalendar.confirmation_required'),\n msg: _t('app.admin.icalendar.confirm_delete_import')\n };\n }\n }\n },\n function () {\n ICalendar.delete(\n { id: calendar.id },\n function () {\n // success\n const idx = $scope.calendars.indexOf(calendar);\n $scope.calendars.splice(idx, 1);\n growl.info(_t('app.admin.icalendar.delete_success'));\n }, function (error) {\n // failed\n growl.error(_t('app.admin.icalendar.delete_failed'));\n console.error(error);\n }\n );\n }\n );\n };\n\n /**\n * Asynchronously re-fetches the events from the given calendar\n * @param calendar\n */\n $scope.sync = function (calendar) {\n ICalendar.sync(\n { id: calendar.id },\n function () {\n // success\n growl.info(_t('app.admin.icalendar.refresh'));\n }, function (error) {\n // failed\n growl.error(_t('app.admin.icalendar.sync_failed'));\n console.error(error);\n }\n );\n };\n }\n]);\n","/* COMMON CODE */\n\n// The validity per user defines how many time a user may ba able to use the same coupon\n// Here are the various options for this parameter\nconst VALIDITIES = ['once', 'forever'];\n\n/**\n * Controller used in the coupon creation page\n */\nApplication.Controllers.controller('NewCouponController', ['$scope', '$state', 'Coupon', 'growl', '_t',\n function ($scope, $state, Coupon, growl, _t) {\n // Values for the coupon currently created\n $scope.coupon = {\n active: true,\n type: 'percent_off'\n };\n\n // Options for the validity per user\n $scope.validities = VALIDITIES;\n\n // Default parameters for AngularUI-Bootstrap datepicker (used for coupon validity limit selection)\n $scope.datePicker = {\n format: Fablab.uibDateFormat,\n opened: false, // default: datePicker is not shown\n minDate: moment().toDate(),\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n /**\n * Return a localized human-readable name for the provided validity\n */\n $scope.validityName = function (validity) {\n return _t(`app.shared.coupon.${validity}`);\n };\n\n /**\n * Shows/hides the validity limit datepicker\n * @param $event {Object} jQuery event object\n */\n $scope.toggleDatePicker = function ($event) {\n $event.preventDefault();\n $event.stopPropagation();\n $scope.datePicker.opened = !$scope.datePicker.opened;\n };\n\n /**\n * Callback to save the new coupon in $scope.coupon and redirect the user to the listing page\n */\n $scope.saveCoupon = () =>\n Coupon.save({ coupon: $scope.coupon }, coupon => $state.go('app.admin.pricing')\n , function (err) {\n growl.error(_t('app.admin.coupons_new.unable_to_create_the_coupon_check_code_already_used'));\n console.error(err);\n });\n }\n]);\n\n/**\n * Controller used in the coupon edition page\n */\nApplication.Controllers.controller('EditCouponController', ['$scope', '$state', 'Coupon', 'couponPromise', '_t', 'growl',\n function ($scope, $state, Coupon, couponPromise, _t, growl) {\n /* PUBLIC SCOPE */\n\n // Used in the form to freeze unmodifiable fields\n $scope.mode = 'EDIT';\n\n // Coupon to edit\n $scope.coupon = couponPromise;\n\n // Options for the validity per user\n $scope.validities = VALIDITIES;\n\n // Mapping for validation errors\n $scope.errors = {};\n\n // Default parameters for AngularUI-Bootstrap datepicker (used for coupon validity limit selection)\n $scope.datePicker = {\n format: Fablab.uibDateFormat,\n opened: false, // default: datePicker is not shown\n minDate: moment().toDate(),\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n /**\n * Return a localized human-readable name for the provided validity\n */\n $scope.validityName = function (validity) {\n return _t(`app.shared.coupon.${validity}`);\n };\n\n /**\n * Shows/hides the validity limit datepicker\n * @param $event {Object} jQuery event object\n */\n $scope.toggleDatePicker = function ($event) {\n $event.preventDefault();\n $event.stopPropagation();\n $scope.datePicker.opened = !$scope.datePicker.opened;\n };\n\n /**\n * Callback to save the coupon's changes to the API\n */\n $scope.updateCoupon = function () {\n $scope.errors = {};\n Coupon.update({ id: $scope.coupon.id }, { coupon: $scope.coupon }, coupon => $state.go('app.admin.pricing')\n , function (err) {\n growl.error(_t('app.admin.coupons_edit.unable_to_update_the_coupon_an_error_occurred'));\n $scope.errors = err.data;\n });\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n // parse the date if any\n if (couponPromise.valid_until) {\n $scope.coupon.valid_until = moment(couponPromise.valid_until).toDate();\n }\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n","/* eslint-disable\n camelcase,\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\n/* COMMON CODE */\n\n/**\n * Provides a set of common properties and methods to the $scope parameter. They are used\n * in the various events' admin controllers.\n *\n * Provides :\n * - $scope.datePicker = {}\n * - $scope.event_themes = []\n * - $scope.submited(content)\n * - $scope.cancel()\n * - $scope.addFile()\n * - $scope.deleteFile(file)\n * - $scope.fileinputClass(v)\n * - $scope.toggleStartDatePicker($event)\n * - $scope.toggleEndDatePicker($event)\n * - $scope.toggleRecurrenceEnd(e)\n * - $scope.addPrice()\n * - $scope.removePrice(price, $event)\n * - $scope.handleEventChange(?)\n *\n * Requires :\n * - $scope.event.event_files_attributes = []\n * - $scope.event.\n * - $state (Ui-Router) [ 'app.public.events_list' ]\n */\nclass EventsController {\n constructor ($scope, $state) {\n // default parameters for AngularUI-Bootstrap datepicker\n $scope.datePicker = {\n format: Fablab.uibDateFormat,\n startOpened: false, // default: datePicker is not shown\n endOpened: false,\n recurrenceEndOpened: false,\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n // themes of the current event\n $scope.event_themes = $scope.event.event_theme_ids;\n\n /**\n * For use with ngUpload (https://github.com/twilson63/ngUpload).\n * Intended to be the callback when an upload is done: any raised error will be stacked in the\n * $scope.alerts array. If everything goes fine, the user is redirected to the project page.\n * @param content {Object} JSON - The upload's result\n */\n $scope.submited = function (content) {\n $scope.onSubmited(content);\n };\n\n /**\n * Changes the user's view to the events list page\n */\n $scope.cancel = function () { $state.go('app.public.events_list'); };\n\n /**\n * For use with 'ng-class', returns the CSS class name for the uploads previews.\n * The preview may show a placeholder or the content of the file depending on the upload state.\n * @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules)\n */\n $scope.fileinputClass = function (v) {\n if (v) {\n return 'fileinput-exists';\n } else {\n return 'fileinput-new';\n }\n };\n\n /**\n * This will create a single new empty entry into the event's attachements list.\n */\n $scope.addFile = function () { $scope.event.event_files_attributes.push({}); };\n\n /**\n * This will remove the given file from the event's attachements list. If the file was previously uploaded\n * to the server, it will be marked for deletion on the server. Otherwise, it will be simply truncated from\n * the attachements array.\n * @param file {Object} the file to delete\n */\n $scope.deleteFile = function (file) {\n const index = $scope.event.event_files_attributes.indexOf(file);\n if (file.id != null) {\n return file._destroy = true;\n } else {\n return $scope.event.event_files_attributes.splice(index, 1);\n }\n };\n\n /**\n * Show/Hide the \"start\" datepicker (open the drop down/close it)\n */\n $scope.toggleStartDatePicker = function ($event) {\n $event.preventDefault();\n $event.stopPropagation();\n return $scope.datePicker.startOpened = !$scope.datePicker.startOpened;\n };\n\n /**\n * Show/Hide the \"end\" datepicker (open the drop down/close it)\n */\n $scope.toggleEndDatePicker = function ($event) {\n $event.preventDefault();\n $event.stopPropagation();\n return $scope.datePicker.endOpened = !$scope.datePicker.endOpened;\n };\n\n /**\n * Masks/displays the recurrence pane allowing the admin to set the current event as recursive\n */\n $scope.toggleRecurrenceEnd = function (e) {\n e.preventDefault();\n e.stopPropagation();\n return $scope.datePicker.recurrenceEndOpened = !$scope.datePicker.recurrenceEndOpened;\n };\n\n /**\n * Initialize a new price item in the additional prices list\n */\n $scope.addPrice = function () {\n $scope.event.prices.push({\n category: null,\n amount: null\n });\n };\n\n /**\n * Remove the price or mark it as 'to delete'\n */\n $scope.removePrice = function (price, event) {\n event.preventDefault();\n event.stopPropagation();\n if (price.id) {\n price._destroy = true;\n } else {\n const index = $scope.event.prices.indexOf(price);\n $scope.event.prices.splice(index, 1);\n }\n };\n\n /**\n * When the theme selection has changes, extract the IDs to populate the form\n * @param themes {Array}\n */\n $scope.handleEventChange = function (themes) {\n $scope.event_themes = themes.map(t => t.id);\n };\n }\n}\n\n/**\n * Controller used in the events listing page (admin view)\n */\nApplication.Controllers.controller('AdminEventsController', ['$scope', '$state', 'dialogs', '$uibModal', 'growl', 'AuthService', 'Event', 'Category', 'EventTheme', 'AgeRange', 'PriceCategory', 'eventsPromise', 'categoriesPromise', 'themesPromise', 'ageRangesPromise', 'priceCategoriesPromise', '_t', 'Member', 'uiTourService', 'settingsPromise',\n function ($scope, $state, dialogs, $uibModal, growl, AuthService, Event, Category, EventTheme, AgeRange, PriceCategory, eventsPromise, categoriesPromise, themesPromise, ageRangesPromise, priceCategoriesPromise, _t, Member, uiTourService, settingsPromise) {\n /* PUBLIC SCOPE */\n\n // By default, the pagination mode is activated to limit the page size\n $scope.paginateActive = true;\n\n // The events displayed on the page\n $scope.events = eventsPromise;\n\n // Current virtual page\n $scope.page = 1;\n\n // Temporary datastore for creating new elements\n $scope.inserted = {\n category: null,\n theme: null,\n age_range: null\n };\n\n // List of categories for the events\n $scope.categories = categoriesPromise;\n\n // List of events themes\n $scope.themes = themesPromise;\n\n // List of age ranges\n $scope.ageRanges = ageRangesPromise;\n\n // List of price categories for the events\n $scope.priceCategories = priceCategoriesPromise;\n\n // Default: we display all events (no restriction)\n $scope.eventsScope =\n { selected: '' };\n\n // default tab: events list\n $scope.tabs = { active: 0 };\n\n /**\n * Adds a bucket of events to the bottom of the page, grouped by month\n */\n $scope.loadMoreEvents = function () {\n $scope.page += 1;\n return Event.query({ page: $scope.page, scope: $scope.eventsScope.selected }, function (data) {\n $scope.events = $scope.events.concat(data);\n return paginationCheck(data, $scope.events);\n });\n };\n\n /**\n * Saves a new element / Update an existing one to the server (form validation callback)\n * @param model {string} model name\n * @param data {Object} element name\n * @param [id] {number} element id, in case of update\n */\n $scope.saveElement = function (model, data, id) {\n if (id != null) {\n return getModel(model)[0].update({ id }, data);\n } else {\n return getModel(model)[0].save(data, function (resp) { getModel(model)[1][getModel(model)[1].length - 1].id = resp.id; });\n }\n };\n\n /**\n * Deletes the element at the specified index\n * @param model {string} model name\n * @param index {number} element index in the $scope[model] array\n */\n $scope.removeElement = function (model, index) {\n if ((model === 'category') && (getModel(model)[1].length === 1)) {\n growl.error(_t('app.admin.events.at_least_one_category_is_required') + ' ' + _t('app.admin.events.unable_to_delete_the_last_one'));\n return false;\n }\n if (getModel(model)[1][index].related_to > 0) {\n growl.error(_t('app.admin.events.unable_to_delete_ELEMENT_already_in_use_NUMBER_times', { ELEMENT: model, NUMBER: getModel(model)[1][index].related_to }));\n return false;\n }\n return dialogs.confirm({\n resolve: {\n object () {\n return {\n title: _t('app.admin.events.confirmation_required'),\n msg: _t('app.admin.events.do_you_really_want_to_delete_this_ELEMENT', { ELEMENT: model })\n };\n }\n }\n }\n , function () { // delete confirmed\n getModel(model)[0].delete(getModel(model)[1][index], null, function () { getModel(model)[1].splice(index, 1); }\n , function () { growl.error(_t('app.admin.events.unable_to_delete_an_error_occured')); });\n });\n };\n\n /**\n * Creates a new empty entry in the $scope[model] array\n * @param model {string} model name\n */\n $scope.addElement = function (model) {\n $scope.inserted[model] = {\n name: '',\n related_to: 0\n };\n return getModel(model)[1].push($scope.inserted[model]);\n };\n\n /**\n * Removes the newly inserted but not saved element / Cancel the current element modification\n * @param model {string} model name\n * @param rowform {Object} see http://vitalets.github.io/angular-xeditable/\n * @param index {number} element index in the $scope[model] array\n */\n $scope.cancelElement = function (model, rowform, index) {\n if (getModel(model)[1][index].id != null) {\n return rowform.$cancel();\n } else {\n return getModel(model)[1].splice(index, 1);\n }\n };\n\n /**\n * Open a modal dialog allowing the definition of a new price category.\n * Save it once filled and handle the result.\n */\n $scope.newPriceCategory = function () {\n $uibModal.open({\n templateUrl: '/admin/events/price_form.html',\n size: 'md',\n resolve: {\n category () { return {}; }\n },\n controller: 'PriceCategoryController'\n }).result.finally(null).then(function (p_cat) {\n // save the price category to the API\n PriceCategory.save(p_cat, function (cat) {\n $scope.priceCategories.push(cat);\n return growl.success(_t('app.admin.events.price_category_successfully_created'));\n }\n , function (err) {\n growl.error(_t('app.admin.events.unable_to_add_the_price_category_check_name_already_used'));\n return console.error(err);\n });\n });\n };\n /**\n * Update the given price category with the new properties\n * to specify in a modal dialog\n * @param index {number} index of the caterory in the $scope.priceCategories array\n * @param id {number} price category ID, must match the ID of the category at the index specified above\n */\n $scope.editPriceCategory = function (id, index) {\n if ($scope.priceCategories[index].id !== id) {\n return growl.error(_t('app.admin.events.unexpected_error_occurred_please_refresh'));\n } else {\n return $uibModal.open({\n templateUrl: '/admin/events/price_form.html',\n size: 'md',\n resolve: {\n category () { return $scope.priceCategories[index]; }\n },\n controller: 'PriceCategoryController'\n }).result.finally(null).then(function (p_cat) {\n // update the price category to the API\n PriceCategory.update({ id }, { price_category: p_cat }, function (cat) {\n $scope.priceCategories[index] = cat;\n return growl.success(_t('app.admin.events.price_category_successfully_updated'));\n }\n , function (err) {\n growl.error(_t('app.admin.events.unable_to_update_the_price_category'));\n return console.error(err);\n });\n });\n }\n };\n\n /**\n * Delete the given price category from the API\n * @param index {number} index of the caterory in the $scope.priceCategories array\n * @param id {number} price category ID, must match the ID of the category at the index specified above\n */\n $scope.removePriceCategory = function (id, index) {\n if ($scope.priceCategories[index].id !== id) {\n return growl.error(_t('app.admin.events.unexpected_error_occurred_please_refresh'));\n } else if ($scope.priceCategories[index].events > 0) {\n return growl.error(_t('app.admin.events.unable_to_delete_this_price_category_because_it_is_already_used'));\n } else {\n return dialogs.confirm(\n {\n resolve: {\n object () {\n return {\n title: _t('app.admin.events.confirmation_required'),\n msg: _t('app.admin.events.do_you_really_want_to_delete_this_price_category')\n };\n }\n }\n },\n function () { // delete confirmed\n PriceCategory.remove(\n { id },\n function () { // successfully deleted\n growl.success(_t('app.admin.events.price_category_successfully_deleted'));\n $scope.priceCategories.splice(index, 1);\n },\n function () { growl.error(_t('app.admin.events.price_category_deletion_failed')); }\n );\n }\n );\n }\n };\n\n /**\n * Triggered when the admin changes the events filter (all, passed, future).\n * We request the first page of corresponding events to the API\n */\n $scope.changeScope = function () {\n Event.query({ page: 1, scope: $scope.eventsScope.selected }, function (data) {\n $scope.events = data;\n return paginationCheck(data, $scope.events);\n });\n return $scope.page = 1;\n };\n\n /**\n * Setup the feature-tour for the admin/events page.\n * This is intended as a contextual help (when pressing F1)\n */\n $scope.setupEventsTour = function () {\n // get the tour defined by the ui-tour directive\n const uitour = uiTourService.getTourByName('events');\n uitour.createStep({\n selector: 'body',\n stepId: 'welcome',\n order: 0,\n title: _t('app.admin.tour.events.welcome.title'),\n content: _t('app.admin.tour.events.welcome.content'),\n placement: 'bottom',\n orphan: true\n });\n uitour.createStep({\n selector: '.events-management .events-list',\n stepId: 'list',\n order: 1,\n title: _t('app.admin.tour.events.list.title'),\n content: _t('app.admin.tour.events.list.content'),\n placement: 'top'\n });\n uitour.createStep({\n selector: '.events-management .events-list-filter',\n stepId: 'filter',\n order: 2,\n title: _t('app.admin.tour.events.filter.title'),\n content: _t('app.admin.tour.events.filter.content'),\n placement: 'bottom'\n });\n if (AuthService.isAuthorized('admin')) {\n uitour.createStep({\n selector: '.events-management .events-categories',\n stepId: 'categories',\n order: 3,\n title: _t('app.admin.tour.events.categories.title'),\n content: _t('app.admin.tour.events.categories.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.events-management .events-themes',\n stepId: 'themes',\n order: 4,\n title: _t('app.admin.tour.events.themes.title'),\n content: _t('app.admin.tour.events.themes.content'),\n placement: 'top'\n });\n uitour.createStep({\n selector: '.events-management .events-age-ranges',\n stepId: 'ages',\n order: 5,\n title: _t('app.admin.tour.events.ages.title'),\n content: _t('app.admin.tour.events.ages.content'),\n placement: 'top'\n });\n uitour.createStep({\n selector: '.events-management .prices-tab',\n stepId: 'prices',\n order: 6,\n title: _t('app.admin.tour.events.prices.title'),\n content: _t('app.admin.tour.events.prices.content'),\n placement: 'bottom'\n });\n }\n uitour.createStep({\n selector: 'body',\n stepId: 'conclusion',\n order: 7,\n title: _t('app.admin.tour.conclusion.title'),\n content: _t('app.admin.tour.conclusion.content'),\n placement: 'bottom',\n orphan: true\n });\n // on step change, change the active tab if needed\n uitour.on('stepChanged', function (nextStep) {\n if (nextStep.stepId === 'list' || nextStep.stepId === 'filter') { $scope.tabs.active = 0; }\n if (nextStep.stepId === 'categories' || nextStep.stepId === 'ages') { $scope.tabs.active = 1; }\n if (nextStep.stepId === 'prices') { $scope.tabs.active = 2; }\n });\n // on tour end, save the status in database\n uitour.on('ended', function () {\n if (uitour.getStatus() === uitour.Status.ON && $scope.currentUser.profile_attributes.tours.indexOf('events') < 0) {\n Member.completeTour({ id: $scope.currentUser.id }, { tour: 'events' }, function (res) {\n $scope.currentUser.profile_attributes.tours = res.tours;\n });\n }\n });\n // if the user has never seen the tour, show him now\n if (settingsPromise.feature_tour_display !== 'manual' && $scope.currentUser.profile_attributes.tours.indexOf('events') < 0) {\n uitour.start();\n }\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n paginationCheck(eventsPromise, $scope.events);\n };\n\n /**\n * Check if all events are already displayed OR if the button 'load more events'\n * is required\n * @param lastEvents {Array} last events loaded onto the diplay (ie. last \"page\")\n * @param events {Array} full list of events displayed on the page (not only the last retrieved)\n */\n const paginationCheck = function (lastEvents, events) {\n if (lastEvents.length > 0) {\n if (events.length >= lastEvents[0].nb_total_events) {\n return $scope.paginateActive = false;\n } else {\n return $scope.paginateActive = true;\n }\n } else {\n return $scope.paginateActive = false;\n }\n };\n\n /**\n * Return the model and the datastore matching the given name\n * @param name {string} 'category', 'theme' or 'age_range'\n * @return {[Object, Array]} model and datastore\n */\n const getModel = function (name) {\n switch (name) {\n case 'category': return [Category, $scope.categories];\n case 'theme': return [EventTheme, $scope.themes];\n case 'age_range': return [AgeRange, $scope.ageRanges];\n default: return [null, []];\n }\n };\n\n // init the controller (call at the end !)\n return initialize();\n }\n\n]);\n\n/**\n * Controller used in the reservations listing page for a specific event\n */\nApplication.Controllers.controller('ShowEventReservationsController', ['$scope', 'eventPromise', 'reservationsPromise', function ($scope, eventPromise, reservationsPromise) {\n // retrieve the event from the ID provided in the current URL\n $scope.event = eventPromise;\n\n // list of reservations for the current event\n $scope.reservations = reservationsPromise;\n\n /**\n * Test if the provided reservation has been cancelled\n * @param reservation {Reservation}\n * @returns {boolean}\n */\n $scope.isCancelled = function (reservation) {\n return !!(reservation.slots_reservations_attributes[0].canceled_at);\n };\n}]);\n\n/**\n * Controller used in the event creation page\n */\nApplication.Controllers.controller('NewEventController', ['$scope', '$state', 'CSRF', 'categoriesPromise', 'themesPromise', 'ageRangesPromise', 'priceCategoriesPromise', '_t',\n function ($scope, $state, CSRF, categoriesPromise, themesPromise, ageRangesPromise, priceCategoriesPromise, _t) {\n CSRF.setMetaTags();\n\n // API URL where the form will be posted\n $scope.actionUrl = '/api/events/';\n\n // Form action on the above URL\n $scope.method = 'post';\n\n // List of categories for the events\n $scope.categories = categoriesPromise;\n\n // List of events themes\n $scope.themes = themesPromise;\n\n // List of age ranges\n $scope.ageRanges = ageRangesPromise;\n\n // List of availables price's categories\n $scope.priceCategories = priceCategoriesPromise;\n\n // Default event parameters\n $scope.event = {\n event_files_attributes: [],\n start_date: new Date(),\n end_date: new Date(),\n start_time: new Date(),\n end_time: new Date(),\n all_day: true,\n recurrence: 'none',\n category_id: null,\n prices: []\n };\n\n // Possible types of recurrences for an event\n $scope.recurrenceTypes = [\n { label: _t('app.admin.events_new.none'), value: 'none' },\n { label: _t('app.admin.events_new.every_days'), value: 'day' },\n { label: _t('app.admin.events_new.every_week'), value: 'week' },\n { label: _t('app.admin.events_new.every_month'), value: 'month' },\n { label: _t('app.admin.events_new.every_year'), value: 'year' }\n ];\n\n // triggered when the new event form was submitted to the API and have received an answer\n $scope.onSubmited = function (content) {\n if ((content.id == null)) {\n $scope.alerts = [];\n angular.forEach(content, function (v, k) {\n angular.forEach(v, function (err) { $scope.alerts.push({ msg: k + ': ' + err, type: 'danger' }); });\n });\n } else {\n $state.go('app.public.events_list');\n }\n };\n\n // Using the EventsController\n return new EventsController($scope, $state);\n }\n]);\n\n/**\n * Controller used in the events edition page\n */\nApplication.Controllers.controller('EditEventController', ['$scope', '$state', '$transition$', 'CSRF', 'eventPromise', 'categoriesPromise', 'themesPromise', 'ageRangesPromise', 'priceCategoriesPromise', '$uibModal', 'growl', '_t',\n function ($scope, $state, $transition$, CSRF, eventPromise, categoriesPromise, themesPromise, ageRangesPromise, priceCategoriesPromise, $uibModal, growl, _t) {\n /* PUBLIC SCOPE */\n\n // API URL where the form will be posted\n $scope.actionUrl = `/api/events/${$transition$.params().id}`;\n\n // Form action on the above URL\n $scope.method = 'put';\n\n // Retrieve the event details, in case of error the user is redirected to the events listing\n $scope.event = eventPromise;\n\n // We'll keep track of the initial dates here, for later comparison\n $scope.initialDates = {};\n\n // List of categories for the events\n $scope.categories = categoriesPromise;\n\n // List of available price's categories\n $scope.priceCategories = priceCategoriesPromise;\n\n // List of events themes\n $scope.themes = themesPromise;\n\n // List of age ranges\n $scope.ageRanges = ageRangesPromise;\n\n // Default edit-mode for periodic event\n $scope.editMode = 'single';\n\n // show edit-mode modal if event is recurrent\n $scope.isShowEditModeModal = $scope.event.recurrence_events.length > 0;\n\n $scope.editRecurrent = function (e) {\n if ($scope.isShowEditModeModal && $scope.event.recurrence_events.length > 0) {\n e.preventDefault();\n\n // open a choice edit-mode dialog\n const modalInstance = $uibModal.open({\n animation: true,\n templateUrl: '/events/editRecurrent.html',\n size: 'md',\n controller: 'EditRecurrentEventController',\n resolve: {\n editMode: function () { return $scope.editMode; },\n initialDates: function () { return $scope.initialDates; },\n currentEvent: function () { return $scope.event; }\n }\n });\n // submit form event by edit-mode\n modalInstance.result.then(function (res) {\n $scope.isShowEditModeModal = false;\n $scope.editMode = res.editMode;\n e.target.click();\n });\n }\n };\n\n // triggered when the edit event form was submitted to the API and have received an answer\n $scope.onSubmited = function (data) {\n if (data.total === data.updated) {\n if (data.updated > 1) {\n growl.success(_t(\n 'app.admin.events_edit.events_updated',\n { COUNT: data.updated - 1 }\n ));\n } else {\n growl.success(_t(\n 'app.admin.events_edit.event_successfully_updated'\n ));\n }\n } else {\n if (data.total > 1) {\n growl.warning(_t(\n 'app.admin.events_edit.events_not_updated',\n { TOTAL: data.total, COUNT: data.total - data.updated }\n ));\n if (_.find(data.details, { error: 'EventPriceCategory' })) {\n growl.error(_t(\n 'app.admin.events_edit.error_deleting_reserved_price'\n ));\n } else {\n growl.error(_t(\n 'app.admin.events_edit.other_error'\n ));\n }\n } else {\n growl.error(_t(\n 'app.admin.events_edit.unable_to_update_the_event'\n ));\n if (data.details[0].error === 'EventPriceCategory') {\n growl.error(_t(\n 'app.admin.events_edit.error_deleting_reserved_price'\n ));\n } else {\n growl.error(_t(\n 'app.admin.events_edit.other_error'\n ));\n }\n }\n }\n $state.go('app.public.events_list');\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n CSRF.setMetaTags();\n\n // init the dates to JS objects\n $scope.event.start_date = moment($scope.event.start_date).toDate();\n $scope.event.end_date = moment($scope.event.end_date).toDate();\n\n $scope.initialDates = {\n start: new Date($scope.event.start_date.valueOf()),\n end: new Date($scope.event.end_date.valueOf())\n };\n\n // Using the EventsController\n return new EventsController($scope, $state);\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n\n/**\n * Controller used in the event edit-mode modal window\n */\nApplication.Controllers.controller('EditRecurrentEventController', ['$scope', '$uibModalInstance', 'editMode', 'growl', 'initialDates', 'currentEvent', '_t',\n function ($scope, $uibModalInstance, editMode, growl, initialDates, currentEvent, _t) {\n // with recurrent slots: how many slots should we update?\n $scope.editMode = editMode;\n\n /**\n * Confirmation callback\n */\n $scope.ok = function () {\n $uibModalInstance.close({\n editMode: $scope.editMode\n });\n };\n\n /**\n * Test if any of the dates of the event has changed\n */\n $scope.hasDateChanged = function () {\n return (!moment(initialDates.start).isSame(currentEvent.start_date, 'day') || !moment(initialDates.end).isSame(currentEvent.end_date, 'day'));\n };\n\n /**\n * Cancellation callback\n */\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n }\n]);\n","/* eslint-disable\n camelcase,\n no-return-assign,\n no-undef,\n no-unreachable,\n no-unused-vars,\n n/no-callback-literal,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS205: Consider reworking code to avoid use of IIFEs\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\nApplication.Controllers.controller('GraphsController', ['$scope', '$state', '$rootScope', '$transitions', 'es', 'Statistics', '_t',\n function ($scope, $state, $rootScope, $transitions, es, Statistics, _t) {\n /* PRIVATE STATIC CONSTANTS */\n\n // height of the HTML/SVG charts elements in pixels\n const CHART_HEIGHT = 500;\n\n // Label of the charts' horizontal axes\n const X_AXIS_LABEL = _t('app.admin.stats_graphs.date');\n\n // Label of the charts' vertical axes\n const Y_AXIS_LABEL = _t('app.admin.stats_graphs.number');\n\n // Colors for the line charts. Each new line uses the next color in this array\n const CHART_COLORS = ['#b35a94', '#1c5794', '#00b49e', '#6fac48', '#ebcf4a', '#fd7e33', '#ca3436', '#a26e3a'];\n\n /* PUBLIC SCOPE */\n\n // ui-view transitions optimization: if true, the charts will never be refreshed\n $scope.preventRefresh = false;\n\n // statistics structure in elasticSearch\n $scope.statistics = [];\n\n // statistics data recovered from elasticSearch\n $scope.data = null;\n\n // default interval: one day\n $scope.display =\n { interval: 'week' };\n\n // active tab will be set here\n $scope.selectedIndex = null;\n\n // ui-bootstrap active tab index\n $scope.selectedTab = 0;\n\n // for palmares graphs, filters values are stored here\n $scope.ranking = {\n sortCriterion: 'ca',\n groupCriterion: 'subType'\n };\n\n // default: we do not open the datepicker menu\n $scope.datePicker =\n { show: false };\n\n // datePicker parameters for interval beginning\n $scope.datePickerStart = {\n format: Fablab.uibDateFormat,\n opened: false, // default: datePicker is not shown\n minDate: null,\n maxDate: moment().subtract(1, 'day').toDate(),\n selected: moment().utc().subtract(1, 'months').subtract(1, 'day').startOf('day').toDate(),\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n // datePicker parameters for interval ending\n $scope.datePickerEnd = {\n format: Fablab.uibDateFormat,\n opened: false, // default: datePicker is not shown\n minDate: null,\n maxDate: moment().subtract(1, 'day').toDate(),\n selected: moment().subtract(1, 'day').endOf('day').toDate(),\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n /**\n * Callback to open the datepicker (interval start)\n * @param {Object} jQuery event object\n */\n $scope.toggleStartDatePicker = $event => toggleDatePicker($event, $scope.datePickerStart);\n\n /**\n * Callback to open the datepicker (interval end)\n * @param {Object} jQuery event object\n */\n $scope.toggleEndDatePicker = $event => toggleDatePicker($event, $scope.datePickerEnd);\n\n /**\n * Callback called when the active tab is changed.\n * Recover the current tab and store its value in $scope.selectedIndex\n * @param tab {Object} elasticsearch statistic structure\n * @param index {number} index of the tab in the $scope.statistics array\n */\n $scope.setActiveTab = function (tab, index) {\n $scope.selectedIndex = tab;\n $scope.selectedTab = index;\n $scope.ranking.groupCriterion = 'subType';\n if (tab.ca) {\n $scope.ranking.sortCriterion = 'ca';\n } else {\n $scope.ranking.sortCriterion = tab.types[0].key;\n }\n return refreshChart();\n };\n\n /**\n * Returns true if the provided tab must be hidden due to some global or local configuration\n * @param tab {Object} elasticsearch statistic structure (from statistic_indices table)\n */\n $scope.hiddenTab = function (tab) {\n if (tab.graph) {\n return !((tab.es_type_key === 'subscription' && !$rootScope.modules.plans) ||\n (tab.es_type_key === 'training' && !$rootScope.modules.trainings) ||\n (tab.es_type_key === 'machine' && !$rootScope.modules.machines));\n }\n return false;\n };\n\n /**\n * Callback to close the date-picking popup and refresh the results\n */\n $scope.validateDateChange = function () {\n $scope.datePicker.show = false;\n return refreshChart();\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n Statistics.query(function (stats) {\n $scope.statistics = stats;\n // watch the interval changes to refresh the graph\n $scope.$watch(scope => scope.display.interval\n , (newValue, oldValue) => refreshChart());\n $scope.$watch(scope => scope.ranking.sortCriterion\n , (newValue, oldValue) => refreshChart());\n $scope.$watch(scope => scope.ranking.groupCriterion\n , (newValue, oldValue) => refreshChart());\n return refreshChart();\n\n // set the default tab to \"machines\" if \"subscriptions\" are disabled\n if (!$rootScope.modules.plans) {\n const idx = $scope.statistics.findIndex(s => s.es_type_key === 'machine');\n $scope.setActiveTab($scope.statistics[idx], idx);\n } else {\n const idx = $scope.statistics.findIndex(s => s.es_type_key === 'subscription');\n $scope.setActiveTab($scope.statistics[idx], idx);\n }\n });\n\n // workaround for angular-bootstrap::tabs behavior: on tab deletion, another tab will be selected\n // which will cause every tabs to reload, one by one, when the view is closed\n $transitions.onStart({ to: 'app.admin.stats_graphs' }, function (trans) {\n if (Object.keys(trans.from().params).length === 0) {\n return $scope.preventRefresh = true;\n }\n });\n };\n\n /**\n * Generic function to toggle a bootstrap datePicker\n * @param $event {Object} jQuery event object\n * @param datePicker {Object} settings object of the concerned datepicker. Must have an 'opened' property\n */\n const toggleDatePicker = function ($event, datePicker) {\n $event.preventDefault();\n $event.stopPropagation();\n return datePicker.opened = !datePicker.opened;\n };\n\n /**\n * Query elasticSearch according to the current parameters and update the chart\n */\n const refreshChart = function () {\n if ($scope.selectedIndex && !$scope.preventRefresh) {\n return query($scope.selectedIndex, function (aggregations, error) {\n if (error) {\n return console.error(error);\n } else {\n if ($scope.selectedIndex.graph.chart_type !== 'discreteBarChart') {\n $scope.data = formatAggregations(aggregations);\n return angular.forEach($scope.data, (datum, key) => updateChart($scope.selectedIndex.graph.chart_type, datum, key));\n } else {\n $scope.data = formatRankingAggregations(aggregations, $scope.selectedIndex.graph.limit, $scope.ranking.groupCriterion);\n return updateChart($scope.selectedIndex.graph.chart_type, $scope.data.ranking, $scope.selectedIndex.es_type_key);\n }\n }\n });\n }\n };\n\n /**\n * Callback used in NVD3 to print timestamps as literal dates on the X axis\n */\n const xAxisTickFormatFunction = function (d, x, y) {\n /* WARNING !! These tests (typeof/instanceof) may become broken on nvd3 update */\n if ($scope.display.interval === 'day') {\n if ((typeof d === 'number') || d instanceof Date) {\n return d3.time.format(Fablab.d3DateFormat)(moment(d).toDate());\n } else { // typeof d == 'string'\n return d;\n }\n } else if ($scope.display.interval === 'week') {\n if ((typeof x === 'number') || d instanceof Date) {\n return d3.time.format(_t('app.admin.stats_graphs.week_short') + ' %U')(moment(d).toDate());\n } else if (typeof d === 'number') {\n return _t('app.admin.stats_graphs.week_of_START_to_END', { START: moment(d).format('L'), END: moment(d).add(6, 'days').format('L') });\n } else { // typeof d == 'string'\n return d;\n }\n } else if ($scope.display.interval === 'month') {\n if (typeof d === 'number') {\n const label = moment(d).format('MMMM YYYY');\n return label.substr(0, 1).toUpperCase() + label.substr(1).toLowerCase();\n } else { // typeof d == 'string'\n return d;\n }\n }\n };\n\n /**\n * Format aggregations as retuned by elasticSearch to an understandable format for NVD3\n * @param aggs {Object} as returned by elasticsearch\n */\n const formatAggregations = function (aggs) {\n const format = {};\n\n angular.forEach(aggs, function (type, type_key) { // go through aggs[$TYPE] where $TYPE = month|year|hour|booking|...\n format[type_key] = [];\n if (type.subgroups) {\n return angular.forEach(type.subgroups.buckets, subgroup => // go through aggs.$TYPE.subgroups.buckets where each bucket represent a $SUBTYPE\n angular.forEach($scope.selectedIndex.types, function (cur_type) { // in the mean time, go through the types of the current index (active tab) ...\n if (cur_type.key === type_key) { // ... looking for the type matching $TYPE\n return (() => {\n const result = [];\n for (let it_st = 0, end = cur_type.subtypes.length - 1; it_st <= end; it_st++) { // when we've found it, iterate over its subtypes ...\n const cur_subtype = cur_type.subtypes[it_st];\n if (subgroup.key === cur_subtype.key) { // ... which match $SUBTYPE\n // then we construct NVD3 dataSource according to these information\n const dataSource = {\n values: [],\n key: cur_subtype.label,\n total: 0,\n color: CHART_COLORS[it_st],\n area: true\n };\n // finally, we iterate over 'intervals' buckets witch contains\n // per date aggregations for our current dataSource\n angular.forEach(subgroup.intervals.buckets, function (interval) {\n dataSource.values.push({\n x: interval.key,\n y: interval.total.value\n });\n return dataSource.total += parseInt(interval.total.value);\n });\n dataSource.key += ` (${dataSource.total})`;\n result.push(format[type_key].push(dataSource));\n } else {\n result.push(undefined);\n }\n }\n return result;\n })();\n }\n })\n );\n }\n });\n return format;\n };\n\n /**\n * Format aggregations for ranking charts to an understandable format for NVD3\n * @param aggs {Object} as returned by elasticsearch\n * @param limit {number} limit the number of stats in the bar chart\n * @param typeKey {String} field name witch results are grouped by\n */\n const formatRankingAggregations = function (aggs, limit, typeKey) {\n const format =\n { ranking: [] };\n\n let it = 0;\n while (it < aggs.subgroups.buckets.length) {\n const bucket = aggs.subgroups.buckets[it];\n const dataSource = {\n values: [],\n key: getRankingLabel(bucket.key, typeKey),\n color: CHART_COLORS[it],\n area: true\n };\n dataSource.values.push({\n x: getRankingLabel(bucket.key, typeKey),\n y: bucket.total.value\n });\n format.ranking.push(dataSource);\n it++;\n }\n const getY = object => object.values[0].y;\n format.ranking = stableSort(format.ranking, 'DESC', getY).slice(0, limit);\n for (let i = 0, end = format.ranking.length; i <= end; i++) {\n if (typeof format.ranking[i] === 'undefined') { format.ranking.splice(i, 1); }\n }\n return format;\n };\n\n /**\n * For BarCharts, return the label for a given bar\n * @param key {string} raw value of the label\n * @param typeKey {string} name of the field the results are grouped by\n */\n const getRankingLabel = function (key, typeKey) {\n if ($scope.selectedIndex) {\n if (typeKey === 'subType') {\n for (const type of Array.from($scope.selectedIndex.types)) {\n for (const subtype of Array.from(type.subtypes)) {\n if (subtype.key === key) {\n return subtype.label;\n }\n }\n }\n } else {\n for (const field of Array.from($scope.selectedIndex.additional_fields)) {\n if (field.key === typeKey) {\n switch (field.data_type) {\n case 'date': return moment(key).format('LL'); break;\n case 'list': return key.name; break;\n default: return key;\n }\n }\n }\n }\n }\n };\n\n /**\n * Prepare the elasticSearch query for the stats matching the current controller's parameters\n * @param index {{id:{number}, es_type_key:{string}, label:{string}, table:{boolean}, additional_fields:{Array},\n * types:{Array}, graph:{Object}}} elasticSearch type in stats index to query\n * @param callback {function} function be to run after results were retrieved,\n * it will receive two parameters : results {Array}, error {String} (if any)\n */\n const query = function (index, callback) {\n // invalid callback handeling\n if (typeof (callback) !== 'function') {\n console.error('[graphsController::query] Error: invalid callback provided');\n return;\n }\n if (!index) {\n callback([], '[graphsController::query] Error: invalid index provided');\n return;\n }\n\n if (index.graph.chart_type !== 'discreteBarChart') {\n // list statistics types\n const stat_types = [];\n for (const t of Array.from(index.types)) {\n if (t.graph) {\n stat_types.push(t.key);\n }\n }\n\n // exception handeling\n if (stat_types.length === 0) {\n callback([], 'Error: Unable to retrieve any graphical statistic types in the provided index');\n }\n\n let type_it = 0;\n const results = {};\n let error = '';\n const recursiveCb = function () {\n if (type_it < stat_types.length) {\n return queryElasticStats(index.es_type_key, stat_types[type_it], function (prevResults, prevError) {\n if (prevError) {\n console.error(`[graphsController::query] ${prevError}`);\n error += `\\n${prevError}`;\n }\n results[stat_types[type_it]] = prevResults;\n type_it++;\n return recursiveCb();\n });\n } else {\n return callback(results);\n }\n };\n return recursiveCb();\n } else { // palmares (ranking)\n return queryElasticRanking(index.es_type_key, $scope.ranking.groupCriterion, $scope.ranking.sortCriterion, function (results, error) {\n if (error) {\n return callback([], error);\n } else {\n return callback(results);\n }\n });\n }\n };\n\n /**\n * Run the elasticSearch query to retreive the /stats/type aggregations\n * @param esType {String} elasticSearch document type (subscription|machine|training|...)\n * @param statType {String} statistics type (year|month|hour|booking|...)\n * @param callback {function} function be to run after results were retrieved,\n * it will receive two parameters : results {Array}, error {String} (if any)\n */\n const queryElasticStats = function (esType, statType, callback) {\n // handle invalid callback\n if (typeof (callback) !== 'function') {\n console.error('[graphsController::queryElasticStats] Error: invalid callback provided');\n return;\n }\n if (!esType || !statType) {\n callback([], '[graphsController::queryElasticStats] Error: invalid parameters provided');\n }\n\n // run query\n return es.search({\n index: 'stats',\n type: esType,\n searchType: 'query_then_fetch',\n size: 0,\n 'stat-type': statType,\n 'custom-query': '',\n 'start-date': moment($scope.datePickerStart.selected).format(),\n 'end-date': moment($scope.datePickerEnd.selected).format(),\n body: buildElasticAggregationsQuery(statType, $scope.display.interval, moment($scope.datePickerStart.selected), moment($scope.datePickerEnd.selected))\n }\n , function (error, response) {\n if (error) {\n return callback([], `Error: something unexpected occurred during elasticSearch query: ${error}`);\n } else {\n return callback(response.aggregations);\n }\n });\n };\n\n /**\n * For ranking displays, run the elasticSearch query to retreive the /stats/type aggregations\n * @param esType {string} elasticSearch document type (subscription|machine|training|...)\n * @param groupKey {string} statistics subtype or custom field\n * @param sortKey {string} statistics type or 'ca'\n * @param callback {function} function be to run after results were retrieved,\n * it will receive two parameters : results {Array}, error {String} (if any)\n */\n const queryElasticRanking = function (esType, groupKey, sortKey, callback) {\n // handle invalid callback\n if (typeof (callback) !== 'function') {\n return console.error('[graphsController::queryElasticRanking] Error: invalid callback provided');\n }\n if (!esType || !groupKey || !sortKey) {\n return callback([], '[graphsController::queryElasticRanking] Error: invalid parameters provided');\n }\n\n // run query\n return es.search({\n index: 'stats',\n type: esType,\n searchType: 'query_then_fetch',\n size: 0,\n body: buildElasticAggregationsRankingQuery(groupKey, sortKey, moment($scope.datePickerStart.selected), moment($scope.datePickerEnd.selected))\n }\n , function (error, response) {\n if (error) {\n return callback([], `Error: something unexpected occurred during elasticSearch query: ${error}`);\n } else {\n return callback(response.aggregations);\n }\n });\n };\n\n /**\n * Parse a final elastic results bucket and return a D3 compatible object\n * @param bucket {{key_as_string:{String}, key:{Number}, doc_count:{Number}, total:{{value:{Number}}}}} interval bucket\n */\n const parseElasticBucket = bucket => [bucket.key, bucket.total.value];\n\n /**\n * Build an object representing the content of the REST-JSON query to elasticSearch, based on the parameters\n * currently defined for data aggegations.\n * @param type {String} statistics type (visit|rdv|rating|ca|plan|account|search|...)\n * @param interval {String} statistics interval (year|quarter|month|week|day|hour|minute|second)\n * @param intervalBegin {moment} statitics interval beginning (moment.js type)\n * @param intervalEnd {moment} statitics interval ending (moment.js type)\n */\n const buildElasticAggregationsQuery = function (type, interval, intervalBegin, intervalEnd) {\n const q = {\n query: {\n bool: {\n must: [\n {\n match: { type }\n },\n {\n range: {\n date: {\n gte: intervalBegin.format(),\n lte: intervalEnd.format()\n }\n }\n }\n ]\n }\n },\n aggregations: {\n subgroups: {\n terms: {\n field: 'subType'\n }, // TODO allow aggregate by custom field\n aggregations: {\n intervals: {\n date_histogram: {\n field: 'date',\n interval,\n min_doc_count: 0,\n extended_bounds: {\n min: intervalBegin.valueOf(),\n max: intervalEnd.valueOf()\n }\n },\n aggregations: {\n total: {\n sum: {\n field: 'stat'\n }\n }\n }\n }\n }\n }\n }\n };\n\n // scale weeks on sunday as nvd3 supports only these weeks\n if (interval === 'week') {\n q.aggregations.subgroups.aggregations.intervals.date_histogram.offset = '-1d';\n // scale days to UTC time\n } else if (interval === 'day') {\n const offset = moment().utcOffset();\n q.aggregations.subgroups.aggregations.intervals.date_histogram.offset = (-offset) + 'm';\n }\n return q;\n };\n\n /**\n * Build an object representing the content of the REST-JSON query to elasticSearch, based on the parameters\n * currently defined for data aggegations.\n * @param groupKey {String} statistics subtype or custom field\n * @param sortKey {String} statistics type or 'ca'\n * @param intervalBegin {moment} statitics interval beginning (moment.js type)\n * @param intervalEnd {moment} statitics interval ending (moment.js type)\n */\n const buildElasticAggregationsRankingQuery = function (groupKey, sortKey, intervalBegin, intervalEnd) {\n const q = {\n query: {\n bool: {\n must: [\n {\n range: {\n date: {\n gte: intervalBegin.format(),\n lte: intervalEnd.format()\n }\n }\n },\n {\n term: {\n type: 'booking'\n }\n }\n ]\n }\n },\n aggregations: {\n subgroups: {\n terms: {\n field: groupKey,\n size: 10,\n order: {\n total: 'desc'\n }\n },\n aggregations: {\n top_events: {\n top_hits: {\n size: 1,\n sort: [\n { ca: 'desc' }\n ]\n }\n },\n total: {\n sum: {\n field: 'stat'\n }\n }\n }\n }\n }\n };\n\n // results must be sorted and limited later by angular\n if (sortKey !== 'ca') {\n angular.forEach(q.query.bool.must, function (must) {\n if (must.term) {\n return must.term.type = sortKey;\n }\n });\n } else {\n q.aggregations.subgroups.aggregations.total.sum.field = sortKey;\n }\n\n return q;\n };\n\n /**\n * Redraw the NDV3 chart using the provided data\n * @param chart_type {String} stackedAreaChart|discreteBarChart|lineChart\n * @param data {Array} array of NVD3 dataSources\n * @param type {String} which chart to update (statistic type key)\n */\n const updateChart = function (chart_type, data, type) {\n const id = `#chart-${type} svg`;\n\n // clean old charts\n d3.selectAll(id + ' > *').remove();\n\n return nv.addGraph(function () {\n // no data or many dates, display line charts\n let chart;\n if ((data.length === 0) || ((data[0].values.length > 1) && (chart_type !== 'discreteBarChart'))) {\n if (chart_type === 'stackedAreaChart') {\n chart = nv.models.stackedAreaChart().useInteractiveGuideline(true);\n } else {\n chart = nv.models.lineChart().useInteractiveGuideline(true);\n }\n\n if (data.length > 0) {\n if ($scope.display.interval === 'day') {\n setTimeScale(chart.xAxis, chart.xScale, [d3.time.day, data[0].values.length]);\n } else if ($scope.display.interval === 'week') {\n setTimeScale(chart.xAxis, chart.xScale, [d3.time.week, data[0].values.length]);\n } else if ($scope.display.interval === 'month') {\n setTimeScale(chart.xAxis, chart.xScale, [d3.time.month, data[0].values.length]);\n }\n }\n\n chart.xAxis.tickFormat(xAxisTickFormatFunction);\n chart.yAxis.tickFormat(d3.format('d'));\n\n chart.xAxis.axisLabel(X_AXIS_LABEL);\n chart.yAxis.axisLabel(Y_AXIS_LABEL);\n\n // only one date, display histograms\n } else {\n chart = nv.models.discreteBarChart();\n chart.tooltip.enabled(false);\n chart.showValues(true);\n chart.x(d => d.label);\n chart.y(d => d.value);\n data = prepareDataForBarChart(data, type);\n }\n\n // common for each charts\n chart.margin({ left: 100, right: 100 });\n chart.noData(_t('app.admin.stats_graphs.no_data_for_this_period'));\n chart.height(CHART_HEIGHT);\n\n // add new chart to the page\n d3.select(id).datum(data).transition().duration(350).call(chart);\n\n // resize the graph when the page is resized\n nv.utils.windowResize(chart.update);\n // return the chart\n return chart;\n });\n };\n\n /**\n * Given an NVD3 line chart axis, scale it to display ordinated dates, according to the given arguments\n */\n const setTimeScale = function (nvd3Axis, nvd3Scale, argsArray) {\n const scale = d3.time.scale();\n\n nvd3Axis.scale(scale);\n nvd3Scale(scale);\n\n if (!argsArray && !argsArray.length) {\n const oldTicks = nvd3Axis.axis.ticks;\n return nvd3Axis.axis.ticks = () => oldTicks.apply(nvd3Axis.axis, argsArray);\n }\n };\n\n /**\n * Translate line chart data in dates row to bar chart data, one bar per type.\n */\n const prepareDataForBarChart = function (data, type) {\n const newData = [{\n key: type,\n values: []\n }\n ];\n for (const info of Array.from(data)) {\n if (info) {\n newData[0].values.push({\n label: info.key,\n value: info.values[0].y,\n color: info.color\n });\n }\n }\n\n return newData;\n };\n\n /**\n * Sort the provided array, in the specified order, on the value returned by the callback.\n * This is a stable-sorting algorithm implementation, ie. two call with the same array will return the same results\n * orders, especially with equal values.\n * @param array {Array} the array to sort\n * @param order {string} 'ASC' or 'DESC'\n * @param getValue {function} the callback which will return the value on which the sort will occurs\n * @returns {Array}\n */\n const stableSort = function (array, order, getValue) {\n // prepare sorting\n const keys_order = [];\n const result = [];\n for (let i = 0, end = array.length; i <= end; i++) {\n keys_order[array[i]] = i;\n result.push(array[i]);\n }\n\n // callback for javascript native Array.sort()\n const sort_fc = function (a, b) {\n const val_a = getValue(a);\n const val_b = getValue(b);\n if (val_a === val_b) {\n return keys_order[a] - keys_order[b];\n }\n if (val_a < val_b) {\n if (order === 'ASC') {\n return -1;\n } else { return 1; }\n } else {\n if (order === 'ASC') {\n return 1;\n } else { return -1; }\n }\n };\n\n // finish the sort\n result.sort(sort_fc);\n return result;\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n","/* eslint-disable\n handle-callback-err,\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\nApplication.Controllers.controller('GroupsController', ['$scope', 'groupsPromise', 'Group', 'growl', '_t', function ($scope, groupsPromise, Group, growl, _t) {\n // List of users groups\n $scope.groups = groupsPromise;\n\n // Default: we show only enabled groups\n $scope.groupFiltering = 'enabled';\n\n // Available options for filtering groups by status\n $scope.filterDisabled = [\n 'enabled',\n 'disabled',\n 'all'\n ];\n\n /**\n * Removes the newly inserted but not saved group / Cancel the current group modification\n * @param rowform {Object} see http://vitalets.github.io/angular-xeditable/\n * @param index {number} group index in the $scope.groups array\n */\n $scope.cancelGroup = function (rowform, index) {\n if ($scope.groups[index].id != null) {\n return rowform.$cancel();\n } else {\n return $scope.groups.splice(index, 1);\n }\n };\n\n /**\n * Creates a new empty entry in the $scope.groups array\n */\n $scope.addGroup = function () {\n $scope.inserted =\n { name: '' };\n return $scope.groups.push($scope.inserted);\n };\n\n /**\n * Saves a new group / Update an existing group to the server (form validation callback)\n * @param data {Object} group name\n * @param [id] {number} group id, in case of update\n */\n $scope.saveGroup = function (data, id) {\n if (id != null) {\n return Group.update({ id }, { group: data }, response => growl.success(_t('app.admin.members.group_form.changes_successfully_saved'))\n , () => growl.error(_t('app.admin.members.group_form.an_error_occurred_while_saving_changes')));\n } else {\n return Group.save({ group: data }, function (resp) {\n growl.success(_t('app.admin.members.group_form.new_group_successfully_saved'));\n return $scope.groups[$scope.groups.length - 1].id = resp.id;\n }\n , function () {\n growl.error(_t('app.admin.members.group_form.an_error_occurred_when_saving_the_new_group'));\n return $scope.groups.splice($scope.groups.length - 1, 1);\n });\n }\n };\n\n /**\n * Deletes the group at the specified index\n * @param groupId {number} group id to delete\n */\n $scope.removeGroup = (groupId) => {\n Group.delete({ id: groupId }, function (resp) {\n growl.success(_t('app.admin.members.group_form.group_successfully_deleted'));\n const index = $scope.groups.findIndex(e => e.id === groupId);\n $scope.groups.splice(index, 1);\n }\n , () => growl.error(_t('app.admin.members.group_form.unable_to_delete_group_because_some_users_and_or_groups_are_still_linked_to_it')));\n };\n\n /**\n * Enable/disable the group at the specified index\n * @param groupId {number} id of the group to enable/disable\n */\n return $scope.toggleDisableGroup = function (groupId) {\n const index = $scope.groups.findIndex(e => e.id === groupId);\n const group = $scope.groups[index];\n if (!group.disabled && (group.users > 0)) {\n return growl.error(_t('app.admin.members.group_form.unable_to_disable_group_with_users', { USERS: group.users }));\n } else {\n return Group.update({ id: group.id }, { group: { disabled: !group.disabled } }, function (response) {\n $scope.groups[index] = response;\n return growl.success(_t('app.admin.members.group_form.group_successfully_enabled_disabled', { STATUS: response.disabled }));\n }\n , () => growl.error(_t('app.admin.members.group_form.unable_to_enable_disable_group', { STATUS: !group.disabled })));\n }\n };\n}\n\n]);\n","/* eslint-disable\n handle-callback-err,\n no-return-assign,\n no-undef,\n no-useless-escape,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\n/**\n * Controller used in the admin invoices listing page\n */\nApplication.Controllers.controller('InvoicesController', ['$scope', '$state', 'Invoice', 'AccountingPeriod', 'AuthService', 'invoices', 'closedPeriods', '$uibModal', 'growl', '$filter', 'Setting', 'settings', 'stripeSecretKey', '_t', 'Member', 'uiTourService', 'Payment', 'onlinePaymentStatus',\n function ($scope, $state, Invoice, AccountingPeriod, AuthService, invoices, closedPeriods, $uibModal, growl, $filter, Setting, settings, stripeSecretKey, _t, Member, uiTourService, Payment, onlinePaymentStatus) {\n /* PRIVATE STATIC CONSTANTS */\n\n // number of invoices loaded each time we click on 'load more...'\n const INVOICES_PER_PAGE = 20;\n\n // fake stripe secret key\n const STRIPE_SK_HIDDEN = 'sk_test_hidden-hidden-hidden-hid';\n\n /* PUBLIC SCOPE */\n\n // default active tab\n $scope.tabs = {\n active: settings.invoicing_module === 'true' ? 0 : 1\n };\n\n // List of all invoices\n $scope.invoices = invoices;\n\n // Invoices filters\n $scope.searchInvoice = {\n date: null,\n name: '',\n reference: ''\n };\n\n // currently displayed page of invoices (search results)\n $scope.page = 1;\n\n // true when all invoices are loaded\n $scope.noMoreResults = false;\n\n // Default invoices ordering/sorting\n $scope.orderInvoice = '-reference';\n\n // Invoice PDF filename settings (and example)\n $scope.file = {\n prefix: settings.invoice_prefix,\n nextId: 40,\n date: moment().format('DDMMYYYY'),\n templateUrl: '/admin/invoices/settings/editPrefix.html'\n };\n\n // Payment Schedule PDF filename settings (and example)\n $scope.scheduleFile = {\n prefix: settings.payment_schedule_prefix,\n nextId: 11,\n date: moment().format('DDMMYYYY'),\n templateUrl: '/admin/invoices/settings/editSchedulePrefix.html'\n };\n\n // Invoices parameters\n $scope.invoice = {\n logo: null,\n reference: {\n model: '',\n help: null,\n templateUrl: '/admin/invoices/settings/editReference.html'\n },\n code: {\n model: '',\n active: true,\n templateUrl: '/admin/invoices/settings/editCode.html'\n },\n number: {\n model: '',\n help: null,\n templateUrl: '/admin/invoices/settings/editNumber.html'\n },\n VAT: {\n rate: 19.6,\n active: false,\n templateUrl: '/admin/invoices/settings/editVAT.html'\n },\n multiVAT: {\n rateMachine: '',\n rateSpace: '',\n rateTraining: '',\n rateEvent: '',\n rateSubscription: '',\n rateProduct: '',\n editTemplateUrl: '/admin/invoices/settings/editMultiVAT.html',\n historyTemplateUrl: '/admin/invoices/settings/multiVATHistory.html'\n },\n text: {\n content: ''\n },\n legals: {\n content: ''\n }\n };\n\n // Accounting codes\n $scope.settings = {\n journalCode: {\n name: 'accounting_journal_code',\n value: settings.accounting_journal_code\n },\n cardClientCode: {\n name: 'accounting_card_client_code',\n value: settings.accounting_card_client_code\n },\n cardClientLabel: {\n name: 'accounting_card_client_label',\n value: settings.accounting_card_client_label\n },\n walletClientCode: {\n name: 'accounting_wallet_client_code',\n value: settings.accounting_wallet_client_code\n },\n walletClientLabel: {\n name: 'accounting_wallet_client_label',\n value: settings.accounting_wallet_client_label\n },\n otherClientCode: {\n name: 'accounting_other_client_code',\n value: settings.accounting_other_client_code\n },\n otherClientLabel: {\n name: 'accounting_other_client_label',\n value: settings.accounting_other_client_label\n },\n walletCode: {\n name: 'accounting_wallet_code',\n value: settings.accounting_wallet_code\n },\n walletLabel: {\n name: 'accounting_wallet_label',\n value: settings.accounting_wallet_label\n },\n vatCode: {\n name: 'accounting_VAT_code',\n value: settings.accounting_VAT_code\n },\n vatLabel: {\n name: 'accounting_VAT_label',\n value: settings.accounting_VAT_label\n },\n subscriptionCode: {\n name: 'accounting_subscription_code',\n value: settings.accounting_subscription_code\n },\n subscriptionLabel: {\n name: 'accounting_subscription_label',\n value: settings.accounting_subscription_label\n },\n machineCode: {\n name: 'accounting_Machine_code',\n value: settings.accounting_Machine_code\n },\n machineLabel: {\n name: 'accounting_Machine_label',\n value: settings.accounting_Machine_label\n },\n trainingCode: {\n name: 'accounting_Training_code',\n value: settings.accounting_Training_code\n },\n trainingLabel: {\n name: 'accounting_Training_label',\n value: settings.accounting_Training_label\n },\n eventCode: {\n name: 'accounting_Event_code',\n value: settings.accounting_Event_code\n },\n eventLabel: {\n name: 'accounting_Event_label',\n value: settings.accounting_Event_label\n },\n spaceCode: {\n name: 'accounting_Space_code',\n value: settings.accounting_Space_code\n },\n spaceLabel: {\n name: 'accounting_Space_label',\n value: settings.accounting_Space_label\n },\n packCode: {\n name: 'accounting_Pack_code',\n value: settings.accounting_Pack_code\n },\n packLabel: {\n name: 'accounting_Pack_label',\n value: settings.accounting_Pack_label\n },\n productCode: {\n name: 'accounting_Product_code',\n value: settings.accounting_Product_code\n },\n productLabel: {\n name: 'accounting_Product_label',\n value: settings.accounting_Product_label\n },\n errorCode: {\n name: 'accounting_Error_code',\n value: settings.accounting_Error_code\n },\n errorLabel: {\n name: 'accounting_Error_label',\n value: settings.accounting_Error_label\n }\n };\n\n // all settings\n $scope.allSettings = settings;\n\n // is the stripe private set?\n $scope.stripeSecretKey = (stripeSecretKey.isPresent ? STRIPE_SK_HIDDEN : '');\n\n // has any online payment been already made?\n $scope.onlinePaymentStatus = onlinePaymentStatus.status;\n\n // Placeholding date for the invoice creation\n $scope.today = moment();\n\n // Placeholding date for the reservation begin\n $scope.inOneWeek = moment().add(1, 'week').startOf('hour');\n\n // Placeholding date for the reservation end\n $scope.inOneWeekAndOneHour = moment().add(1, 'week').add(1, 'hour').startOf('hour');\n\n // Is shown the modal dialog to select a payment gateway\n $scope.openSelectGatewayModal = false;\n\n /**\n * Return the VAT rate applicable to the machine reservations\n * @return {number}\n */\n $scope.getMachineExampleRate = function () {\n return $scope.invoice.multiVAT.rateMachine || $scope.invoice.VAT.rate;\n };\n\n /**\n * Change the invoices ordering criterion to the one provided\n * @param orderBy {string} ordering criterion\n */\n $scope.setOrderInvoice = function (orderBy) {\n if ($scope.orderInvoice === orderBy) {\n $scope.orderInvoice = `-${orderBy}`;\n } else {\n $scope.orderInvoice = orderBy;\n }\n\n resetSearchInvoice();\n return invoiceSearch();\n };\n\n /**\n * Open a modal window asking the admin the details to refund the user about the provided invoice\n * @param invoice {Object} invoice inherited from angular's $resource\n */\n $scope.generateAvoirForInvoice = function (invoice) {\n // open modal\n const modalInstance = $uibModal.open({\n templateUrl: '/admin/invoices/avoirModal.html',\n controller: 'AvoirModalController',\n resolve: {\n invoice () { return invoice; },\n closedPeriods () { return AccountingPeriod.query().$promise; },\n lastClosingEnd () { return AccountingPeriod.lastClosingEnd().$promise; }\n }\n });\n\n // once done, update the invoice model and inform the admin\n return modalInstance.result.then(function (res) {\n $scope.invoices.unshift(res.avoir);\n return Invoice.get({ id: invoice.id }, function (data) {\n invoice.has_avoir = data.has_avoir;\n return growl.success(_t('app.admin.invoices.refund_invoice_successfully_created'));\n });\n });\n };\n\n /**\n * Generate an invoice reference sample from the parametrized model\n * @returns {string} invoice reference sample\n */\n $scope.mkReference = function () {\n let sample = $scope.invoice.reference.model;\n if (sample) {\n // invoice number per day (dd..dd)\n sample = sample.replace(/d+(?![^\\[]*])/g, function (match, offset, string) { return padWithZeros(2, match.length); });\n // invoice number per month (mm..mm)\n sample = sample.replace(/m+(?![^\\[]*])/g, function (match, offset, string) { return padWithZeros(12, match.length); });\n // invoice number per year (yy..yy)\n sample = sample.replace(/y+(?![^\\[]*])/g, function (match, offset, string) { return padWithZeros(8, match.length); });\n // date information\n sample = sample.replace(/[YMD]+(?![^\\[]*])/g, function (match, offset, string) { return $scope.today.format(match); });\n // information about online selling (X[text])\n sample = sample.replace(/X\\[([^\\]]+)\\]/g, function (match, p1, offset, string) { return p1; });\n // information about wallet (W[text]) - does not apply here\n sample = sample.replace(/W\\[([^\\]]+)\\]/g, '');\n // information about refunds (R[text]) - does not apply here\n sample = sample.replace(/R\\[([^\\]]+)\\]/g, '');\n // information about payment schedules (S[text]) -does not apply here\n sample = sample.replace(/S\\[([^\\]]+)\\]/g, '');\n }\n return sample;\n };\n\n /**\n * Generate an order number sample from the parametrized model\n * @returns {string} invoice reference sample\n */\n $scope.mkNumber = function () {\n let sample = $scope.invoice.number.model;\n if (sample) {\n // global order number (nn..nn)\n sample = sample.replace(/n+(?![^\\[]*])/g, function (match, offset, string) { return padWithZeros(327, match.length); });\n // order number per year (yy..yy)\n sample = sample.replace(/y+(?![^\\[]*])/g, function (match, offset, string) { return padWithZeros(8, match.length); });\n // order number per month (mm..mm)\n sample = sample.replace(/m+(?![^\\[]*])/g, function (match, offset, string) { return padWithZeros(12, match.length); });\n // order number per day (dd..dd)\n sample = sample.replace(/d+(?![^\\[]*])/g, function (match, offset, string) { return padWithZeros(2, match.length); });\n // date information\n sample = sample.replace(/[YMD]+(?![^\\[]*])/g, function (match, offset, string) { return $scope.today.format(match); });\n }\n return sample;\n };\n\n /**\n * Open a modal dialog allowing the user to edit the invoice reference generation template\n */\n $scope.openEditReference = function () {\n const modalInstance = $uibModal.open({\n animation: true,\n templateUrl: $scope.invoice.reference.templateUrl,\n size: 'lg',\n resolve: {\n model () {\n return $scope.invoice.reference.model;\n }\n },\n controller: ['$scope', '$uibModalInstance', 'model', function ($scope, $uibModalInstance, model) {\n $scope.model = model;\n $scope.ok = function () { $uibModalInstance.close($scope.model); };\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n }]\n });\n\n modalInstance.result.then(function (model) {\n Setting.update({ name: 'invoice_reference' }, { value: model }, function (data) {\n $scope.invoice.reference.model = model;\n growl.success(_t('app.admin.invoices.invoice_reference_successfully_saved'));\n }\n , function (error) {\n if (error.status === 304) return;\n\n growl.error(_t('app.admin.invoices.an_error_occurred_while_saving_invoice_reference'));\n console.error(error);\n });\n });\n };\n\n /**\n * Open a modal dialog allowing the user to edit the invoice code\n */\n $scope.openEditCode = function () {\n const modalInstance = $uibModal.open({\n animation: true,\n templateUrl: $scope.invoice.code.templateUrl,\n size: 'lg',\n resolve: {\n model () {\n return $scope.invoice.code.model;\n },\n active () {\n return $scope.invoice.code.active;\n }\n },\n controller: ['$scope', '$uibModalInstance', 'model', 'active', function ($scope, $uibModalInstance, model, active) {\n $scope.codeModel = model;\n $scope.isSelected = active;\n\n $scope.ok = function () { $uibModalInstance.close({ model: $scope.codeModel, active: $scope.isSelected }); };\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n }]\n });\n\n return modalInstance.result.then(function (result) {\n Setting.update({ name: 'invoice_code-value' }, { value: result.model }, function (data) {\n $scope.invoice.code.model = result.model;\n if (result.active) {\n return growl.success(_t('app.admin.invoices.invoicing_code_succesfully_saved'));\n }\n }\n , function (error) {\n if (error.status === 304) return;\n\n growl.error(_t('app.admin.invoices.an_error_occurred_while_saving_the_invoicing_code'));\n console.error(error);\n });\n\n return Setting.update({ name: 'invoice_code-active' }, { value: result.active ? 'true' : 'false' }, function (data) {\n $scope.invoice.code.active = result.active;\n if (result.active) {\n return growl.success(_t('app.admin.invoices.code_successfully_activated'));\n } else {\n return growl.success(_t('app.admin.invoices.code_successfully_disabled'));\n }\n }\n , function (error) {\n if (error.status === 304) return;\n\n growl.error(_t('app.admin.invoices.an_error_occurred_while_activating_the_invoicing_code'));\n console.error(error);\n });\n });\n };\n\n /**\n * Open a modal dialog allowing the user to edit the invoice number\n */\n $scope.openEditInvoiceNb = function () {\n const modalInstance = $uibModal.open({\n animation: true,\n templateUrl: $scope.invoice.number.templateUrl,\n size: 'lg',\n resolve: {\n model () {\n return $scope.invoice.number.model;\n }\n },\n controller: ['$scope', '$uibModalInstance', 'model', function ($scope, $uibModalInstance, model) {\n $scope.model = model;\n $scope.ok = function () { $uibModalInstance.close($scope.model); };\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n }]\n });\n\n return modalInstance.result.then(function (model) {\n Setting.update({ name: 'invoice_order-nb' }, { value: model }, function (data) {\n $scope.invoice.number.model = model;\n return growl.success(_t('app.admin.invoices.order_number_successfully_saved'));\n }\n , function (error) {\n if (error.status === 304) return;\n\n growl.error(_t('app.admin.invoices.an_error_occurred_while_saving_the_order_number'));\n console.error(error);\n });\n });\n };\n\n /**\n * Open a modal dialog allowing the user to edit the VAT parameters for the invoices\n * The VAT can be disabled and its rate can be configured\n */\n $scope.openEditVAT = function () {\n const modalInstance = $uibModal.open({\n animation: true,\n templateUrl: $scope.invoice.VAT.templateUrl,\n size: 'lg',\n resolve: {\n rate () {\n return $scope.invoice.VAT.rate;\n },\n active () {\n return $scope.invoice.VAT.active;\n },\n multiVAT () {\n return $scope.invoice.multiVAT;\n },\n rateHistory () {\n return Setting.get({ name: 'invoice_VAT-rate', history: true }).$promise;\n },\n activeHistory () {\n return Setting.get({ name: 'invoice_VAT-active', history: true }).$promise;\n }\n },\n controller: ['$scope', '$uibModalInstance', 'rate', 'active', 'rateHistory', 'activeHistory', 'multiVAT', function ($scope, $uibModalInstance, rate, active, rateHistory, activeHistory, multiVAT) {\n $scope.rate = rate;\n $scope.isSelected = active;\n $scope.history = [];\n\n // callback on \"enable VAT\" switch toggle\n $scope.enableVATChanged = function (checked) {\n setTimeout(() => {\n $scope.isSelected = checked;\n $scope.$apply();\n }, 1);\n };\n $scope.ok = function () { $uibModalInstance.close({ rate: $scope.rate, active: $scope.isSelected }); };\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n $scope.editMultiVAT = function () {\n const editMultiVATModalInstance = $uibModal.open({\n animation: true,\n templateUrl: multiVAT.editTemplateUrl,\n size: 'lg',\n resolve: {\n rate () {\n return $scope.rate;\n },\n multiVAT () {\n return multiVAT;\n }\n },\n controller: ['$scope', '$uibModalInstance', 'rate', 'multiVAT', function ($scope, $uibModalInstance, rate, multiVAT) {\n $scope.rate = rate;\n $scope.multiVAT = multiVAT;\n\n $scope.ok = function () { $uibModalInstance.close({ multiVAT: $scope.multiVAT }); };\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n\n $scope.showMultiRateHistory = function (rateType) {\n $uibModal.open({\n animation: true,\n templateUrl: multiVAT.historyTemplateUrl,\n size: 'lg',\n resolve: {\n rateHistory () {\n return Setting.get({ name: `invoice_VAT-rate_${rateType}`, history: true }).$promise;\n }\n },\n controller: ['$scope', '$uibModalInstance', 'rateHistory', function ($scope, $uibModalInstance, rateHistory) {\n $scope.history = [];\n\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n\n $scope.rateValue = function (value) {\n if (value.rate === 'null' || value.value === 'undefined' || value.rate === 'NaN') {\n return '';\n }\n return value.rate;\n };\n\n const initialize = function () {\n rateHistory.setting.history.forEach(function (rate) {\n $scope.history.push({ date: rate.created_at, rate: rate.value, user: rate.user });\n });\n };\n\n initialize();\n }]\n });\n };\n }]\n });\n return editMultiVATModalInstance.result.then(function (result) {\n ['Machine', 'Space', 'Training', 'Event', 'Subscription', 'Product'].forEach(rateType => {\n const value = _.isFinite(result.multiVAT[`rate${rateType}`]) ? result.multiVAT[`rate${rateType}`] + '' : '';\n Setting.update({ name: `invoice_VAT-rate_${rateType}` }, { value }, function (data) {\n return growl.success(_t('app.admin.invoices.VAT_rate_successfully_saved'));\n }\n , function (error) {\n if (error.status === 304) return;\n\n growl.error(_t('app.admin.invoices.an_error_occurred_while_saving_the_VAT_rate'));\n console.error(error);\n });\n });\n });\n };\n\n const initialize = function () {\n rateHistory.setting.history.forEach(function (rate) {\n $scope.history.push({ date: rate.created_at, rate: rate.value, user: rate.user });\n });\n activeHistory.setting.history.forEach(function (v) {\n $scope.history.push({ date: v.created_at, enabled: v.value === 'true', user: v.user });\n });\n };\n\n initialize();\n }]\n });\n\n return modalInstance.result.then(function (result) {\n Setting.update({ name: 'invoice_VAT-rate' }, { value: result.rate + '' }, function (data) {\n $scope.invoice.VAT.rate = result.rate;\n if (result.active) {\n return growl.success(_t('app.admin.invoices.VAT_rate_successfully_saved'));\n }\n }\n , function (error) {\n if (error.status === 304) return;\n\n growl.error(_t('app.admin.invoices.an_error_occurred_while_saving_the_VAT_rate'));\n console.error(error);\n });\n\n return Setting.update({ name: 'invoice_VAT-active' }, { value: result.active ? 'true' : 'false' }, function (data) {\n $scope.invoice.VAT.active = result.active;\n if (result.active) {\n return growl.success(_t('app.admin.invoices.VAT_successfully_activated'));\n } else {\n return growl.success(_t('app.admin.invoices.VAT_successfully_disabled'));\n }\n }\n , function (error) {\n if (error.status === 304) return;\n\n growl.error(_t('app.admin.invoices.an_error_occurred_while_activating_the_VAT'));\n console.error(error);\n });\n });\n };\n\n /**\n * Open a modal dialog allowing the user to edit the prefix of the invoice file name\n */\n $scope.openEditPrefix = function () {\n const modalInstance = $uibModal.open({\n animation: true,\n templateUrl: $scope.file.templateUrl,\n size: 'lg',\n resolve: {\n model () { return $scope.file.prefix; }\n },\n controller: ['$scope', '$uibModalInstance', 'model', function ($scope, $uibModalInstance, model) {\n $scope.model = model;\n $scope.ok = function () { $uibModalInstance.close($scope.model); };\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n }]\n });\n\n return modalInstance.result.then(function (model) {\n Setting.update({ name: 'invoice_prefix' }, { value: model }, function (data) {\n $scope.file.prefix = model;\n return growl.success(_t('app.admin.invoices.prefix_successfully_saved'));\n }\n , function (error) {\n if (error.status === 304) return;\n\n growl.error(_t('app.admin.invoices.an_error_occurred_while_saving_the_prefix'));\n console.error(error);\n });\n });\n };\n\n /**\n * Open a modal dialog allowing the user to edit the prefix of the payment schedules file names\n */\n $scope.openEditSchedulePrefix = function () {\n const modalInstance = $uibModal.open({\n animation: true,\n templateUrl: $scope.scheduleFile.templateUrl,\n size: 'lg',\n resolve: {\n model () { return $scope.scheduleFile.prefix; }\n },\n controller: ['$scope', '$uibModalInstance', 'model', function ($scope, $uibModalInstance, model) {\n $scope.model = model;\n $scope.ok = function () { $uibModalInstance.close($scope.model); };\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n }]\n });\n\n modalInstance.result.then(function (model) {\n Setting.update({ name: 'payment_schedule_prefix' }, { value: model }, function (data) {\n $scope.scheduleFile.prefix = model;\n return growl.success(_t('app.admin.invoices.prefix_successfully_saved'));\n }\n , function (error) {\n if (error.status === 304) return;\n\n growl.error(_t('app.admin.invoices.an_error_occurred_while_saving_the_prefix'));\n console.error(error);\n });\n });\n };\n\n /**\n * Callback to save the value of the text zone when editing is done\n */\n $scope.textEditEnd = function (event) {\n const parsed = parseHtml($scope.invoice.text.content);\n return Setting.update({ name: 'invoice_text' }, { value: parsed }, function (data) {\n $scope.invoice.text.content = parsed;\n return growl.success(_t('app.admin.invoices.text_successfully_saved'));\n }\n , function (error) {\n if (error.status === 304) return;\n\n growl.error(_t('app.admin.invoices.an_error_occurred_while_saving_the_text'));\n console.error(error);\n });\n };\n\n /**\n * Callback to save the value of the legal information zone when editing is done\n */\n $scope.legalsEditEnd = function (event) {\n const parsed = parseHtml($scope.invoice.legals.content);\n return Setting.update({ name: 'invoice_legals' }, { value: parsed }, function (data) {\n $scope.invoice.legals.content = parsed;\n return growl.success(_t('app.admin.invoices.address_and_legal_information_successfully_saved'));\n }\n , function (error) {\n if (error.status === 304) return;\n\n growl.error(_t('app.admin.invoices.an_error_occurred_while_saving_the_address_and_the_legal_information'));\n console.error(error);\n });\n };\n\n /**\n * Callback when any of the filters changes.\n * Full reload the results list\n */\n $scope.handleFilterChange = function () {\n if (searchTimeout) clearTimeout(searchTimeout);\n searchTimeout = setTimeout(function () {\n resetSearchInvoice();\n invoiceSearch();\n }, 300);\n };\n\n /**\n * Callback for the 'load more' button.\n * Will load the next results of the current search, if any\n */\n $scope.showNextInvoices = function () {\n $scope.page += 1;\n invoiceSearch(true);\n };\n\n /**\n * Open a modal allowing the user to close an accounting period and to\n * view all periods already closed.\n */\n $scope.closeAnAccountingPeriod = function () {\n // open modal\n $uibModal.open({\n templateUrl: '/admin/invoices/closePeriodModal.html',\n controller: 'ClosePeriodModalController',\n backdrop: 'static',\n keyboard: false,\n size: 'lg',\n resolve: {\n periods () { return AccountingPeriod.query().$promise; },\n lastClosingEnd () { return AccountingPeriod.lastClosingEnd().$promise; }\n }\n });\n };\n\n $scope.toggleExportModal = function () {\n $uibModal.open({\n templateUrl: '/admin/invoices/accountingExportModal.html',\n controller: 'AccountingExportModalController',\n size: 'xl'\n });\n };\n\n /**\n * Test if the given date is within a closed accounting period\n * @param date {Date} date to test\n * @returns {boolean} true if closed, false otherwise\n */\n $scope.isDateClosed = function (date) {\n for (const period of closedPeriods) {\n if (moment(date).isBetween(moment.utc(period.start_at).startOf('day'), moment.utc(period.end_at).endOf('day'), null, '[]')) {\n return true;\n }\n }\n return false;\n };\n\n /**\n * Callback to bulk save all settings in the page to the database with their values\n */\n $scope.save = function () {\n Setting.bulkUpdate(\n { settings: Object.values($scope.settings) },\n function () { growl.success(_t('app.admin.invoices.codes_customization_success')); },\n function (error) {\n growl.error('app.admin.invoices.unexpected_error_occurred');\n console.error(error);\n }\n );\n };\n\n /**\n * Return the name of the operator that creates the invoice\n */\n $scope.operatorName = function (invoice) {\n if (!invoice.operator) return '';\n\n return `${invoice.operator.first_name} ${invoice.operator.last_name}`;\n };\n\n /**\n * Open a modal dialog which ask the user to select the payment gateway to use\n * @param onlinePaymentModule {{name: String, value: String}} setting that defines the next status of the online payment module\n */\n $scope.selectPaymentGateway = function (onlinePaymentModule) {\n // if the online payment is about to be disabled, accept the change without any further question\n if (onlinePaymentModule.value === false) return true;\n\n // otherwise, open a modal to ask for the selection of a payment gateway\n setTimeout(() => {\n $scope.openSelectGatewayModal = true;\n $scope.$apply();\n }, 50);\n return new Promise(function (resolve, reject) {\n gatewayHandlers.resolve = resolve;\n gatewayHandlers.reject = reject;\n }).catch(() => { /* WORKAROUND: it seems we can't catch the rejection from the boolean-setting directive */ });\n };\n\n /**\n * This will open/close the gateway selection modal\n */\n $scope.toggleSelectGatewayModal = function () {\n setTimeout(() => {\n $scope.openSelectGatewayModal = !$scope.openSelectGatewayModal;\n $scope.$apply();\n if (!$scope.openSelectGatewayModal && gatewayHandlers.reject) {\n gatewayHandlers.reject();\n resetPromiseHandlers();\n }\n }, 50);\n };\n\n /**\n * Callback triggered after the gateway was successfully configured in the dedicated modal\n */\n $scope.onGatewayModalSuccess = function (updatedSettings) {\n if (gatewayHandlers.resolve) {\n gatewayHandlers.resolve(true);\n resetPromiseHandlers();\n }\n\n $scope.toggleSelectGatewayModal();\n $scope.allSettings.payment_gateway = updatedSettings.get('payment_gateway').value;\n if ($scope.allSettings.payment_gateway === 'stripe') {\n $scope.allSettings.stripe_public_key = updatedSettings.get('stripe_public_key').value;\n Setting.isPresent({ name: 'stripe_secret_key' }, function (res) {\n $scope.stripeSecretKey = (res.isPresent ? STRIPE_SK_HIDDEN : '');\n });\n Payment.onlinePaymentStatus(function (res) {\n const value = res.status.toString();\n $scope.onlinePaymentStatus = value;\n $scope.allSettings.online_payment_module = value;\n });\n }\n };\n\n /**\n * Callback used in PaymentScheduleList, in case of error\n */\n $scope.onError = function (message) {\n growl.error(message);\n };\n\n /**\n * Callback triggered when the user has successfully updated his card\n */\n $scope.onCardUpdateSuccess = function (message) {\n growl.success(message);\n };\n\n /**\n * Callback triggered after the gateway failed to be configured\n */\n $scope.onGatewayModalError = function (message) {\n growl.error(_t('app.admin.invoices.payment.gateway_configuration_error') + message);\n };\n\n /**\n * Callback triggered when the PayZen currency was successfully updated\n */\n $scope.alertPayZenCurrencyUpdated = function (currency) {\n growl.success(_t('app.admin.invoices.payment.payzen.currency_updated', { CURRENCY: currency }));\n };\n\n /**\n * Setup the feature-tour for the admin/invoices page.\n * This is intended as a contextual help (when pressing F1)\n */\n $scope.setupInvoicesTour = function () {\n // get the tour defined by the ui-tour directive\n const uitour = uiTourService.getTourByName('invoices');\n if (AuthService.isAuthorized('admin')) {\n uitour.createStep({\n selector: 'body',\n stepId: 'welcome',\n order: 0,\n title: _t('app.admin.tour.invoices.welcome.title'),\n content: _t('app.admin.tour.invoices.welcome.content'),\n placement: 'bottom',\n orphan: true\n });\n } else {\n uitour.createStep({\n selector: 'body',\n stepId: 'welcome_manager',\n order: 0,\n title: _t('app.admin.tour.invoices.welcome_manager.title'),\n content: _t('app.admin.tour.invoices.welcome_manager.content'),\n placement: 'bottom',\n orphan: true\n });\n }\n if (settings.invoicing_module === 'true' && $scope.invoices.length > 0) {\n uitour.createStep({\n selector: '.invoices-management .invoices-list',\n stepId: 'list',\n order: 1,\n title: _t('app.admin.tour.invoices.list.title'),\n content: _t('app.admin.tour.invoices.list.content'),\n placement: 'top'\n });\n uitour.createStep({\n selector: '.invoices-management .invoices-list .chained-indicator',\n stepId: 'chained',\n order: 2,\n title: _t('app.admin.tour.invoices.chained.title'),\n content: _t('app.admin.tour.invoices.chained.content'),\n placement: 'right'\n });\n uitour.createStep({\n selector: '.invoices-management .invoices-list .download-button',\n stepId: 'download',\n order: 3,\n title: _t('app.admin.tour.invoices.download.title'),\n content: _t('app.admin.tour.invoices.download.content'),\n placement: 'left'\n });\n uitour.createStep({\n selector: '.invoices-management .invoices-list .refund-button',\n stepId: 'refund',\n order: 4,\n title: _t('app.admin.tour.invoices.refund.title'),\n content: _t('app.admin.tour.invoices.refund.content'),\n placement: 'left'\n });\n }\n if (settings.invoicing_module === 'true') {\n uitour.createStep({\n selector: '.invoices-management .payment-schedules-list',\n stepId: 'payment-schedules',\n order: 5,\n title: _t('app.admin.tour.invoices.payment-schedules.title'),\n content: _t('app.admin.tour.invoices.payment-schedules.content'),\n placement: 'bottom'\n });\n }\n if (AuthService.isAuthorized('admin')) {\n uitour.createStep({\n selector: '.invoices-management .invoices-settings',\n stepId: 'settings',\n order: 6,\n title: _t('app.admin.tour.invoices.settings.title'),\n content: _t('app.admin.tour.invoices.settings.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.invoices-management .accounting-codes-tab',\n stepId: 'codes',\n order: 7,\n title: _t('app.admin.tour.invoices.codes.title'),\n content: _t('app.admin.tour.invoices.codes.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.heading .export-accounting-button',\n stepId: 'export',\n order: 8,\n title: _t('app.admin.tour.invoices.export.title'),\n content: _t('app.admin.tour.invoices.export.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.invoices-management .payment-settings',\n stepId: 'payment',\n order: 9,\n title: _t('app.admin.tour.invoices.payment.title'),\n content: _t('app.admin.tour.invoices.payment.content'),\n placement: 'bottom',\n popupClass: 'shift-left-50'\n });\n uitour.createStep({\n selector: '.heading .close-accounting-periods-button',\n stepId: 'periods',\n order: 10,\n title: _t('app.admin.tour.invoices.periods.title'),\n content: _t('app.admin.tour.invoices.periods.content'),\n placement: 'bottom',\n popupClass: 'shift-left-50'\n });\n }\n uitour.createStep({\n selector: 'body',\n stepId: 'conclusion',\n order: 11,\n title: _t('app.admin.tour.conclusion.title'),\n content: _t('app.admin.tour.conclusion.content'),\n placement: 'bottom',\n orphan: true\n });\n // on step change, change the active tab if needed\n uitour.on('stepChanged', function (nextStep) {\n if (nextStep.stepId === 'list' || nextStep.stepId === 'refund') {\n $scope.tabs.active = 0;\n }\n if (nextStep.stepId === 'settings') {\n $scope.tabs.active = 1;\n }\n if (nextStep.stepId === 'codes' || nextStep.stepId === 'export') {\n $scope.tabs.active = 2;\n }\n if (nextStep.stepId === 'payment') {\n $scope.tabs.active = 3;\n }\n if (nextStep.stepId === 'payment-schedules') {\n $scope.tabs.active = 4;\n }\n });\n // on tour end, save the status in database\n uitour.on('ended', function () {\n if (uitour.getStatus() === uitour.Status.ON && $scope.currentUser.profile_attributes.tours.indexOf('invoices') < 0) {\n Member.completeTour({ id: $scope.currentUser.id }, { tour: 'invoices' }, function (res) {\n $scope.currentUser.profile_attributes.tours = res.tours;\n });\n }\n });\n // if the user has never seen the tour, show him now\n if (settings.feature_tour_display !== 'manual' && $scope.currentUser.profile_attributes.tours.indexOf('invoices') < 0) {\n uitour.start();\n }\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n if (!invoices[0] || (invoices[0].maxInvoices <= $scope.invoices.length)) {\n $scope.noMoreResults = true;\n }\n\n // retrieve settings from the DB through the API\n $scope.invoice.legals.content = settings.invoice_legals;\n $scope.invoice.text.content = settings.invoice_text;\n $scope.invoice.VAT.rate = parseFloat(settings['invoice_VAT-rate']);\n $scope.invoice.VAT.active = (settings['invoice_VAT-active'] === 'true');\n $scope.invoice.multiVAT.rateMachine = settings['invoice_VAT-rate_Machine'] ? parseFloat(settings['invoice_VAT-rate_Machine']) : '';\n $scope.invoice.multiVAT.rateSpace = settings['invoice_VAT-rate_Space'] ? parseFloat(settings['invoice_VAT-rate_Space']) : '';\n $scope.invoice.multiVAT.rateTraining = settings['invoice_VAT-rate_Training'] ? parseFloat(settings['invoice_VAT-rate_Training']) : '';\n $scope.invoice.multiVAT.rateEvent = settings['invoice_VAT-rate_Event'] ? parseFloat(settings['invoice_VAT-rate_Event']) : '';\n $scope.invoice.multiVAT.rateSubscription = settings['invoice_VAT-rate_Subscription'] ? parseFloat(settings['invoice_VAT-rate_Subscription']) : '';\n $scope.invoice.multiVAT.rateProduct = settings['invoice_VAT-rate_Product'] ? parseFloat(settings['invoice_VAT-rate_Product']) : '';\n $scope.invoice.number.model = settings['invoice_order-nb'];\n $scope.invoice.code.model = settings['invoice_code-value'];\n $scope.invoice.code.active = (settings['invoice_code-active'] === 'true');\n $scope.invoice.reference.model = settings.invoice_reference;\n $scope.invoice.logo = {\n filetype: 'image/png',\n filename: 'logo.png',\n base64: settings.invoice_logo\n };\n\n // Watch the logo, when a change occurs, save it\n $scope.$watch('invoice.logo', function () {\n if ($scope.invoice.logo && $scope.invoice.logo.filesize) {\n return Setting.update(\n { name: 'invoice_logo' },\n { value: $scope.invoice.logo.base64 },\n function (data) { growl.success(_t('app.admin.invoices.logo_successfully_saved')); },\n function (error) {\n if (error.status === 304) return;\n\n growl.error(_t('app.admin.invoices.an_error_occurred_while_saving_the_logo'));\n console.error(error);\n }\n );\n }\n });\n\n // Clean before the controller is destroyed\n $scope.$on('$destroy', function () {\n if (gatewayHandlers.reject) {\n gatewayHandlers.reject();\n resetPromiseHandlers();\n }\n });\n };\n\n /**\n * Will temporize the search query to prevent overloading the API\n */\n let searchTimeout = null;\n\n /**\n * We must delay the save of the 'payment gateway' parameter, until the gateway is configured.\n * To do so, we use a promise, with the resolve/reject callback stored here\n * @see https://stackoverflow.com/q/26150232\n */\n const gatewayHandlers = {\n resolve: null,\n reject: null\n };\n\n /**\n * Output the given integer with leading zeros. If the given value is longer than the given\n * length, it will be truncated.\n * @param value {number} the integer to pad\n * @param length {number} the length of the resulting string.\n */\n const padWithZeros = function (value, length) { return (1e15 + value + '').slice(-length); };\n\n /**\n * Reset the promise handlers (reject/resolve) to their initial value.\n * This will prevent an already resolved promise to be triggered again.\n */\n const resetPromiseHandlers = function () {\n gatewayHandlers.resolve = null;\n gatewayHandlers.reject = null;\n };\n\n /**\n * Remove every unsupported html tag from the given html text (like

    , , ...).\n * The supported tags are , , and
    .\n * @param html {string} single line html text\n * @return {string} multi line simplified html text\n */\n const parseHtml = function (html) {\n return html.replace(/<\\/?(\\w+)((\\s+\\w+(\\s*=\\s*(?:\".*?\"|'.*?'|[^'\">\\s]+))?)+\\s*|\\s*)\\/?>/g, function (match, p1, offset, string) {\n if (['b', 'u', 'i', 'br'].includes(p1)) {\n return match;\n } else {\n return '';\n }\n });\n };\n\n /**\n * Reinitialize the context of invoices' search to display new results set\n */\n const resetSearchInvoice = function () {\n $scope.page = 1;\n return $scope.noMoreResults = false;\n };\n\n /**\n * Run a search query with the current parameters set concerning invoices, then affect or concat the results\n * to $scope.invoices\n * @param [concat] {boolean} if true, the result will be append to $scope.invoices instead of being affected\n */\n const invoiceSearch = function (concat) {\n Invoice.list({\n query: {\n number: $scope.searchInvoice.reference,\n customer: $scope.searchInvoice.name,\n date: $scope.searchInvoice.date,\n order_by: $scope.orderInvoice,\n page: $scope.page,\n size: INVOICES_PER_PAGE\n }\n }, function (invoices) {\n if (concat) {\n $scope.invoices = $scope.invoices.concat(invoices);\n } else {\n $scope.invoices = invoices;\n }\n\n if (!invoices[0] || (invoices[0].maxInvoices <= $scope.invoices.length)) {\n return $scope.noMoreResults = true;\n }\n });\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n\n/**\n * Controller used in the invoice refunding modal window\n */\nApplication.Controllers.controller('AvoirModalController', ['$scope', '$uibModalInstance', 'invoice', 'closedPeriods', 'lastClosingEnd', 'Invoice', 'growl', '_t',\n function ($scope, $uibModalInstance, invoice, closedPeriods, lastClosingEnd, Invoice, growl, _t) {\n /* PUBLIC SCOPE */\n\n // invoice linked to the current refund\n $scope.invoice = invoice;\n\n // Associative array containing invoice_item ids associated with boolean values\n $scope.partial = {};\n\n // Default refund parameters\n $scope.avoir = {\n invoice_id: invoice.id,\n subscription_to_expire: false,\n invoice_items_ids: []\n };\n\n // End date of last closed accounting period or date of first invoice\n $scope.lastClosingEnd = moment.utc(lastClosingEnd.last_end_date).toDate();\n\n // Possible refunding methods\n $scope.avoirModes = [\n { name: _t('app.admin.invoices.none'), value: 'none' },\n { name: _t('app.admin.invoices.by_cash'), value: 'cash' },\n { name: _t('app.admin.invoices.by_cheque'), value: 'cheque' },\n { name: _t('app.admin.invoices.by_transfer'), value: 'transfer' }\n ];\n\n if (Fablab.walletModule) {\n $scope.avoirModes.push({ name: _t('app.admin.invoices.by_wallet'), value: 'wallet' });\n }\n\n // If a subscription was took with the current invoice, should it be canceled or not\n $scope.subscriptionExpireOptions = {};\n $scope.subscriptionExpireOptions[_t('app.shared.buttons.yes')] = true;\n $scope.subscriptionExpireOptions[_t('app.shared.buttons.no')] = false;\n\n // AngularUI-Bootstrap datepicker parameters to define when to refund\n $scope.datePicker = {\n format: Fablab.uibDateFormat,\n opened: false, // default: datePicker is not shown\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n /**\n * Callback to open the datepicker\n */\n $scope.openDatePicker = function ($event) {\n $event.preventDefault();\n $event.stopPropagation();\n $scope.datePicker.opened = true;\n };\n\n /**\n * Validate the refunding and generate a refund invoice\n */\n $scope.ok = function () {\n // check that at least 1 element of the invoice is refunded\n $scope.avoir.invoice_items_ids = [];\n for (const itemId in $scope.partial) {\n if (Object.prototype.hasOwnProperty.call($scope.partial, itemId)) {\n const refundItem = $scope.partial[itemId];\n if (refundItem) {\n $scope.avoir.invoice_items_ids.push(parseInt(itemId));\n }\n }\n }\n\n if ($scope.avoir.invoice_items_ids.length === 0) {\n return growl.error(_t('app.admin.invoices.you_must_select_at_least_one_element_to_create_a_refund'));\n } else {\n return Invoice.save(\n { avoir: $scope.avoir },\n function (avoir) { // success\n $uibModalInstance.close({ avoir, invoice: $scope.invoice });\n },\n function () { // failed\n growl.error(_t('app.admin.invoices.unable_to_create_the_refund'));\n }\n );\n }\n };\n\n /**\n * Cancel the refund, dismiss the modal window\n */\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n\n /**\n * Test if the given date is within a closed accounting period\n * @param date {Date} date to test\n * @returns {boolean} true if closed, false otherwise\n */\n $scope.isDateClosed = function (date) {\n for (const period of closedPeriods) {\n if (moment(date).isBetween(moment.utc(period.start_at).startOf('day'), moment.utc(period.end_at).endOf('day'), null, '[]')) {\n return true;\n }\n }\n return false;\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n // if the invoice was paid with stripe, allow refunding through stripe\n Invoice.get({ id: invoice.id }, function (data) {\n $scope.invoice = data;\n // default : all elements of the invoice are refund\n return Array.from(data.items).map(function (item) {\n return ($scope.partial[item.id] = (typeof item.avoir_item_id !== 'number'));\n });\n });\n\n if (invoice.online_payment) {\n return $scope.avoirModes.push({ name: _t('app.admin.invoices.online_payment'), value: 'card' });\n }\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n\n/**\n * Controller used in the modal window allowing an admin to close an accounting period\n */\nApplication.Controllers.controller('ClosePeriodModalController', ['$scope', '$uibModalInstance', '$window', '$sce', 'Invoice', 'AccountingPeriod', 'periods', 'lastClosingEnd', 'dialogs', 'growl', '_t',\n function ($scope, $uibModalInstance, $window, $sce, Invoice, AccountingPeriod, periods, lastClosingEnd, dialogs, growl, _t) {\n const YESTERDAY = moment.utc({ h: 0, m: 0, s: 0, ms: 0 }).subtract(1, 'day').toDate();\n const LAST_CLOSING = moment.utc(lastClosingEnd.last_end_date).toDate();\n const MAX_END = moment.utc(lastClosingEnd.last_end_date).add(1, 'year').subtract(1, 'day').toDate();\n\n /* PUBLIC SCOPE */\n\n // date pickers values are bound to these variables\n $scope.period = {\n start_at: LAST_CLOSING,\n end_at: moment(YESTERDAY).isBefore(MAX_END) ? YESTERDAY : MAX_END\n };\n\n // any form errors will come here\n $scope.errors = {};\n\n // will match any error about invoices\n $scope.invoiceErrorRE = /^invoice_(.+)$/;\n\n // existing closed periods, provided by the API\n $scope.accountingPeriods = periods;\n\n // closing a period may take a long time so we need to prevent the user from double-clicking the close button while processing\n $scope.pendingCreation = false;\n\n // AngularUI-Bootstrap datepickers parameters to define the period to close\n $scope.datePicker = {\n format: Fablab.uibDateFormat,\n // default: datePicker are not shown\n startOpened: false,\n endOpened: false,\n minDate: LAST_CLOSING,\n maxDate: moment(YESTERDAY).isBefore(MAX_END) ? YESTERDAY : MAX_END,\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n /**\n * Callback to open the datepicker\n */\n $scope.toggleDatePicker = function ($event) {\n $event.preventDefault();\n $event.stopPropagation();\n $scope.datePicker.endOpened = !$scope.datePicker.endOpened;\n };\n\n /**\n * Validate the close period creation\n */\n $scope.ok = function () {\n dialogs.confirm(\n {\n resolve: {\n object () {\n return {\n title: _t('app.admin.invoices.confirmation_required'),\n msg: $sce.trustAsHtml(\n _t(\n 'app.admin.invoices.confirm_close_START_END',\n { START: moment.utc($scope.period.start_at).format('LL'), END: moment.utc($scope.period.end_at).format('LL') }\n ) +\n '

    ' +\n _t('app.admin.invoices.period_must_match_fiscal_year') +\n '

    ' +\n _t('app.admin.invoices.this_may_take_a_while')\n )\n };\n }\n }\n },\n function () { // creation confirmed\n $scope.pendingCreation = true;\n AccountingPeriod.save(\n {\n accounting_period: {\n start_at: moment.utc($scope.period.start_at).toDate(),\n end_at: moment.utc($scope.period.end_at).endOf('day').toDate()\n }\n },\n function (resp) {\n $scope.pendingCreation = false;\n growl.success(_t(\n 'app.admin.invoices.period_START_END_closed_success',\n { START: moment.utc(resp.start_at).format('LL'), END: moment.utc(resp.end_at).format('LL') }\n ));\n $uibModalInstance.close(resp);\n },\n function (error) {\n $scope.pendingCreation = false;\n growl.error(_t('app.admin.invoices.failed_to_close_period'));\n $scope.errors = error.data;\n }\n );\n }\n );\n };\n\n /**\n * Just dismiss the modal window\n */\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n\n /**\n * Trigger the API call to download the JSON archive of the closed accounting period\n */\n $scope.downloadArchive = function (period) {\n $window.location.href = `/api/accounting_periods/${period.id}/archive`;\n };\n }\n]);\n\nApplication.Controllers.controller('AccountingExportModalController', ['$scope', '$uibModalInstance', 'Invoice', 'Export', 'CSRF', 'growl', '_t',\n function ($scope, $uibModalInstance, Invoice, Export, CSRF, growl, _t) {\n // Retrieve Anti-CSRF tokens from cookies\n CSRF.setMetaTags();\n\n const SETTINGS = {\n acd: {\n format: 'csv',\n encoding: 'ISO-8859-1',\n separator: ';',\n dateFormat: '%d/%m/%Y',\n labelMaxLength: 50,\n decimalSeparator: ',',\n exportInvoicesAtZero: false,\n columns: ['journal_code', 'date', 'account_code', 'account_label', 'piece', 'line_label', 'debit_origin', 'credit_origin', 'debit_euro', 'credit_euro', 'lettering']\n },\n vat: {\n format: 'csv',\n encoding: 'UTF-8',\n separator: ';',\n dateFormat: '%Y-%m-%d',\n labelMaxLength: 'N/A',\n decimalSeparator: '.',\n exportInvoicesAtZero: false,\n columns: ['start_date', 'end_date', 'vat_rate', 'amount']\n }\n };\n\n /* PUBLIC SCOPE */\n\n // API URL where the form will be posted\n $scope.actionUrl = '/api/accounting/export';\n\n // Form action on the above URL\n $scope.method = 'post';\n\n // Anti-CSRF token to inject into the download form\n $scope.csrfToken = angular.element('meta[name=\"csrf-token\"]')[0].content;\n\n // API request body to generate the export\n $scope.query = null;\n\n // binding to radio button \"export to\"\n $scope.exportTarget = {\n type: null,\n software: null,\n startDate: null,\n endDate: null,\n settings: null\n };\n\n // AngularUI-Bootstrap datepicker parameters to define export dates range\n $scope.datePicker = {\n format: Fablab.uibDateFormat,\n opened: { // default: datePickers are not shown\n start: false,\n end: false\n },\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n // Date of the first invoice\n $scope.firstInvoice = null;\n\n /**\n * Validate the export\n */\n $scope.ok = function () {\n const statusQry = mkQuery();\n $scope.query = statusQry;\n\n Export.status(statusQry).then(function (res) {\n if (!res.data.exists) {\n growl.success(_t('app.admin.invoices.export_is_running'));\n }\n $uibModalInstance.close(res);\n });\n };\n\n /**\n * Callback to open/close one of the datepickers\n * @param event {Object} see https://docs.angularjs.org/guide/expression#-event-\n * @param picker {string} start | end\n */\n $scope.toggleDatePicker = function (event, picker) {\n event.preventDefault();\n $scope.datePicker.opened[picker] = !$scope.datePicker.opened[picker];\n };\n\n /**\n * Will fill the export settings, according to the selected software\n * @param software {String} must be one of SETTINGS.*\n */\n $scope.fillSettings = function (software) {\n $scope.exportTarget.settings = SETTINGS[software];\n };\n\n /**\n * Just dismiss the modal window\n */\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n // Get info about the very first invoice on the system\n Invoice.first(function (data) {\n $scope.firstInvoice = data.date;\n $scope.exportTarget.startDate = data.date;\n $scope.exportTarget.endDate = moment().toISOString();\n });\n };\n\n /**\n * Prepare the query for the export API\n * @returns {{extension: *, query: *, category: string, type: *, key: *}}\n */\n const mkQuery = function () {\n return {\n category: 'accounting',\n type: $scope.exportTarget.software,\n extension: $scope.exportTarget.settings.format,\n key: $scope.exportTarget.settings.separator,\n query: JSON.stringify({\n columns: $scope.exportTarget.settings.columns,\n encoding: $scope.exportTarget.settings.encoding,\n date_format: $scope.exportTarget.settings.dateFormat,\n start_date: moment.utc($scope.exportTarget.startDate).startOf('day').toISOString(),\n end_date: moment.utc($scope.exportTarget.endDate).endOf('day').toISOString(),\n label_max_length: $scope.exportTarget.settings.labelMaxLength,\n decimal_separator: $scope.exportTarget.settings.decimalSeparator,\n export_invoices_at_zero: $scope.exportTarget.settings.exportInvoicesAtZero\n })\n };\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }]);\n","/* eslint-disable\n handle-callback-err,\n no-return-assign,\n no-self-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\n/* COMMON CODE */\n\n/**\n * Provides a set of common properties and methods to the $scope parameter. They are used\n * in the various members' admin controllers.\n *\n * Provides :\n * - $scope.groups = [{Group}]\n * - $scope.trainings = [{Training}]\n * - $scope.plans = []\n * - $scope.datePicker = {}\n * - $scope.submited(content)\n * - $scope.cancel()\n * - $scope.fileinputClass(v)\n * - $scope.openDatePicker($event)\n * - $scope.openSubscriptionDatePicker($event)\n *\n * Requires :\n * - $state (Ui-Router) [ 'app.admin.members' ]\n */\nclass MembersController {\n constructor ($scope, $state, Group, Training) {\n // Retrieve the profiles groups (e.g. students ...)\n Group.query(function (groups) { $scope.groups = groups.filter(function (g) { return !g.disabled; }); });\n\n // Retrieve the list of available trainings\n Training.query().$promise.then(function (data) {\n $scope.trainings = data.map(function (d) {\n return ({\n id: d.id,\n name: d.name,\n disabled: d.disabled\n });\n });\n });\n\n // Default parameters for AngularUI-Bootstrap datepicker\n $scope.datePicker = {\n format: Fablab.uibDateFormat,\n opened: false, // default: datePicker is not shown\n subscription_date_opened: false,\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n /**\n * Shows the birthday datepicker\n * @param $event {Object} jQuery event object\n */\n $scope.openDatePicker = function ($event) {\n $event.preventDefault();\n $event.stopPropagation();\n return $scope.datePicker.opened = true;\n };\n\n /**\n * Shows the end of subscription datepicker\n * @param $event {Object} jQuery event object\n */\n $scope.openSubscriptionDatePicker = function ($event) {\n $event.preventDefault();\n $event.stopPropagation();\n return $scope.datePicker.subscription_date_opened = true;\n };\n\n /**\n * For use with ngUpload (https://github.com/twilson63/ngUpload).\n * Intended to be the callback when an upload is done: any raised error will be stacked in the\n * $scope.alerts array. If everything goes fine, the user is redirected to the members listing page.\n * @param content {Object} JSON - The result of the upload\n */\n $scope.submited = function (content) {\n if ((content.id == null)) {\n $scope.alerts = [];\n return angular.forEach(content, function (v, k) {\n angular.forEach(v, function (err) {\n $scope.alerts.push({\n msg: k + ': ' + err,\n type: 'danger'\n });\n });\n });\n } else {\n return $state.go('app.admin.members');\n }\n };\n\n /**\n * Changes the admin's view to the members list page\n */\n $scope.cancel = function () { $state.go('app.admin.members'); };\n\n /**\n * For use with 'ng-class', returns the CSS class name for the uploads previews.\n * The preview may show a placeholder, or the content of the file depending on the upload state.\n * @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules)\n */\n $scope.fileinputClass = function (v) {\n if (v) {\n return 'fileinput-exists';\n } else {\n return 'fileinput-new';\n }\n };\n }\n}\n\n/**\n * Controller used in the members/groups management page\n */\nApplication.Controllers.controller('AdminMembersController', ['$scope', '$sce', '$uibModal', 'membersPromise', 'adminsPromise', 'partnersPromise', 'managersPromise', 'growl', 'Admin', 'AuthService', 'dialogs', '_t', 'Member', 'Export', 'User', 'uiTourService', 'settingsPromise', '$location',\n function ($scope, $sce, $uibModal, membersPromise, adminsPromise, partnersPromise, managersPromise, growl, Admin, AuthService, dialogs, _t, Member, Export, User, uiTourService, settingsPromise, $location) {\n /* PRIVATE STATIC CONSTANTS */\n\n // number of users loaded each time we click on 'load more...'\n const USERS_PER_PAGE = 20;\n\n /* PUBLIC SCOPE */\n\n // members list\n $scope.members = membersPromise;\n\n $scope.member = {\n // Members plain-text filtering. Default: not filtered\n searchText: '',\n // Members ordering/sorting. Default: not sorted\n order: 'id',\n // the currently displayed page of members\n page: 1,\n // true when all members where loaded\n noMore: false,\n // default filter for members\n memberFilter: 'all',\n // options for members filtering\n memberFilters: [\n 'all',\n 'not_confirmed',\n 'inactive_for_3_years'\n ]\n };\n\n // admins list\n $scope.admins = adminsPromise.admins.filter(function (m) { return m.id !== Fablab.adminSysId; });\n\n // is user validation required\n $scope.enableUserValidationRequired = (settingsPromise.user_validation_required === 'true');\n\n // should we display the username in the list?\n $scope.displayUsername = (settingsPromise.show_username_in_admin_list === 'true');\n\n // Admins ordering/sorting. Default: not sorted\n $scope.orderAdmin = null;\n\n // partners list\n $scope.partners = partnersPromise.users;\n\n // Partners ordering/sorting. Default: not sorted\n $scope.orderPartner = null;\n\n // managers list\n $scope.managers = managersPromise.users;\n\n // Managers ordering/sorting. Default: not sorted\n $scope.orderManager = null;\n\n // default tab: members list\n const defaultActiveTab = $location.search().tabs ? parseInt($location.search().tabs, 10) : 0;\n $scope.tabs = { active: defaultActiveTab, sub: 0 };\n\n /**\n * Change the members ordering criterion to the one provided\n * @param orderBy {string} ordering criterion\n */\n $scope.setOrderMember = function (orderBy) {\n if ($scope.member.order === orderBy) {\n $scope.member.order = `-${orderBy}`;\n } else {\n $scope.member.order = orderBy;\n }\n\n resetSearchMember();\n return memberSearch();\n };\n\n /**\n * Change the admins ordering criterion to the one provided\n * @param orderAdmin {string} ordering criterion\n */\n $scope.setOrderAdmin = function (orderAdmin) {\n if ($scope.orderAdmin === orderAdmin) {\n return $scope.orderAdmin = `-${orderAdmin}`;\n } else {\n return $scope.orderAdmin = orderAdmin;\n }\n };\n\n /**\n * Change the partners ordering criterion to the one provided\n * @param orderPartner {string} ordering criterion\n */\n $scope.setOrderPartner = function (orderPartner) {\n if ($scope.orderPartner === orderPartner) {\n return $scope.orderPartner = `-${orderPartner}`;\n } else {\n return $scope.orderPartner = orderPartner;\n }\n };\n\n /**\n * Change the managers ordering criterion to the one provided\n * @param orderManager {string} ordering criterion\n */\n $scope.setOrderManager = function (orderManager) {\n if ($scope.orderManager === orderManager) {\n return $scope.orderManager = `-${orderManager}`;\n } else {\n return $scope.orderManager = orderManager;\n }\n };\n\n /**\n * Open a modal dialog allowing the admin to create a new partner user\n */\n $scope.openPartnerNewModal = function () {\n const modalInstance = $uibModal.open({\n animation: true,\n templateUrl: '/shared/_partner_new_modal.html',\n size: 'lg',\n controller: ['$scope', '$uibModalInstance', 'User', function ($scope, $uibModalInstance, User) {\n $scope.partner = {};\n\n $scope.ok = function () {\n User.save(\n {},\n { user: $scope.partner },\n function (user) {\n $scope.partner.id = user.id;\n $scope.partner.name = `${user.first_name} ${user.last_name}`;\n $uibModalInstance.close($scope.partner);\n },\n function (error) {\n growl.error(_t('app.admin.plans.new.unable_to_save_this_user_check_that_there_isnt_an_already_a_user_with_the_same_name'));\n console.error(error);\n }\n );\n };\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n }]\n });\n // once the form was validated successfully ...\n return modalInstance.result.then(function (partner) {\n $scope.partners.push(partner);\n });\n };\n\n /**\n * Ask for confirmation then delete the specified user\n * @param memberId {number} identifier of the user to delete\n */\n $scope.deleteMember = function (memberId) {\n dialogs.confirm(\n {\n resolve: {\n object () {\n return {\n title: _t('app.admin.members.confirmation_required'),\n msg: $sce.trustAsHtml(_t('app.admin.members.confirm_delete_member') + '

    ' + _t('app.admin.members.this_may_take_a_while_please_wait'))\n };\n }\n }\n },\n function () { // cancel confirmed\n Member.delete(\n { id: memberId },\n function () {\n $scope.members.splice(findItemIdxById($scope.members, memberId), 1);\n return growl.success(_t('app.admin.members.member_successfully_deleted'));\n },\n function (error) {\n growl.error(_t('app.admin.members.unable_to_delete_the_member'));\n console.error(error);\n }\n );\n }\n );\n };\n\n /**\n * Ask for confirmation then delete the specified administrator\n * @param admins {Array} full list of administrators\n * @param admin {Object} administrator to delete\n */\n $scope.destroyAdmin = function (admins, admin) {\n dialogs.confirm(\n {\n resolve: {\n object () {\n return {\n title: _t('app.admin.members.confirmation_required'),\n msg: $sce.trustAsHtml(_t('app.admin.members.do_you_really_want_to_delete_this_administrator_this_cannot_be_undone') + '

    ' + _t('app.admin.members.this_may_take_a_while_please_wait'))\n };\n }\n }\n },\n function () { // cancel confirmed\n Admin.delete(\n { id: admin.id },\n function () {\n admins.splice(findItemIdxById(admins, admin.id), 1);\n return growl.success(_t('app.admin.members.administrator_successfully_deleted'));\n },\n function (error) {\n growl.error(_t('app.admin.members.unable_to_delete_the_administrator'));\n console.error(error);\n }\n );\n }\n );\n };\n\n /**\n * Ask for confirmation then delete the specified partner\n * @param partners {Array} full list of partners\n * @param partner {Object} partner to delete\n */\n $scope.destroyPartner = function (partners, partner) {\n dialogs.confirm(\n {\n resolve: {\n object () {\n return {\n title: _t('app.admin.members.confirmation_required'),\n msg: $sce.trustAsHtml(_t('app.admin.members.delete_this_partner') + '

    ' + _t('app.admin.members.this_may_take_a_while_please_wait'))\n };\n }\n }\n },\n function () { // cancel confirmed\n User.delete(\n { id: partner.id },\n function () {\n partners.splice(findItemIdxById(partners, partner.id), 1);\n return growl.success(_t('app.admin.members.partner_successfully_deleted'));\n },\n function (error) {\n growl.error(_t('app.admin.members.unable_to_delete_the_partner'));\n console.error(error);\n }\n );\n }\n );\n };\n\n /**\n * Ask for confirmation then delete the specified manager\n * @param managers {Array} full list of managers\n * @param manager {Object} manager to delete\n */\n $scope.destroyManager = function (managers, manager) {\n dialogs.confirm(\n {\n resolve: {\n object () {\n return {\n title: _t('app.admin.members.confirmation_required'),\n msg: $sce.trustAsHtml(_t('app.admin.members.delete_this_manager') + '

    ' + _t('app.admin.members.this_may_take_a_while_please_wait'))\n };\n }\n }\n },\n function () { // cancel confirmed\n User.delete(\n { id: manager.id },\n function () {\n managers.splice(findItemIdxById(managers, manager.id), 1);\n return growl.success(_t('app.admin.members.manager_successfully_deleted'));\n },\n function (error) {\n growl.error(_t('app.admin.members.unable_to_delete_the_manager'));\n console.error(error);\n }\n );\n }\n );\n };\n\n /**\n * Callback for the 'load more' button.\n * Will load the next results of the current search, if any\n */\n $scope.showNextMembers = function () {\n $scope.member.page += 1;\n return memberSearch(true);\n };\n\n /**\n * Callback when the search field content changes: reload the search results\n */\n $scope.updateTextSearch = function () {\n if (searchTimeout) clearTimeout(searchTimeout);\n searchTimeout = setTimeout(function () {\n resetSearchMember();\n memberSearch();\n }, 300);\n };\n\n /**\n * Callback when the member filter changes: reload the search results\n */\n $scope.updateMemberFilter = function () {\n resetSearchMember();\n memberSearch();\n };\n\n /**\n * Callback to alert the admin that the export request was acknowledged and is\n * processing right now.\n */\n $scope.alertExport = function (type) {\n Export.status({ category: 'users', type }).then(function (res) {\n if (!res.data.exists) {\n return growl.success(_t('app.admin.members.export_is_running_you_ll_be_notified_when_its_ready'));\n }\n });\n };\n\n /**\n * Set up the feature-tour for the admin/members page.\n * This is intended as a contextual help (when pressing F1)\n */\n $scope.setupMembersTour = function () {\n // get the tour defined by the ui-tour directive\n const uitour = uiTourService.getTourByName('members');\n uitour.createStep({\n selector: 'body',\n stepId: 'welcome',\n order: 0,\n title: _t('app.admin.tour.members.welcome.title'),\n content: _t('app.admin.tour.members.welcome.content'),\n placement: 'bottom',\n orphan: true\n });\n uitour.createStep({\n selector: '.members-management .members-list',\n stepId: 'list',\n order: 1,\n title: _t('app.admin.tour.members.list.title'),\n content: _t('app.admin.tour.members.list.content'),\n placement: 'top'\n });\n uitour.createStep({\n selector: '.members-management .search-members',\n stepId: 'search',\n order: 2,\n title: _t('app.admin.tour.members.search.title'),\n content: _t('app.admin.tour.members.search.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.members-management .filter-members',\n stepId: 'filter',\n order: 3,\n title: _t('app.admin.tour.members.filter.title'),\n content: _t('app.admin.tour.members.filter.content'),\n placement: 'bottom'\n });\n if ($scope.members.length > 0) {\n uitour.createStep({\n selector: '.members-management .members-list .buttons',\n stepId: 'actions',\n order: 4,\n title: _t('app.admin.tour.members.actions.title'),\n content: _t('app.admin.tour.members.actions.content'),\n placement: 'left'\n });\n }\n if (AuthService.isAuthorized('admin')) {\n uitour.createStep({\n selector: '.members-management .exports-buttons',\n stepId: 'exports',\n order: 5,\n title: _t('app.admin.tour.members.exports.title'),\n content: _t('app.admin.tour.members.exports.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.heading .import-members',\n stepId: 'import',\n order: 6,\n title: _t('app.admin.tour.members.import.title'),\n content: _t('app.admin.tour.members.import.content'),\n placement: 'left'\n });\n }\n uitour.createStep({\n selector: '.members-management .admins-tab',\n stepId: 'admins',\n order: 7,\n title: _t('app.admin.tour.members.admins.title'),\n content: _t('app.admin.tour.members.admins.content'),\n placement: 'bottom'\n });\n if (AuthService.isAuthorized('admin')) {\n uitour.createStep({\n selector: '.members-management .groups-tab',\n stepId: 'groups',\n order: 8,\n title: _t('app.admin.tour.members.groups.title'),\n content: _t('app.admin.tour.members.groups.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.members-management .labels-tab',\n stepId: 'labels',\n order: 9,\n title: _t('app.admin.tour.members.labels.title'),\n content: _t('app.admin.tour.members.labels.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.members-management .sso-tab',\n stepId: 'sso',\n order: 10,\n title: _t('app.admin.tour.members.sso.title'),\n content: _t('app.admin.tour.members.sso.content'),\n placement: 'bottom',\n popupClass: 'shift-left-50'\n });\n }\n uitour.createStep({\n selector: 'body',\n stepId: 'conclusion',\n order: 11,\n title: _t('app.admin.tour.conclusion.title'),\n content: _t('app.admin.tour.conclusion.content'),\n placement: 'bottom',\n orphan: true\n });\n // on step change, change the active tab if needed\n uitour.on('stepChanged', function (nextStep) {\n if (nextStep.stepId === 'list' || nextStep.stepId === 'import') {\n $scope.tabs.active = 0;\n $scope.tabs.sub = 0;\n }\n if (nextStep.stepId === 'admins') {\n $scope.tabs.active = 0;\n $scope.tabs.sub = 1;\n }\n if (nextStep.stepId === 'groups') {\n $scope.tabs.active = 1;\n }\n if (nextStep.stepId === 'labels') {\n $scope.tabs.active = 2;\n }\n if (nextStep.stepId === 'sso') {\n $scope.tabs.active = 3;\n }\n });\n // on tour end, save the status in database\n uitour.on('ended', function () {\n if (uitour.getStatus() === uitour.Status.ON && $scope.currentUser.profile_attributes.tours.indexOf('members') < 0) {\n Member.completeTour({ id: $scope.currentUser.id }, { tour: 'members' }, function (res) {\n $scope.currentUser.profile_attributes.tours = res.tours;\n });\n }\n });\n // if the user has never seen the tour, show him now\n if (settingsPromise.feature_tour_display !== 'manual' && $scope.currentUser.profile_attributes.tours.indexOf('members') < 0) {\n uitour.start();\n }\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n if (!membersPromise[0] || (membersPromise[0].maxMembers <= $scope.members.length)) {\n return $scope.member.noMore = true;\n }\n };\n\n /**\n * Will temporize the search query to prevent overloading the API\n */\n let searchTimeout = null;\n\n /**\n * Iterate through the provided array and return the index of the requested item\n * @param items {Array} full list of users with the 'admin' role\n * @param id {Number} id of the item to retrieve in the list\n * @returns {Number} index of the requested item, in the provided array\n */\n const findItemIdxById = function (items, id) {\n return (items.map(function (item) { return item.id; })).indexOf(id);\n };\n\n /**\n * Reinitialize the context of the search to display new results set\n */\n const resetSearchMember = function () {\n $scope.member.noMore = false;\n $scope.member.page = 1;\n };\n\n /**\n * Run a search query with the current parameters set ($scope.member[searchText,order,page])\n * and affect or append the result in $scope.members, depending on the concat parameter\n * @param [concat] {boolean} if true, the result will be appended to $scope.members instead of being replaced\n */\n const memberSearch = function (concat) {\n Member.list({\n query: {\n search: $scope.member.searchText,\n order_by: $scope.member.order,\n filter: $scope.member.memberFilter,\n page: $scope.member.page,\n size: USERS_PER_PAGE\n }\n }, function (members) {\n if (concat) {\n $scope.members = $scope.members.concat(members);\n } else {\n $scope.members = members;\n }\n\n if (!members[0] || (members[0].maxMembers <= $scope.members.length)) {\n return $scope.member.noMore = true;\n }\n });\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n\n/**\n * Controller used in the member edition page\n */\nApplication.Controllers.controller('EditMemberController', ['$scope', '$state', '$transition$', 'Member', 'Training', 'dialogs', 'growl', 'Group', 'Subscription', 'CSRF', 'memberPromise', 'tagsPromise', '$uibModal', 'Plan', '$filter', '_t', 'walletPromise', 'transactionsPromise', 'activeProviderPromise', 'Wallet', 'settingsPromise', 'ProofOfIdentityType',\n function ($scope, $state, $transition$, Member, Training, dialogs, growl, Group, Subscription, CSRF, memberPromise, tagsPromise, $uibModal, Plan, $filter, _t, walletPromise, transactionsPromise, activeProviderPromise, Wallet, settingsPromise, ProofOfIdentityType) {\n /* PUBLIC SCOPE */\n\n // API URL where the form will be posted\n $scope.actionUrl = `/api/members/${$transition$.params().id}`;\n\n // Form action on the above URL\n $scope.method = 'patch';\n\n // List of tags joinable with user\n $scope.tags = tagsPromise;\n\n // The user to edit\n $scope.user = cleanUser(memberPromise);\n\n // Should the password be modified?\n $scope.password = { change: false };\n\n // is the phone number required in _member_form?\n $scope.phoneRequired = (settingsPromise.phone_required === 'true');\n\n // is the address required in _member_form?\n $scope.addressRequired = (settingsPromise.address_required === 'true');\n\n // is user validation required\n $scope.enableUserValidationRequired = (settingsPromise.user_validation_required === 'true');\n\n // the user subscription\n if (($scope.user.subscribed_plan != null) && ($scope.user.subscription != null)) {\n $scope.subscription = $scope.user.subscription;\n } else {\n Plan.query({ group_id: $scope.user.group_id }, function (plans) {\n $scope.plans = plans;\n return Array.from($scope.plans).map(function (plan) {\n return (plan.nameToDisplay = $filter('humanReadablePlanName')(plan));\n });\n });\n }\n\n // Available trainings list\n $scope.trainings = [];\n\n // Profiles types (student/standard/...)\n $scope.groups = [];\n\n // the user wallet\n $scope.wallet = walletPromise;\n\n // user wallet transactions\n $scope.transactions = transactionsPromise;\n\n // used in wallet partial template to identify parent view\n $scope.view = 'member_edit';\n\n // current active authentication provider\n $scope.activeProvider = activeProviderPromise;\n\n // modal dialog to extend the current subscription for free\n $scope.isOpenFreeExtendModal = false;\n\n // modal dialog to renew the current subscription\n $scope.isOpenRenewModal = false;\n\n // modal dialog to take a new subscription\n $scope.isOpenSubscribeModal = false;\n\n // modal dialog to change the user's role\n $scope.isOpenChangeRoleModal = false;\n\n /**\n * Open a modal dialog asking for confirmation to change the role of the given user\n * @returns {*}\n */\n $scope.changeUserRole = function () {\n const modalInstance = $uibModal.open({\n animation: true,\n templateUrl: '/admin/members/change_role_modal.html',\n size: 'lg',\n resolve: {\n user () { return $scope.user; }\n },\n controller: ['$scope', '$uibModalInstance', 'Member', 'user', '_t', function ($scope, $uibModalInstance, Member, user, _t) {\n $scope.user = user;\n\n $scope.role = user.role;\n\n $scope.roles = [\n { key: 'admin', label: _t('app.admin.members_edit.admin') },\n { key: 'manager', label: _t('app.admin.members_edit.manager'), notAnOption: (user.role === 'admin') },\n { key: 'member', label: _t('app.admin.members_edit.member'), notAnOption: (user.role === 'admin' || user.role === 'manager') }\n ];\n\n $scope.ok = function () {\n Member.updateRole(\n { id: $scope.user.id },\n { role: $scope.role },\n function (_res) {\n growl.success(_t('app.admin.members_edit.role_changed', { OLD: _t(`app.admin.members_edit.${user.role}`), NEW: _t(`app.admin.members_edit.${$scope.role}`) }));\n return $uibModalInstance.close(_res);\n },\n function (error) {\n growl.error(_t('app.admin.members_edit.error_while_changing_role'));\n console.error(error);\n }\n );\n };\n\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n }]\n });\n // once the form was validated successfully ...\n return modalInstance.result.then(function (user) {\n // remove the user for the old list add to the new\n });\n };\n\n /**\n * Opens/closes the modal dialog to freely extend the subscription\n */\n $scope.toggleFreeExtendModal = () => {\n setTimeout(() => {\n $scope.isOpenFreeExtendModal = !$scope.isOpenFreeExtendModal;\n $scope.$apply();\n }, 50);\n };\n\n /**\n * Opens/closes the modal dialog to renew the subscription (with payment)\n */\n $scope.toggleRenewModal = () => {\n setTimeout(() => {\n $scope.isOpenRenewModal = !$scope.isOpenRenewModal;\n $scope.$apply();\n }, 50);\n };\n\n /**\n * Opens/closes the modal dialog to renew the subscription (with payment)\n */\n $scope.toggleSubscribeModal = () => {\n setTimeout(() => {\n $scope.isOpenSubscribeModal = !$scope.isOpenSubscribeModal;\n $scope.$apply();\n }, 50);\n };\n\n /**\n * Opens/closes the modal dialog to change the user's role\n */\n $scope.toggleChangeRoleModal = () => {\n setTimeout(() => {\n $scope.isOpenChangeRoleModal = !$scope.isOpenChangeRoleModal;\n $scope.$apply();\n }, 0);\n };\n\n /**\n * Callback triggered if the subscription was successfully extended\n */\n $scope.onExtendSuccess = (message, newExpirationDate) => {\n growl.success(message);\n $scope.subscription.expired_at = newExpirationDate;\n };\n\n /**\n * Callback triggered if a new subscription was successfully taken\n */\n $scope.onSubscribeSuccess = (message, newSubscription) => {\n growl.success(message);\n $scope.subscription = newSubscription;\n };\n\n /**\n * Callback triggered if validate member was successfully taken\n */\n $scope.onValidateMemberSuccess = (_user, message) => {\n growl.success(message);\n setTimeout(() => {\n $scope.user = _user;\n $scope.user.statistic_profile_attributes.birthday = moment(_user.statistic_profile_attributes.birthday).toDate();\n $scope.$apply();\n }, 50);\n };\n\n /**\n * Callback triggered in case of error\n */\n $scope.onError = (message) => {\n growl.error(message);\n };\n\n /**\n * Callback triggered when the user was successfully updated\n */\n $scope.onUserSuccess = () => {\n growl.success(_t('app.admin.members_edit.update_success'));\n $state.go('app.admin.members');\n };\n\n /**\n * Callback triggered in case of success\n */\n $scope.onSuccess = (message) => {\n growl.success(message);\n };\n\n $scope.createWalletCreditModal = function (user, wallet) {\n const modalInstance = $uibModal.open({\n animation: true,\n templateUrl: '/wallet/credit_modal.html',\n controller: ['$scope', '$uibModalInstance', 'Wallet', function ($scope, $uibModalInstance, Wallet) {\n // default: do not generate a refund invoice\n $scope.generate_avoir = false;\n\n // date of the generated refund invoice\n $scope.avoir_date = null;\n\n // optional description shown on the refund invoice\n $scope.description = '';\n\n // default configuration for the avoir date selector widget\n $scope.datePicker = {\n format: Fablab.uibDateFormat,\n opened: false,\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n /**\n * Callback to open/close the date picker\n */\n $scope.toggleDatePicker = function ($event) {\n $event.preventDefault();\n $event.stopPropagation();\n return $scope.datePicker.opened = !$scope.datePicker.opened;\n };\n\n /**\n * Modal dialog validation callback\n */\n $scope.ok = function () {\n Wallet.credit(\n { id: wallet.id },\n {\n amount: $scope.amount,\n avoir: $scope.generate_avoir,\n avoir_date: $scope.avoir_date,\n avoir_description: $scope.description\n },\n function (_wallet) {\n growl.success(_t('app.shared.wallet.wallet_credit_successfully'));\n return $uibModalInstance.close(_wallet);\n },\n function (error) {\n growl.error(_t('app.shared.wallet.a_problem_occurred_for_wallet_credit'));\n console.error(error);\n }\n );\n };\n\n /**\n * Modal dialog cancellation callback\n */\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n }\n ]\n });\n // once the form was validated successfully...\n return modalInstance.result.then(function (wallet) {\n $scope.wallet = wallet;\n return Wallet.transactions({ id: wallet.id }, function (transactions) { $scope.transactions = transactions; });\n });\n };\n\n /**\n * To use as callback in Array.prototype.filter to get only enabled plans\n */\n $scope.filterDisabledPlans = function (plan) { return !plan.disabled; };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n CSRF.setMetaTags();\n\n // the user subscription\n if (($scope.user.subscribed_plan != null) && ($scope.user.subscription != null)) {\n $scope.subscription = $scope.user.subscription;\n } else {\n Plan.query({ group_id: $scope.user.group_id }, function (plans) {\n $scope.plans = plans;\n return Array.from($scope.plans).map(function (plan) {\n return (plan.nameToDisplay = `${plan.base_name} - ${plan.interval}`);\n });\n });\n }\n\n ProofOfIdentityType.query({ group_id: $scope.user.group_id }, function (proofOfIdentityTypes) {\n $scope.hasProofOfIdentityTypes = proofOfIdentityTypes.length > 0;\n });\n\n // Using the MembersController\n return new MembersController($scope, $state, Group, Training);\n };\n\n // prepare the user for the react-hook-form\n function cleanUser (user) {\n delete user.$promise;\n delete user.$resolved;\n return user;\n }\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n\n/**\n * Controller used in the member's creation page (admin view)\n */\nApplication.Controllers.controller('NewMemberController', ['$scope', '$state', 'Member', 'Training', 'Group', 'CSRF', 'settingsPromise', 'growl', '_t',\n function ($scope, $state, Member, Training, Group, CSRF, settingsPromise, growl, _t) {\n CSRF.setMetaTags();\n\n /* PUBLIC SCOPE */\n\n // API URL where the form will be posted\n $scope.actionUrl = '/api/members';\n\n // Form action on the above URL\n $scope.method = 'post';\n\n // Should the password be set manually or generated?\n $scope.password = { change: false };\n\n // is the phone number required in _member_form?\n $scope.phoneRequired = (settingsPromise.phone_required === 'true');\n\n // is the address required to sign-up?\n $scope.addressRequired = (settingsPromise.address_required === 'true');\n\n // Default member's profile parameters\n $scope.user = {\n plan_interval: '',\n invoicing_profile_attributes: {},\n statistic_profile_attributes: {}\n };\n\n // Callback when the admin check/uncheck the box telling that the new user is an organization.\n // Disable or enable the organization fields in the form, accordingly\n $scope.toggleOrganization = function () {\n if ($scope.user.organization) {\n if (!$scope.user.invoicing_profile_attributes) { $scope.user.invoicing_profile_attributes = {}; }\n $scope.user.invoicing_profile_attributes.organization_attributes = {};\n } else {\n $scope.user.invoicing_profile_attributes.organization_attributes = undefined;\n }\n };\n\n /**\n * Callback triggered when the user was successfully updated\n */\n $scope.onUserSuccess = () => {\n growl.success(_t('app.admin.members_new.create_success'));\n $state.go('app.admin.members');\n };\n\n /**\n * Callback triggered in case of error\n */\n $scope.onError = (message) => {\n growl.error(message);\n };\n\n // Using the MembersController\n return new MembersController($scope, $state, Group, Training);\n }\n]);\n\n/**\n * Controller used in the member's import page: import from CSV (admin view)\n */\nApplication.Controllers.controller('ImportMembersController', ['$scope', '$state', 'Group', 'Training', 'CSRF', 'tags', 'growl',\n function ($scope, $state, Group, Training, CSRF, tags, growl) {\n CSRF.setMetaTags();\n\n /* PUBLIC SCOPE */\n\n // API URL where the form will be posted\n $scope.actionUrl = '/api/imports/members';\n\n // Form action on the above URL\n $scope.method = 'post';\n\n // List of all tags\n $scope.tags = tags;\n\n /*\n * Callback run after the form was submitted\n * @param content {*} The result provided by the server, may be an Import object, or an error message\n */\n $scope.onImportResult = function (content) {\n if (content.id) {\n $state.go('app.admin.members_import_result', { id: content.id });\n } else {\n growl.error(JSON.stringify(content));\n }\n };\n\n // Using the MembersController\n return new MembersController($scope, $state, Group, Training);\n }\n]);\n\n/**\n * Controller used in the member's import results page (admin view)\n */\nApplication.Controllers.controller('ImportMembersResultController', ['$scope', '$state', 'Import', 'importItem',\n function ($scope, $state, Import, importItem) {\n /* PUBLIC SCOPE */\n\n // Current import as saved in database\n $scope.import = importItem;\n\n // Current import results\n $scope.results = null;\n\n /**\n * Changes the view of the admin to the members import page\n */\n $scope.cancel = function () { $state.go('app.admin.members_import'); };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n $scope.results = JSON.parse($scope.import.results);\n if (!$scope.results) {\n setTimeout(function () {\n Import.get({ id: $scope.import.id }, function (data) {\n $scope.import = data;\n initialize();\n });\n }, 5000);\n }\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n initialize();\n }\n]);\n\n/**\n * Controller used in the admin creation page (admin view)\n */\nApplication.Controllers.controller('NewAdminController', ['$state', '$scope', 'Admin', 'growl', '_t', 'settingsPromise', 'groupsPromise',\n function ($state, $scope, Admin, growl, _t, settingsPromise, groupsPromise) {\n // default admin profile\n let getGender;\n $scope.admin = {\n statistic_profile_attributes: {\n gender: true\n },\n profile_attributes: {},\n invoicing_profile_attributes: {}\n };\n\n // Default parameters for AngularUI-Bootstrap datepicker\n $scope.datePicker = {\n format: Fablab.uibDateFormat,\n opened: false,\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n // is the phone number required in _admin_form?\n $scope.phoneRequired = (settingsPromise.phone_required === 'true');\n\n // is the address required in _admin_form?\n $scope.addressRequired = (settingsPromise.address_required === 'true');\n\n // all available groups\n $scope.groups = groupsPromise;\n\n /**\n * Shows the birthday datepicker\n */\n $scope.openDatePicker = function () { $scope.datePicker.opened = true; };\n\n /**\n * Send the new admin, currently stored in $scope.admin, to the server for database saving\n */\n $scope.saveAdmin = function () {\n Admin.save(\n {},\n { admin: $scope.admin },\n function () {\n growl.success(_t('app.admin.admins_new.administrator_successfully_created_he_will_receive_his_connection_directives_by_email', { GENDER: getGender($scope.admin) }));\n return $state.go('app.admin.members');\n }\n , function (error) {\n growl.error(_t('app.admin.admins_new.failed_to_create_admin') + JSON.stringify(error.data ? error.data : error));\n console.error(error);\n }\n );\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Return an enumerable meaningful string for the gender of the provider user\n * @param user {Object} Database user record\n * @return {string} 'male' or 'female'\n */\n return getGender = function (user) {\n if (user.statistic_profile_attributes) {\n if (user.statistic_profile_attributes.gender) { return 'male'; } else { return 'female'; }\n } else { return 'other'; }\n };\n }\n\n]);\n\n/**\n * Controller used in the manager's creation page (admin view)\n */\nApplication.Controllers.controller('NewManagerController', ['$state', '$scope', 'User', 'groupsPromise', 'tagsPromise', 'growl', '_t',\n function ($state, $scope, User, groupsPromise, tagsPromise, growl, _t) {\n // default admin profile\n $scope.manager = {\n statistic_profile_attributes: {\n gender: true\n },\n profile_attributes: {},\n invoicing_profile_attributes: {}\n };\n\n // Default parameters for AngularUI-Bootstrap datepicker\n $scope.datePicker = {\n format: Fablab.uibDateFormat,\n opened: false,\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n // list of all groups\n $scope.groups = groupsPromise.filter(function (g) { return !g.disabled; });\n\n // list of all tags\n $scope.tags = tagsPromise;\n\n /**\n * Shows the birthday datepicker\n */\n $scope.openDatePicker = function () { $scope.datePicker.opened = true; };\n\n /**\n * Send the new manager, currently stored in $scope.manager, to the server for database saving\n */\n $scope.saveManager = function () {\n User.save(\n {},\n { manager: $scope.manager },\n function () {\n growl.success(_t('app.admin.manager_new.manager_successfully_created', { GENDER: getGender($scope.manager) }));\n return $state.go('app.admin.members');\n }\n , function (error) {\n growl.error(_t('app.admin.admins_new.failed_to_create_manager') + JSON.stringify(error.data ? error.data : error));\n console.error(error);\n }\n );\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Return an enumerable meaningful string for the gender of the provider user\n * @param user {Object} Database user record\n * @return {string} 'male' or 'female'\n */\n const getGender = function (user) {\n if (user.statistic_profile_attributes) {\n if (user.statistic_profile_attributes.gender) { return 'male'; } else { return 'female'; }\n } else { return 'other'; }\n };\n }\n\n]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\nApplication.Controllers.controller('OpenAPIClientsController', ['$scope', 'clientsPromise', 'settingsPromise', 'growl', 'OpenAPIClient', 'dialogs', '_t', 'Member', 'uiTourService',\n function ($scope, clientsPromise, settingsPromise, growl, OpenAPIClient, dialogs, _t, Member, uiTourService) {\n /* PUBLIC SCOPE */\n\n // clients list\n $scope.clients = clientsPromise;\n $scope.order = null;\n $scope.clientFormVisible = false;\n $scope.client = {};\n\n /**\n * Show the name edition form for a new client\n */\n $scope.createClient = function () {\n $scope.clientFormVisible = true;\n $scope.client = {};\n };\n\n /**\n * Change the order criterion to the one provided\n * @param orderBy {string} ordering criterion\n */\n $scope.setOrder = function (orderBy) {\n if ($scope.order === orderBy) {\n return $scope.order = `-${orderBy}`;\n } else {\n return $scope.order = orderBy;\n }\n };\n\n /**\n * Reset the name ot its original value and close the edition form\n */\n $scope.cancelEdit = function () {\n $scope.client.name = $scope.clientOriginalName;\n $scope.clientFormVisible = false;\n };\n\n $scope.saveClient = function (client) {\n if (client.id != null) {\n OpenAPIClient.update({ id: client.id }, { open_api_client: client }, function (clientResp) {\n client = clientResp;\n return growl.success(_t('app.admin.open_api_clients.client_successfully_updated'));\n });\n } else {\n OpenAPIClient.save({ open_api_client: client }, function (client) {\n $scope.clients.push(client);\n return growl.success(_t('app.admin.open_api_clients.client_successfully_created'));\n });\n }\n\n $scope.clientFormVisible = false;\n $scope.client = {};\n };\n\n $scope.editClient = function (client) {\n $scope.clientFormVisible = true;\n $scope.client = client;\n $scope.clientOriginalName = client.name;\n };\n\n $scope.deleteClient = index =>\n dialogs.confirm({\n resolve: {\n object () {\n return {\n title: _t('app.admin.open_api_clients.confirmation_required'),\n msg: _t('app.admin.open_api_clients.do_you_really_want_to_delete_this_open_api_client')\n };\n }\n }\n }\n , () =>\n OpenAPIClient.delete({ id: $scope.clients[index].id }, function () {\n $scope.clients.splice(index, 1);\n return growl.success(_t('app.admin.open_api_clients.client_successfully_deleted'));\n })\n );\n\n $scope.resetToken = client =>\n dialogs.confirm({\n resolve: {\n object () {\n return {\n title: _t('app.admin.open_api_clients.confirmation_required'),\n msg: _t('app.admin.open_api_clients.do_you_really_want_to_revoke_this_open_api_access')\n };\n }\n }\n }\n , () =>\n OpenAPIClient.resetToken({ id: client.id }, {}, function (clientResp) {\n client.token = clientResp.token;\n return growl.success(_t('app.admin.open_api_clients.access_successfully_revoked'));\n })\n );\n\n /**\n * Setup the feature-tour for the admin/open_api_clients page.\n * This is intended as a contextual help (when pressing F1)\n */\n $scope.setupOpenAPITour = function () {\n // get the tour defined by the ui-tour directive\n const uitour = uiTourService.getTourByName('open-api');\n uitour.createStep({\n selector: 'body',\n stepId: 'welcome',\n order: 0,\n title: _t('app.admin.tour.open_api.welcome.title'),\n content: _t('app.admin.tour.open_api.welcome.content'),\n placement: 'bottom',\n orphan: true\n });\n uitour.createStep({\n selector: '.heading .documentation-button',\n stepId: 'doc',\n order: 1,\n title: _t('app.admin.tour.open_api.doc.title'),\n content: _t('app.admin.tour.open_api.doc.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: 'body',\n stepId: 'conclusion',\n order: 2,\n title: _t('app.admin.tour.conclusion.title'),\n content: _t('app.admin.tour.conclusion.content'),\n placement: 'bottom',\n orphan: true\n });\n // on tour end, save the status in database\n uitour.on('ended', function () {\n if (uitour.getStatus() === uitour.Status.ON && $scope.currentUser.profile_attributes.tours.indexOf('open-api') < 0) {\n Member.completeTour({ id: $scope.currentUser.id }, { tour: 'open-api' }, function (res) {\n $scope.currentUser.profile_attributes.tours = res.tours;\n });\n }\n });\n // if the user has never seen the tour, and if the display behavior is not configured to manual triggering only, show the tour now\n if (settingsPromise.feature_tour_display !== 'manual' && $scope.currentUser.profile_attributes.tours.indexOf('open-api') < 0) {\n uitour.start();\n }\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {};\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n\n]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n'use strict';\n\nApplication.Controllers.controller('AdminShowOrdersController', ['$rootScope', '$scope', 'CSRF', 'growl', '$state', '$transition$',\n function ($rootScope, $scope, CSRF, growl, $state, $transition$) {\n /* PRIVATE SCOPE */\n\n /* PUBLIC SCOPE */\n $scope.orderId = $transition$.params().id;\n\n /**\n * Callback triggered in case of error\n */\n $scope.onError = (message) => {\n growl.error(message);\n };\n\n /**\n * Callback triggered in case of success\n */\n $scope.onSuccess = (message) => {\n growl.success(message);\n };\n\n /**\n * Click Callback triggered in case of back orders list\n */\n $scope.backOrdersList = () => {\n $state.go('app.admin.store.orders');\n };\n\n // currently logged-in user\n $scope.currentUser = $rootScope.currentUser;\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n // set the authenticity tokens in the forms\n CSRF.setMetaTags();\n };\n\n // init the controller (call at the end !)\n return initialize();\n }\n\n]);\n","/* eslint-disable\n camelcase,\n handle-callback-err,\n no-return-assign,\n no-undef,\n no-unused-expressions,\n no-unused-vars,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS205: Consider reworking code to avoid use of IIFEs\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\n/* COMMON CODE */\n\nclass PlanController {\n constructor ($scope, groups, prices, partners, CSRF, _t) {\n // protection against request forgery\n CSRF.setMetaTags();\n\n // groups list\n $scope.groups = groups\n .filter(function (g) { return !g.disabled; })\n .map(e => Object.assign({}, e, { category: 'app.shared.plan.groups', id: `${e.id}` }));\n $scope.groups.push({ id: 'all', name: 'app.shared.plan.transversal_all_groups', category: 'app.shared.plan.all' });\n\n // dynamically translate a label if needed\n $scope.translateLabel = function (group, prop) {\n return group[prop] && group[prop].match(/^app\\./) ? _t(group[prop]) : group[prop];\n };\n\n // users with role 'partner', notifiable for a partner plan\n $scope.partners = partners.users;\n\n // Subscriptions prices, machines prices and training prices, per groups\n $scope.group_pricing = prices;\n\n /**\n * For use with 'ng-class', returns the CSS class name for the uploads previews.\n * The preview may show a placeholder or the content of the file depending on the upload state.\n * @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules)\n */\n $scope.fileinputClass = function (v) {\n if (v) {\n return 'fileinput-exists';\n } else {\n return 'fileinput-new';\n }\n };\n\n /**\n * Mark the provided file for deletion\n * @param file {Object}\n */\n $scope.deleteFile = function (file) {\n if ((file != null) && (file.id != null)) {\n return file._destroy = true;\n }\n };\n\n /**\n * Check and limit\n * @param content\n */\n $scope.limitDescriptionSize = function (content) {\n alert(content);\n };\n }\n}\n\n/**\n * Controller used in the plan creation form\n */\nApplication.Controllers.controller('NewPlanController', ['$scope', '$uibModal', 'groups', 'prices', 'partners', 'CSRF', '$state', 'growl', '_t', 'planCategories',\n function ($scope, $uibModal, groups, prices, partners, CSRF, $state, growl, _t, planCategories) {\n /* PUBLIC SCOPE */\n\n // current form is used to create a new plan\n $scope.mode = 'creation';\n\n // list of all plan categories\n $scope.planCategories = planCategories;\n // we add an empty element to let the user select 'no category'\n $scope.planCategories.unshift({ id: null, name: '' });\n\n // prices bindings\n $scope.prices = {\n training: {},\n machine: {}\n };\n\n // form inputs bindings\n $scope.plan = {\n type: null,\n group_id: null,\n interval: null,\n intervalCount: 0,\n amount: null,\n is_rolling: false,\n partnerId: null,\n partnerContact: null,\n ui_weight: 0,\n monthly_payment: false,\n plan_category_id: null\n };\n\n // API URL where the form will be posted\n $scope.actionUrl = '/api/plans/';\n\n // HTTP method for the rest API\n $scope.method = 'POST';\n\n /**\n * Checks if the partner contact is a valid data. Used in the form validation process\n * @returns {boolean}\n */\n $scope.partnerIsValid = function () { return ($scope.plan.type === 'Plan') || ($scope.plan.partnerId || ($scope.plan.partnerContact && $scope.plan.partnerContact.email)); };\n\n /**\n * Open a modal dialog allowing the admin to create a new partner user\n */\n $scope.openPartnerNewModal = function (subscription) {\n const modalInstance = $uibModal.open({\n animation: true,\n templateUrl: '/shared/_partner_new_modal.html',\n size: 'lg',\n controller: ['$scope', '$uibModalInstance', 'User', function ($scope, $uibModalInstance, User) {\n $scope.partner = {};\n\n $scope.ok = function () {\n User.save(\n {},\n { user: $scope.partner },\n function (user) {\n $scope.partner.id = user.id;\n $scope.partner.name = `${user.first_name} ${user.last_name}`;\n $uibModalInstance.close($scope.partner);\n },\n function (error) {\n growl.error(_t('app.admin.plans.new.unable_to_save_this_user_check_that_there_isnt_an_already_a_user_with_the_same_name'));\n console.error(error);\n }\n );\n };\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n }]\n });\n // once the form was validated successfully ...\n return modalInstance.result.then(function (partner) {\n $scope.partners.push(partner);\n return $scope.plan.partnerId = partner.id;\n });\n };\n\n /**\n * This will update the monthly_payment value when the user toggles the switch button\n * @param checked {Boolean}\n */\n $scope.toggleMonthlyPayment = function (checked) {\n toggle('monthly_payment', checked);\n };\n\n /**\n * This will update the is_rolling value when the user toggles the switch button\n * @param checked {Boolean}\n */\n $scope.toggleIsRolling = function (checked) {\n toggle('is_rolling', checked);\n };\n\n /**\n * Display some messages and redirect the user, once the form was submitted, depending on the result status\n * (failed/succeeded).\n * @param content {Object}\n */\n $scope.afterSubmit = function (content) {\n if (content.plan_ids === null || content.plan_ids === undefined) {\n return growl.error(_t('app.admin.plans.new.unable_to_create_the_subscription_please_try_again'));\n } else {\n growl.success(_t('app.admin.plans.new.successfully_created_subscriptions_dont_forget_to_redefine_prices'));\n if (content.plan_ids.length > 1) {\n return $state.go('app.admin.pricing');\n } else {\n return $state.go('app.admin.plans.edit', { id: content.plan_ids[0] });\n }\n }\n };\n\n /* PRIVATE SCOPE */\n const initialize = function () {\n $scope.$watch(scope => scope.plan.interval,\n (newValue, oldValue) => {\n if (newValue === 'week') { $scope.plan.monthly_payment = false; }\n }\n );\n };\n\n /**\n * Asynchronously updates the given property with the new provided value\n * @param property {string}\n * @param value {*}\n */\n const toggle = function (property, value) {\n setTimeout(() => {\n $scope.plan[property] = value;\n $scope.$apply();\n }, 50);\n };\n\n initialize();\n return new PlanController($scope, groups, prices, partners, CSRF, _t);\n }\n]);\n\n/**\n * Controller used in the plan edition form\n */\nApplication.Controllers.controller('EditPlanController', ['$scope', 'groups', 'plans', 'planPromise', 'machines', 'spaces', 'prices', 'partners', 'CSRF', '$state', '$transition$', 'growl', '$filter', '_t', 'Plan', 'planCategories',\n function ($scope, groups, plans, planPromise, machines, spaces, prices, partners, CSRF, $state, $transition$, growl, $filter, _t, Plan, planCategories) {\n /* PUBLIC SCOPE */\n\n // List of spaces\n $scope.spaces = spaces;\n\n // List of plans\n $scope.plans = plans;\n\n // List of machines\n $scope.machines = machines;\n\n // List of groups\n $scope.allGroups = groups;\n\n // list of all plan categories\n $scope.planCategories = planCategories;\n // we add an empty element to let the user select 'no category'\n $scope.planCategories.unshift({ id: null, name: '' });\n\n // current form is used for edition mode\n $scope.mode = 'edition';\n\n // edited plan data\n $scope.plan = Object.assign({}, planPromise, { group_id: `${planPromise.group_id}` });\n if ($scope.plan.type === null) { $scope.plan.type = 'Plan'; }\n if ($scope.plan.disabled) { $scope.plan.disabled = 'true'; }\n\n // API URL where the form will be posted\n $scope.actionUrl = `/api/plans/${$transition$.params().id}`;\n\n // HTTP method for the rest API\n $scope.method = 'PATCH';\n\n $scope.selectedGroup = function () {\n const group = $scope.groups.filter(g => g.id === $scope.plan.group_id);\n return $scope.translateLabel(group[0], 'name');\n };\n\n /**\n * If a parent plan was set ($scope.plan.parent), the prices will be copied from this parent plan into\n * the current plan prices list. Otherwise, the current plan prices will be erased.\n */\n $scope.copyPricesFromPlan = function () {\n if ($scope.plan.parent) {\n return Plan.get({ id: $scope.plan.parent }, function (parentPlan) {\n Array.from(parentPlan.prices).map(function (parentPrice) {\n return (function () {\n const result = [];\n for (const childKey in $scope.plan.prices) {\n const childPrice = $scope.plan.prices[childKey];\n if ((childPrice.priceable_type === parentPrice.priceable_type) && (childPrice.priceable_id === parentPrice.priceable_id)) {\n $scope.plan.prices[childKey].amount = parentPrice.amount;\n break;\n } else {\n result.push(undefined);\n }\n }\n return result;\n })();\n });\n }\n );\n\n // if no plan were selected, unset every prices\n } else {\n return (function () {\n const result = [];\n for (const key in $scope.plan.prices) {\n const price = $scope.plan.prices[key];\n result.push($scope.plan.prices[key].amount = 0);\n }\n return result;\n })();\n }\n };\n\n /**\n * Display some messages once the form was submitted, depending on the result status (failed/succeeded)\n * @param content {Object}\n */\n $scope.afterSubmit = function (content) {\n if ((content.id == null) && (content.plan_ids == null)) {\n return growl.error(_t('app.admin.plans.edit.unable_to_save_subscription_changes_please_try_again'));\n } else {\n growl.success(_t('app.admin.plans.edit.subscription_successfully_changed'));\n return $state.go('app.admin.pricing');\n }\n };\n\n /**\n * Generate a string identifying the given plan by literal humain-readable name\n * @param plan {Object} Plan object, as recovered from GET /api/plan/:id\n * @param groups {Array} List of Groups objects, as recovered from GET /api/groups\n * @param short {boolean} If true, the generated name will contains the group slug, otherwise the group full name\n * will be included.\n * @returns {String}\n */\n $scope.humanReadablePlanName = function (plan, groups, short) { return `${$filter('humanReadablePlanName')(plan, groups, short)}`; };\n\n /**\n * Retrieve the machine from its ID\n * @param machine_id {number} machine identifier\n * @returns {Object} Machine\n */\n $scope.getMachine = function (machine_id) {\n for (const machine of Array.from($scope.machines)) {\n if (machine.id === machine_id) {\n return machine;\n }\n }\n };\n\n /**\n * Retrieve the space from its ID\n * @param space_id {number} space identifier\n * @returns {Object} Space\n */\n $scope.getSpace = function (space_id) {\n for (const space of Array.from($scope.spaces)) {\n if (space.id === space_id) {\n return space;\n }\n }\n };\n\n // Using the PlansController\n return new PlanController($scope, groups, prices, partners, CSRF, _t);\n }\n]);\n\n/**\n * Controller used the plan-categories administration page.\n * This is just a wrapper to integrate the React component in the angular app\n */\nApplication.Controllers.controller('PlanCategoriesController', ['$scope', 'growl',\n function ($scope, growl) {\n /* PUBLIC SCOPE */\n $scope.onSuccess = function (message) {\n growl.success(message);\n };\n\n $scope.onError = function (message) {\n growl.error(message);\n };\n }\n]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\n/**\n * Controller used in price category creation/edition form dialog\n */\nApplication.Controllers.controller('PriceCategoryController', ['$scope', '$uibModalInstance', 'category',\n function ($scope, $uibModalInstance, category) {\n // Price category to edit/empty object for new category\n $scope.category = category;\n\n /**\n * Callback for form validation\n */\n $scope.ok = () => $uibModalInstance.close($scope.category);\n\n /**\n * Do not validate the modifications, hide the modal\n */\n return $scope.cancel = () => $uibModalInstance.dismiss('cancel');\n }\n]);\n","/* eslint-disable\n handle-callback-err,\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS205: Consider reworking code to avoid use of IIFEs\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\n/**\n * Controller used in the prices edition page\n */\nApplication.Controllers.controller('EditPricingController', ['$scope', '$state', '$uibModal', '$filter', 'TrainingsPricing', 'Credit', 'Pricing', 'Plan', 'Coupon', 'plans', 'groups', 'growl', 'Price', 'dialogs', 'trainingsPricingsPromise', 'trainingsPromise', 'machineCreditsPromise', 'machinesPromise', 'trainingCreditsPromise', 'couponsPromise', 'spacesPromise', 'spacesPricesPromise', 'spacesCreditsPromise', 'settingsPromise', '_t', 'Member', 'uiTourService', 'planCategories',\n function ($scope, $state, $uibModal, $filter, TrainingsPricing, Credit, Pricing, Plan, Coupon, plans, groups, growl, Price, dialogs, trainingsPricingsPromise, trainingsPromise, machineCreditsPromise, machinesPromise, trainingCreditsPromise, couponsPromise, spacesPromise, spacesPricesPromise, spacesCreditsPromise, settingsPromise, _t, Member, uiTourService, planCategories) {\n /* PUBLIC SCOPE */\n\n // List of trainings pricing\n $scope.trainingsPricings = trainingsPricingsPromise;\n\n // List of available subscriptions plans (eg. student/month, PME/year ...)\n $scope.plans = plans;\n $scope.enabledPlans = plans.filter(function (p) { return !p.disabled; });\n\n // List of groups (eg. normal, student ...)\n $scope.groups = groups;\n $scope.enabledGroups = groups.filter(function (g) { return !g.disabled; });\n\n // List of all plan-categories\n $scope.planCategories = planCategories;\n\n // Associate free machine hours with subscriptions\n $scope.machineCredits = machineCreditsPromise;\n\n // Array of associations (plan <-> training)\n $scope.trainingCredits = trainingCreditsPromise;\n\n // Associate a plan with all its trainings ids\n $scope.trainingCreditsGroups = {};\n\n // List of trainings\n $scope.trainings = trainingsPromise.filter(function (t) { return !t.disabled; });\n\n // List of machines\n $scope.machines = machinesPromise;\n $scope.enabledMachines = machinesPromise.filter(function (m) { return !m.disabled; });\n\n // List of coupons\n $scope.coupons = couponsPromise;\n $scope.couponsPage = 1;\n\n // List of spaces\n $scope.spaces = spacesPromise;\n $scope.enabledSpaces = spacesPromise.filter(function (s) { return !s.disabled; });\n\n // Associate free space hours with subscriptions\n $scope.spaceCredits = spacesCreditsPromise;\n\n // List of spaces prices (not considering any plan)\n $scope.spacesPrices = spacesPricesPromise;\n\n // The plans list ordering. Default: by group\n $scope.orderPlans = 'group_id';\n\n // Status of the drop-down menu in Credits tab\n $scope.status =\n { isopen: false };\n\n // Default: we show only enabled plans\n $scope.planFiltering = 'enabled';\n\n // Default duration for the slots\n $scope.slotDuration = parseInt(settingsPromise.slot_duration, 10);\n\n // Available options for filtering plans by status\n $scope.filterDisabled = [\n 'enabled',\n 'disabled',\n 'all'\n ];\n\n // Default: we do not filter coupons\n $scope.filter = {\n coupon: 'all'\n };\n\n // Available status for filtering coupons\n $scope.couponStatus = [\n 'all',\n 'disabled',\n 'expired',\n 'sold_out',\n 'active'\n ];\n\n // default tab: plans list\n $scope.tabs = { active: 0 };\n\n /**\n * Retrieve a training price from all the trainings prices\n * @param trainingsPricings {Array} all trainings prices\n * @param trainingId {number}\n * @param groupId {number}\n * @returns {float}\n */\n $scope.findTrainingsPricing = function (trainingsPricings, trainingId, groupId) {\n for (const trainingsPricing of Array.from(trainingsPricings)) {\n if ((trainingsPricing.training_id === trainingId) && (trainingsPricing.group_id === groupId)) {\n return trainingsPricing;\n }\n }\n };\n\n /**\n * Update the price of a training for the given parameters\n * @param data {float} the new price\n * @param trainingsPricing {Object} the training pricing to update\n * @returns {Promise|string}\n */\n $scope.updateTrainingsPricing = function (data, trainingsPricing) {\n if (data != null) {\n return TrainingsPricing.update({ id: trainingsPricing.id }, { trainings_pricing: { amount: data } }).$promise;\n } else {\n return _t('app.admin.pricing.please_specify_a_number');\n }\n };\n\n /**\n * Retrieve a plan from its given identifier and returns it\n * @param id {number} plan ID\n * @returns {Object} Plan, inherits from $resource\n */\n $scope.getPlanFromId = function (id) {\n for (const plan of Array.from($scope.plans)) {\n if (plan.id === parseInt(id)) {\n return plan;\n }\n }\n };\n\n /**\n * Retrieve a group from its given identifier and returns it\n * @param id {number} group ID\n * @returns {Object} Group, inherits from $resource\n */\n $scope.getGroupFromId = function (groups, id) {\n for (const group of Array.from(groups)) {\n if (group.id === parseInt(id)) {\n return group;\n }\n }\n };\n\n /**\n * Returns a human readable string of named trainings, according to the provided array.\n * $scope.trainings may contains the full list of training. The returned string will only contains the trainings\n * whom ID are given in the provided parameter\n * @param trainings {Array} trainings IDs array\n */\n $scope.showTrainings = function (trainings) {\n if (!angular.isArray(trainings) || !(trainings.length > 0)) {\n return _t('app.admin.pricing.none');\n }\n\n const selected = [];\n angular.forEach($scope.trainings, function (t) {\n if (trainings.indexOf(t.id) >= 0) {\n return selected.push(t.name);\n }\n });\n if (selected.length) { return selected.join(' | '); } else { return _t('app.admin.pricing.none'); }\n };\n\n /**\n * Validation callback when editing training's credits. Save the changes.\n * @param newdata {Object} training and associated plans\n * @param planId {number|string} plan id\n */\n $scope.saveTrainingCredits = function (newdata, planId) {\n // save the number of credits\n Plan.update(\n { id: planId },\n { training_credit_nb: newdata.training_credits }\n , angular.noop() // do nothing in case of success\n , function (error) {\n growl.error(_t('app.admin.pricing.an_error_occurred_while_saving_the_number_of_credits'));\n console.error(error);\n }\n );\n\n // save the associated trainings\n return angular.forEach($scope.trainingCreditsGroups, function (original, key) {\n if (parseInt(key) === parseInt(planId)) { // we've got the original data\n if (original.join('_') !== newdata.training_ids.join('_')) { // if any changes\n // iterate through the previous credits to remove\n angular.forEach(original, function (oldTrainingId) {\n if (newdata.training_ids.indexOf(oldTrainingId) === -1) {\n const tc = findTrainingCredit(oldTrainingId, planId);\n if (tc) {\n return tc.$delete({}\n , function () {\n $scope.trainingCredits.splice($scope.trainingCredits.indexOf(tc), 1);\n return $scope.trainingCreditsGroups[planId].splice($scope.trainingCreditsGroups[planId].indexOf(tc.id), 1);\n }\n , function (error) {\n growl.error(_t('app.admin.pricing.an_error_occurred_while_deleting_credit_with_the_TRAINING', { TRAINING: tc.creditable.name }));\n console.error(error);\n });\n } else {\n return growl.error(_t('app.admin.pricing.an_error_occurred_unable_to_find_the_credit_to_revoke'));\n }\n }\n });\n\n // iterate through the new credits to add\n return angular.forEach(newdata.training_ids, function (newTrainingId) {\n if (original.indexOf(newTrainingId) === -1) {\n return Credit.save({\n credit: {\n creditable_id: newTrainingId,\n creditable_type: 'Training',\n plan_id: planId\n }\n }\n , function (newTc) { // success\n $scope.trainingCredits.push(newTc);\n return $scope.trainingCreditsGroups[newTc.plan_id].push(newTc.creditable_id);\n }\n , function (error) { // failed\n const training = getTrainingFromId(newTrainingId);\n growl.error(_t('app.admin.pricing.an_error_occurred_while_creating_credit_with_the_TRAINING', { TRAINING: training.name }));\n return console.error(error);\n });\n }\n });\n }\n }\n });\n };\n\n /**\n * Cancel the current training credit modification\n * @param rowform {Object} see http://vitalets.github.io/angular-xeditable/\n */\n $scope.cancelTrainingCredit = function (rowform) { rowform.$cancel(); };\n\n /**\n * Create a new empty entry in the $scope.machineCredits array\n * @param e {Object} see https://docs.angularjs.org/guide/expression#-event-\n */\n $scope.addMachineCredit = function (e) {\n e.preventDefault();\n e.stopPropagation();\n $scope.inserted =\n { creditable_type: 'Machine' };\n $scope.machineCredits.push($scope.inserted);\n return $scope.status.isopen = !$scope.status.isopen;\n };\n\n /**\n * In the Credits tab, return the name of the machine/space associated with the given credit\n * @param credit {Object} credit object, inherited from $resource\n * @returns {String}\n */\n $scope.showCreditableName = function (credit) {\n let selected = _t('app.admin.pricing.not_set');\n if (credit && credit.creditable_id) {\n const object = $scope.getCreditable(credit);\n selected = object.name;\n if (credit.creditable_type === 'Machine') {\n selected += ` ( id. ${object.id} )`;\n }\n }\n return selected;\n };\n\n /**\n * In the Credits tab, return the machine/space associated with the given credit\n * @param credit {Object} credit object, inherited from $resource\n * @returns {Object}\n */\n $scope.getCreditable = function (credit) {\n let selected;\n if (credit && credit.creditable_id) {\n if (credit.creditable_type === 'Machine') {\n angular.forEach($scope.machines, function (m) {\n if (m.id === credit.creditable_id) {\n return selected = m;\n }\n });\n } else if (credit.creditable_type === 'Space') {\n angular.forEach($scope.spaces, function (s) {\n if (s.id === credit.creditable_id) {\n return selected = s;\n }\n });\n }\n }\n return selected;\n };\n\n /**\n * Validation callback when editing machine's credits. Save the changes.\n * This will prevent the creation of two credits associating the same machine and plan.\n * @param data {Object} machine, associated plan and number of credit hours.\n * @param [id] {number} credit id for edition, create a new credit object if not provided\n */\n $scope.saveMachineCredit = function (data, id) {\n for (const mc of Array.from($scope.machineCredits)) {\n if ((mc.plan_id === data.plan_id) && (mc.creditable_id === data.creditable_id) && ((id === null) || (mc.id !== id))) {\n growl.error(_t('app.admin.pricing.error_a_credit_linking_this_machine_with_that_subscription_already_exists'));\n if (!id) {\n $scope.machineCredits.pop();\n }\n return false;\n }\n }\n\n if (id != null) {\n return Credit.update({ id }, { credit: data }, function () { growl.success(_t('app.admin.pricing.changes_have_been_successfully_saved')); });\n } else {\n data.creditable_type = 'Machine';\n return Credit.save(\n { credit: data }\n , function (resp) {\n $scope.machineCredits[$scope.machineCredits.length - 1].id = resp.id;\n return growl.success(_t('app.admin.pricing.credit_was_successfully_saved'));\n }\n , function (err) {\n $scope.machineCredits.pop();\n growl.error(_t('app.admin.pricing.error_creating_credit'));\n console.error(err);\n });\n }\n };\n\n /**\n * Removes the newly inserted but not saved machine credit / Cancel the current machine credit modification\n * @param rowform {Object} see http://vitalets.github.io/angular-xeditable/\n * @param index {number} credit index in the $scope.machineCredits array\n */\n $scope.cancelMachineCredit = function (rowform, index) {\n if ($scope.machineCredits[index].id != null) {\n return rowform.$cancel();\n } else {\n return $scope.machineCredits.splice(index, 1);\n }\n };\n\n /**\n * Deletes the machine credit at the specified index\n * @param index {number} machine credit index in the $scope.machineCredits array\n */\n $scope.removeMachineCredit = function (index) {\n Credit.delete($scope.machineCredits[index]);\n $scope.machineCredits.splice(index, 1);\n };\n\n /**\n * Create a new empty entry in the $scope.spaceCredits array\n * @param e {Object} see https://docs.angularjs.org/guide/expression#-event-\n */\n $scope.addSpaceCredit = function (e) {\n e.preventDefault();\n e.stopPropagation();\n $scope.inserted =\n { creditable_type: 'Space' };\n $scope.spaceCredits.push($scope.inserted);\n $scope.status.isopen = !$scope.status.isopen;\n };\n\n /**\n * Validation callback when editing space's credits. Save the changes.\n * This will prevent the creation of two credits associated with the same space and plan.\n * @param data {Object} space, associated plan and number of credit hours.\n * @param [id] {number} credit id for edition, create a new credit object if not provided\n */\n $scope.saveSpaceCredit = function (data, id) {\n for (const sc of Array.from($scope.spaceCredits)) {\n if ((sc.plan_id === data.plan_id) && (sc.creditable_id === data.creditable_id) && ((id === null) || (sc.id !== id))) {\n growl.error(_t('app.admin.pricing.error_a_credit_linking_this_space_with_that_subscription_already_exists'));\n if (!id) {\n $scope.spaceCredits.pop();\n }\n return false;\n }\n }\n\n if (id != null) {\n return Credit.update({ id }, { credit: data }, function () { growl.success(_t('app.admin.pricing.changes_have_been_successfully_saved')); });\n } else {\n data.creditable_type = 'Space';\n return Credit.save(\n { credit: data }\n , function (resp) {\n $scope.spaceCredits[$scope.spaceCredits.length - 1].id = resp.id;\n return growl.success(_t('app.admin.pricing.credit_was_successfully_saved'));\n }\n , function () {\n $scope.spaceCredits.pop();\n return growl.error(_t('app.admin.pricing.error_creating_credit'));\n });\n }\n };\n\n /**\n * Removes the newly inserted but not saved space credit / Cancel the current space credit modification\n * @param rowform {Object} see http://vitalets.github.io/angular-xeditable/\n * @param index {number} credit index in the $scope.spaceCredits array\n */\n $scope.cancelSpaceCredit = function (rowform, index) {\n if ($scope.spaceCredits[index].id != null) {\n return rowform.$cancel();\n } else {\n return $scope.spaceCredits.splice(index, 1);\n }\n };\n\n /**\n * Deletes the space credit at the specified index\n * @param index {number} space credit index in the $scope.spaceCredits array\n */\n $scope.removeSpaceCredit = function (index) {\n Credit.delete($scope.spaceCredits[index]);\n return $scope.spaceCredits.splice(index, 1);\n };\n\n /**\n * Return the name of the plan-category, from its ID\n * @param id {number|undefined} plan-category's id\n * @returns {string} the name\n */\n $scope.getPlanCategory = function (id) {\n const cat = $scope.planCategories.find(c => c.id === id);\n if (cat) {\n return cat.name;\n }\n };\n\n /**\n * Change the plans ordering criterion to the one provided\n * @param orderBy {string} ordering criterion\n */\n $scope.setOrderPlans = function (orderBy) {\n if ($scope.orderPlans === orderBy) {\n return $scope.orderPlans = `-${orderBy}`;\n } else {\n return $scope.orderPlans = orderBy;\n }\n };\n\n /**\n * Retrieve a price from prices array by a machineId and a groupId\n */\n $scope.findPriceBy = function (prices, machineId, groupId) {\n for (const price of Array.from(prices)) {\n if ((price.priceable_id === machineId) && (price.group_id === groupId) && (price.duration === 60)) {\n return price;\n }\n }\n };\n\n /**\n * update a price for a machine and a group, not considering any plan\n */\n $scope.updatePrice = function (data, price) {\n if (data != null) {\n return Price.update({ id: price.id }, { price: { amount: data } }).$promise;\n } else {\n return _t('app.admin.pricing.please_specify_a_number');\n }\n };\n\n /**\n * Delete the specified subcription plan\n * @param id {number} plan id\n */\n $scope.deletePlan = function (plans, id) {\n if (typeof id !== 'number') {\n return console.error('[EditPricingController::deletePlan] Error: invalid id parameter');\n } else {\n // open a confirmation dialog\n return dialogs.confirm(\n {\n resolve: {\n object () {\n return {\n title: _t('app.admin.pricing.confirmation_required'),\n msg: _t('app.admin.pricing.do_you_really_want_to_delete_this_subscription_plan')\n };\n }\n }\n },\n function () {\n // the admin has confirmed, delete the plan\n Plan.delete(\n { id },\n function (res) {\n growl.success(_t('app.admin.pricing.subscription_plan_was_successfully_deleted'));\n return $scope.plans.splice(findItemIdxById(plans, id), 1);\n },\n function (error) {\n if (error.statusText) { console.error(`[EditPricingController::deletePlan] Error: ${error.statusText}`); }\n growl.error(_t('app.admin.pricing.unable_to_delete_the_specified_subscription_an_error_occurred'));\n }\n );\n }\n );\n }\n };\n\n /**\n * Generate a string identifying the given plan by literal humain-readable name\n * @param plan {Object} Plan object, as recovered from GET /api/plan/:id\n * @param groups {Array} List of Groups objects, as recovered from GET /api/groups\n * @param short {boolean} If true, the generated name will contains the group slug, otherwise the group full name\n * will be included.\n * @returns {String}\n */\n $scope.humanReadablePlanName = function (plan, groups, short) { return `${$filter('humanReadablePlanName')(plan, groups, short)}`; };\n\n /**\n * Delete a coupon from the server's database and, in case of success, from the list in memory\n * @param coupons {Array} should be called with $scope.coupons\n * @param id {number} ID of the coupon to delete\n */\n $scope.deleteCoupon = function (coupons, id) {\n if (typeof id !== 'number') {\n return console.error('[EditPricingController::deleteCoupon] Error: invalid id parameter');\n } else {\n // open a confirmation dialog\n return dialogs.confirm({\n resolve: {\n object () {\n return {\n title: _t('app.admin.pricing.confirmation_required'),\n msg: _t('app.admin.pricing.do_you_really_want_to_delete_this_coupon')\n };\n }\n }\n }\n , function () {\n // the admin has confirmed, delete the coupon\n Coupon.delete({ id }, function (res) {\n growl.success(_t('app.admin.pricing.coupon_was_successfully_deleted'));\n return $scope.coupons.splice(findItemIdxById(coupons, id), 1);\n }\n\n , function (error) {\n if (error.statusText) { console.error(`[EditPricingController::deleteCoupon] Error: ${error.statusText}`); }\n if (error.status === 422) {\n return growl.error(_t('app.admin.pricing.unable_to_delete_the_specified_coupon_already_in_use'));\n } else {\n return growl.error(_t('app.admin.pricing.unable_to_delete_the_specified_coupon_an_unexpected_error_occurred'));\n }\n });\n });\n }\n };\n\n /**\n * Open a modal allowing to select an user and send him the details of the provided coupon\n * @param coupon {Object} The coupon to send\n */\n $scope.sendCouponToUser = function (coupon) {\n $uibModal.open({\n templateUrl: '/admin/pricing/sendCoupon.html',\n resolve: {\n coupon () { return coupon; },\n enableUserValidationRequired () { return settingsPromise.user_validation_required === 'true'; }\n },\n size: 'md',\n controller: ['$scope', '$uibModalInstance', 'Coupon', 'coupon', '_t', 'enableUserValidationRequired', function ($scope, $uibModalInstance, Coupon, coupon, _t, enableUserValidationRequired) {\n // Global config: is the user validation required ?\n $scope.enableUserValidationRequired = enableUserValidationRequired;\n\n // Member, receiver of the coupon\n $scope.ctrl =\n { member: null };\n\n // Details of the coupon to send\n $scope.coupon = coupon;\n\n // Callback to validate sending of the coupon\n $scope.ok = function () {\n Coupon.send({ coupon_code: coupon.code, user_id: $scope.ctrl.member.id }, function (res) {\n growl.success(_t('app.admin.pricing.coupon_successfully_sent_to_USER', { USER: $scope.ctrl.member.name }));\n return $uibModalInstance.close({ user_id: $scope.ctrl.member.id });\n }\n , function (err) {\n growl.error(_t('app.admin.pricing.an_error_occurred_unable_to_send_the_coupon'));\n console.error(err);\n });\n };\n // Callback to close the modal and cancel the sending process\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n }]\n });\n };\n\n /**\n * Load the next 10 coupons\n */\n $scope.loadMore = function () {\n $scope.couponsPage++;\n Coupon.query({ page: $scope.couponsPage, filter: $scope.filter.coupon }, function (data) {\n $scope.coupons = $scope.coupons.concat(data);\n });\n };\n\n /**\n * Reset the list of coupons according to the newly selected filter\n */\n $scope.updateCouponFilter = function () {\n $scope.couponsPage = 1;\n Coupon.query({ page: $scope.couponsPage, filter: $scope.filter.coupon }, function (data) {\n $scope.coupons = data;\n });\n };\n\n /**\n * Return the exemple price based on the configuration of the default slot duration.\n * @param type {string} 'hourly_rate' | *\n * @returns {number} price for \"SLOT_DURATION\" minutes.\n */\n $scope.examplePrice = function (type) {\n const hourlyRate = 10;\n\n if (type === 'hourly_rate') {\n return $filter('currency')(hourlyRate);\n }\n\n const price = (hourlyRate / 60) * $scope.slotDuration;\n return $filter('currency')(price);\n };\n\n /**\n * Callback triggered by react components\n */\n $scope.onSuccess = function (message) {\n growl.success(message);\n };\n\n /**\n * Callback triggered by react components\n */\n $scope.onError = function (message) {\n growl.error(message);\n };\n\n /**\n * Setup the feature-tour for the admin/pricing page.\n * This is intended as a contextual help (when pressing F1)\n */\n $scope.setupPricingTour = function () {\n // get the tour defined by the ui-tour directive\n const uitour = uiTourService.getTourByName('pricing');\n uitour.createStep({\n selector: 'body',\n stepId: 'welcome',\n order: 0,\n title: _t('app.admin.tour.pricing.welcome.title'),\n content: _t('app.admin.tour.pricing.welcome.content'),\n placement: 'bottom',\n orphan: true\n });\n uitour.createStep({\n selector: '.plans-pricing .new-plan-button',\n stepId: 'new_plan',\n order: 1,\n title: _t('app.admin.tour.pricing.new_plan.title'),\n content: _t('app.admin.tour.pricing.new_plan.content'),\n placement: 'bottom'\n });\n if ($scope.$root.modules.trainings) {\n uitour.createStep({\n selector: '.plans-pricing .trainings-tab',\n stepId: 'trainings',\n order: 2,\n title: _t('app.admin.tour.pricing.trainings.title'),\n content: _t('app.admin.tour.pricing.trainings.content'),\n placement: 'bottom'\n });\n }\n if ($scope.$root.modules.machines) {\n uitour.createStep({\n selector: '.plans-pricing .machines-tab',\n stepId: 'machines',\n order: 3,\n title: _t('app.admin.tour.pricing.machines.title'),\n content: _t('app.admin.tour.pricing.machines.content'),\n placement: 'bottom'\n });\n }\n if ($scope.$root.modules.spaces) {\n uitour.createStep({\n selector: '.plans-pricing .spaces-tab',\n stepId: 'spaces',\n order: 4,\n title: _t('app.admin.tour.pricing.spaces.title'),\n content: _t('app.admin.tour.pricing.spaces.content'),\n placement: 'bottom'\n });\n }\n uitour.createStep({\n selector: '.plans-pricing .credits-tab',\n stepId: 'credits',\n order: 5,\n title: _t('app.admin.tour.pricing.credits.title'),\n content: _t('app.admin.tour.pricing.credits.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.plans-pricing .coupons-tab',\n stepId: 'coupons',\n order: 6,\n title: _t('app.admin.tour.pricing.coupons.title'),\n content: _t('app.admin.tour.pricing.coupons.content'),\n placement: 'bottom',\n popupClass: 'shift-left-50'\n });\n uitour.createStep({\n selector: 'body',\n stepId: 'conclusion',\n order: 7,\n title: _t('app.admin.tour.conclusion.title'),\n content: _t('app.admin.tour.conclusion.content'),\n placement: 'bottom',\n orphan: true\n });\n // on step change, change the active tab if needed\n uitour.on('stepChanged', function (nextStep) {\n if (nextStep.stepId === 'new_plan') { $scope.tabs.active = 0; }\n if (nextStep.stepId === 'trainings') { $scope.tabs.active = 1; }\n if (nextStep.stepId === 'machines') { $scope.tabs.active = 2; }\n if (nextStep.stepId === 'spaces') { $scope.tabs.active = 3; }\n if (nextStep.stepId === 'credits') { $scope.tabs.active = 4; }\n if (nextStep.stepId === 'coupons') { $scope.tabs.active = 5; }\n });\n // on tour end, save the status in database\n uitour.on('ended', function () {\n if (uitour.getStatus() === uitour.Status.ON && $scope.currentUser.profile_attributes.tours.indexOf('pricing') < 0) {\n Member.completeTour({ id: $scope.currentUser.id }, { tour: 'pricing' }, function (res) {\n $scope.currentUser.profile_attributes.tours = res.tours;\n });\n }\n });\n // if the user has never seen the tour, show him now\n if (settingsPromise.feature_tour_display !== 'manual' && $scope.currentUser.profile_attributes.tours.indexOf('pricing') < 0) {\n uitour.start();\n }\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n $scope.trainingCreditsGroups = groupCreditsByPlan($scope.trainingCredits);\n\n // adds empty array for plan which hasn't any credits yet\n return (function () {\n const result = [];\n for (const plan of Array.from($scope.plans)) {\n if ($scope.trainingCreditsGroups[plan.id] == null) {\n result.push($scope.trainingCreditsGroups[plan.id] = []);\n } else {\n result.push(undefined);\n }\n }\n return result;\n })();\n };\n\n /**\n * Retrieve an item index by its ID from the given array of objects\n * @param items {Array<{id:number}>}\n * @param id {number}\n * @returns {number} item index in the provided array\n */\n const findItemIdxById = function (items, id) {\n return (items.map(function (item) { return item.id; })).indexOf(id);\n };\n\n /**\n * Group the given credits array into a map associating the plan ID with its associated trainings/machines\n * @return {Object} the association map\n */\n const groupCreditsByPlan = function (credits) {\n const creditsMap = {};\n angular.forEach(credits, function (c) {\n if (!creditsMap[c.plan_id]) {\n creditsMap[c.plan_id] = [];\n }\n return creditsMap[c.plan_id].push(c.creditable_id);\n });\n return creditsMap;\n };\n\n /**\n * Iterate through $scope.traininfCredits to find the credit matching the given criterion\n * @param trainingId {number|string} training ID\n * @param planId {number|string} plan ID\n */\n const findTrainingCredit = function (trainingId, planId) {\n trainingId = parseInt(trainingId);\n planId = parseInt(planId);\n\n for (const credit of Array.from($scope.trainingCredits)) {\n if ((credit.plan_id === planId) && (credit.creditable_id === trainingId)) {\n return credit;\n }\n }\n };\n\n /**\n * Retrieve a training from its given identifier and returns it\n * @param id {number} training ID\n * @returns {Object} Training inherited from $resource\n */\n const getTrainingFromId = function (id) {\n for (const training of Array.from($scope.trainings)) {\n if (training.id === parseInt(id)) {\n return training;\n }\n }\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\nApplication.Controllers.controller('AdminProjectsController', ['$scope', '$state', 'Component', 'Licence', 'Theme', 'componentsPromise', 'licencesPromise', 'themesPromise', '_t', 'Member', 'uiTourService', 'settingsPromise', 'growl',\n function ($scope, $state, Component, Licence, Theme, componentsPromise, licencesPromise, themesPromise, _t, Member, uiTourService, settingsPromise, growl) {\n // Materials list (plastic, wood ...)\n $scope.components = componentsPromise;\n\n // Licences list (Creative Common ...)\n $scope.licences = licencesPromise;\n\n // Themes list (cooking, sport ...)\n $scope.themes = themesPromise;\n\n // Application settings\n $scope.allSettings = settingsPromise;\n\n // default tab: materials\n $scope.tabs = { active: 0 };\n\n /**\n * Saves a new component / Update an existing material to the server (form validation callback)\n * @param data {Object} component name\n * @param [id] {number} component id, in case of update\n */\n $scope.saveComponent = function (data, id) {\n if (id != null) {\n return Component.update({ id }, data);\n } else {\n return Component.save(data, resp => $scope.components[$scope.components.length - 1].id = resp.id);\n }\n };\n\n /**\n * Deletes the component at the specified index\n * @param index {number} component index in the $scope.components array\n */\n $scope.removeComponent = function (index) {\n Component.delete($scope.components[index]);\n return $scope.components.splice(index, 1);\n };\n\n /**\n * Creates a new empty entry in the $scope.components array\n */\n $scope.addComponent = function () {\n $scope.inserted = { name: '' };\n $scope.components.push($scope.inserted);\n };\n\n /**\n * Removes the newly inserted but not saved component / Cancel the current component modification\n * @param rowform {Object} see http://vitalets.github.io/angular-xeditable/\n * @param index {number} component index in the $scope.components array\n */\n $scope.cancelComponent = function (rowform, index) {\n if ($scope.components[index].id != null) {\n return rowform.$cancel();\n } else {\n return $scope.components.splice(index, 1);\n }\n };\n\n /**\n * Saves a new theme / Update an existing theme to the server (form validation callback)\n * @param data {Object} theme name\n * @param [data] {number} theme id, in case of update\n */\n $scope.saveTheme = function (data, id) {\n if (id != null) {\n return Theme.update({ id }, data);\n } else {\n return Theme.save(data, resp => $scope.themes[$scope.themes.length - 1].id = resp.id);\n }\n };\n\n /**\n * Deletes the theme at the specified index\n * @param index {number} theme index in the $scope.themes array\n */\n $scope.removeTheme = function (index) {\n Theme.delete($scope.themes[index]);\n return $scope.themes.splice(index, 1);\n };\n\n /**\n * Creates a new empty entry in the $scope.themes array\n */\n $scope.addTheme = function () {\n $scope.inserted = { name: '' };\n $scope.themes.push($scope.inserted);\n };\n\n /**\n * Removes the newly inserted but not saved theme / Cancel the current theme modification\n * @param rowform {Object} see http://vitalets.github.io/angular-xeditable/\n * @param index {number} theme index in the $scope.themes array\n */\n $scope.cancelTheme = function (rowform, index) {\n if ($scope.themes[index].id != null) {\n rowform.$cancel();\n } else {\n $scope.themes.splice(index, 1);\n }\n };\n\n /**\n * Saves a new licence / Update an existing licence to the server (form validation callback)\n * @param data {Object} licence name and description\n * @param [id] {number} licence id, in case of update\n */\n $scope.saveLicence = function (data, id) {\n if (id != null) {\n return Licence.update({ id }, data);\n } else {\n return Licence.save(data, resp => $scope.licences[$scope.licences.length - 1].id = resp.id);\n }\n };\n\n /**\n * Deletes the licence at the specified index\n * @param index {number} licence index in the $scope.licences array\n */\n $scope.removeLicence = function (index) {\n Licence.delete($scope.licences[index]);\n return $scope.licences.splice(index, 1);\n };\n\n /**\n * Creates a new empty entry in the $scope.licences array\n */\n $scope.addLicence = function () {\n $scope.inserted = {\n name: '',\n description: ''\n };\n return $scope.licences.push($scope.inserted);\n };\n\n /**\n * Removes the newly inserted but not saved licence / Cancel the current licence modification\n * @param rowform {Object} see http://vitalets.github.io/angular-xeditable/\n * @param index {number} licence index in the $scope.licences array\n */\n $scope.cancelLicence = function (rowform, index) {\n if ($scope.licences[index].id != null) {\n return rowform.$cancel();\n } else {\n return $scope.licences.splice(index, 1);\n }\n };\n\n /**\n * When a file is sent to the server to test it against its MIME type,\n * handle the result of the test.\n */\n $scope.onTestFileComplete = function (res) {\n if (res) {\n growl.success(_t('app.admin.projects.settings.file_is_TYPE', { TYPE: res.type }));\n }\n };\n\n /**\n * For use with 'ng-class', returns the CSS class name for the uploads previews.\n * The preview may show a placeholder or the content of the file depending on the upload state.\n * @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules)\n */\n $scope.fileinputClass = function (v) {\n if (v) {\n return 'fileinput-exists';\n } else {\n return 'fileinput-new';\n }\n };\n\n /**\n * Remove the initial dot from the given extension, if any\n * @param extension {String}\n * @returns {String}\n */\n $scope.removeInitialDot = function (extension) {\n if (extension.substr(0, 1) === '.') return $scope.lower(extension.substr(1));\n\n return $scope.lower(extension);\n };\n\n /**\n * Return the lowercase version of the provided string\n * @param text {String}\n * @returns {string}\n */\n $scope.lower = function (text) {\n return text.toLowerCase();\n };\n\n /**\n * Setup the feature-tour for the admin/projects page.\n * This is intended as a contextual help (when pressing F1)\n */\n $scope.setupProjectElementsTour = function () {\n // get the tour defined by the ui-tour directive\n const uitour = uiTourService.getTourByName('projects');\n uitour.createStep({\n selector: 'body',\n stepId: 'welcome',\n order: 0,\n title: _t('app.admin.tour.projects.welcome.title'),\n content: _t('app.admin.tour.projects.welcome.content'),\n placement: 'bottom',\n orphan: true\n });\n uitour.createStep({\n selector: '.heading .abuses-button',\n stepId: 'abuses',\n order: 1,\n title: _t('app.admin.tour.projects.abuses.title'),\n content: _t('app.admin.tour.projects.abuses.content'),\n placement: 'bottom',\n popupClass: 'shift-left-40'\n });\n uitour.createStep({\n selector: '.projects .settings-tab',\n stepId: 'settings',\n order: 2,\n title: _t('app.admin.tour.projects.settings.title'),\n content: _t('app.admin.tour.projects.settings.content'),\n placement: 'bottom',\n popupClass: 'shift-left-50'\n });\n uitour.createStep({\n selector: 'body',\n stepId: 'conclusion',\n order: 3,\n title: _t('app.admin.tour.conclusion.title'),\n content: _t('app.admin.tour.conclusion.content'),\n placement: 'bottom',\n orphan: true\n });\n // on step change, change the active tab if needed\n uitour.on('stepChanged', function (nextStep) {\n if (nextStep.stepId === 'settings') { $scope.tabs.active = 3; }\n });\n // on tour end, save the status in database\n uitour.on('ended', function () {\n if (uitour.getStatus() === uitour.Status.ON && $scope.currentUser.profile_attributes.tours.indexOf('projects') < 0) {\n Member.completeTour({ id: $scope.currentUser.id }, { tour: 'projects' }, function (res) {\n $scope.currentUser.profile_attributes.tours = res.tours;\n });\n }\n });\n // if the user has never seen the tour, show him now\n if (settingsPromise.feature_tour_display !== 'manual' && $scope.currentUser.profile_attributes.tours.indexOf('projects') < 0) {\n uitour.start();\n }\n };\n\n /**\n * Shows a success message forwarded from a child react component\n */\n $scope.onSuccess = function (message) {\n growl.success(message);\n };\n\n /**\n * Callback triggered by react components\n */\n $scope.onError = function (message) {\n growl.error(message);\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {};\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\nApplication.Controllers.controller('SettingsController', ['$scope', '$rootScope', '$filter', '$uibModal', 'dialogs', 'Setting', 'growl', 'settingsPromise', 'privacyDraftsPromise', 'cgvFile', 'cguFile', 'logoFile', 'logoBlackFile', 'faviconFile', 'profileImageFile', 'CSRF', '_t', 'Member', 'uiTourService',\n function ($scope, $rootScope, $filter, $uibModal, dialogs, Setting, growl, settingsPromise, privacyDraftsPromise, cgvFile, cguFile, logoFile, logoBlackFile, faviconFile, profileImageFile, CSRF, _t, Member, uiTourService) {\n /* PUBLIC SCOPE */\n\n // timepickers steps configuration\n $scope.timepicker = {\n hstep: 1,\n mstep: 15\n };\n\n // API URL where the upload forms will be posted\n $scope.actionUrl = {\n cgu: '/api/custom_assets',\n cgv: '/api/custom_assets',\n logo: '/api/custom_assets',\n logoBlack: '/api/custom_assets',\n favicon: '/api/custom_assets',\n profileImage: '/api/custom_assets'\n };\n\n // Form actions on the above URL\n $scope.methods = {\n cgu: 'post',\n cgv: 'post',\n logo: 'post',\n logoBlack: 'post',\n favicon: 'post',\n profileImage: 'post'\n };\n\n // Are we uploading the files currently (if so, display the loader)\n $scope.loader = {\n cgu: false,\n cgv: false\n };\n\n // default tab: general\n $scope.tabs = { active: 0 };\n\n // full history of privacy policy drafts\n $scope.privacyDraftsHistory = [];\n\n // all settings as retrieved from database\n $scope.allSettings = settingsPromise;\n\n // various configurable settings\n $scope.aboutTitleSetting = { name: 'about_title', value: settingsPromise.about_title };\n $scope.aboutBodySetting = { name: 'about_body', value: settingsPromise.about_body };\n $scope.privacyDpoSetting = { name: 'privacy_dpo', value: settingsPromise.privacy_dpo };\n $scope.aboutContactsSetting = { name: 'about_contacts', value: settingsPromise.about_contacts };\n $scope.homeBlogpostSetting = { name: 'home_blogpost', value: settingsPromise.home_blogpost };\n $scope.homeContent = { name: 'home_content', value: settingsPromise.home_content };\n $scope.homeCss = { name: 'home_css', value: settingsPromise.home_css };\n $scope.machineExplicationsAlert = { name: 'machine_explications_alert', value: settingsPromise.machine_explications_alert };\n $scope.trainingExplicationsAlert = { name: 'training_explications_alert', value: settingsPromise.training_explications_alert };\n $scope.trainingInformationMessage = { name: 'training_information_message', value: settingsPromise.training_information_message };\n $scope.subscriptionExplicationsAlert = { name: 'subscription_explications_alert', value: settingsPromise.subscription_explications_alert };\n $scope.eventExplicationsAlert = { name: 'event_explications_alert', value: settingsPromise.event_explications_alert };\n $scope.spaceExplicationsAlert = { name: 'space_explications_alert', value: settingsPromise.space_explications_alert };\n $scope.windowStart = { name: 'booking_window_start', value: settingsPromise.booking_window_start };\n $scope.windowEnd = { name: 'booking_window_end', value: settingsPromise.booking_window_end };\n $scope.mainColorSetting = { name: 'main_color', value: settingsPromise.main_color };\n $scope.secondColorSetting = { name: 'secondary_color', value: settingsPromise.secondary_color };\n $scope.nameGenre = { name: 'name_genre', value: settingsPromise.name_genre };\n $scope.cguFile = cguFile.custom_asset;\n $scope.cgvFile = cgvFile.custom_asset;\n $scope.customLogo = logoFile.custom_asset;\n $scope.customLogoBlack = logoBlackFile.custom_asset;\n $scope.customFavicon = faviconFile.custom_asset;\n $scope.profileImage = profileImageFile.custom_asset;\n\n // By default, we display the currently published privacy policy\n $scope.privacyPolicy = {\n version: null,\n bodyTemp: settingsPromise.privacy_body\n };\n\n // Extend the options for summernote editor, with special tools for home page\n $scope.summernoteOptsHomePage = angular.copy($rootScope.summernoteOpts);\n $scope.summernoteOptsHomePage.toolbar[5][1].push('nugget'); // toolbar -> insert -> nugget\n $scope.summernoteOptsHomePage.nugget = {\n label: '\\uF12E',\n tooltip: _t('app.admin.settings.home_items'),\n list: [\n `
    ${_t('app.admin.settings.item_news')}
    `,\n `
    ${_t('app.admin.settings.item_projects')}
    `,\n `
    ${_t('app.admin.settings.item_twitter')}
    `,\n `
    ${_t('app.admin.settings.item_members')}
    `,\n `
    ${_t('app.admin.settings.item_events')}
    `\n ]\n };\n $scope.summernoteOptsHomePage.height = 400;\n\n // codemirror editor\n $scope.codeMirrorEditor = null;\n\n // Options for codemirror editor, used for custom css\n $scope.codemirrorOpts = {\n matchBrackets: true,\n lineNumbers: true,\n mode: 'sass'\n };\n\n // Show or hide advanced settings\n $scope.advancedSettings = {\n open: false\n };\n\n /**\n * For use with 'ng-class', returns the CSS class name for the uploads previews.\n * The preview may show a placeholder or the content of the file depending on the upload state.\n * @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules)\n */\n $scope.fileinputClass = function (v) {\n if (v) {\n return 'fileinput-exists';\n } else {\n return 'fileinput-new';\n }\n };\n\n /**\n * Callback to save the setting value to the database\n * @param setting {{value:*, name:string}} note that the value will be stringified\n */\n $scope.save = function (setting) {\n // trim empty html\n let value;\n if ((setting.value === '
    ') || (setting.value === '


    ')) {\n setting.value = '';\n }\n // convert dates to ISO format\n if (setting.value instanceof Date) {\n setting.value = setting.value.toISOString();\n }\n\n if (setting.value !== null) {\n value = setting.value.toString();\n } else {\n ({ value } = setting);\n }\n\n Setting.update(\n { name: setting.name },\n { value },\n function () { growl.success(_t('app.admin.settings.customization_of_SETTING_successfully_saved', { SETTING: _t(`app.admin.settings.${setting.name}`) })); },\n function (error) {\n if (error.status === 304) return;\n\n growl.error(_t('app.admin.settings.an_error_occurred_saving_the_setting'));\n console.log(error);\n }\n );\n };\n\n /**\n * The privacy policy has its own special save function because updating the policy must notify all users\n */\n $scope.savePrivacyPolicy = function () {\n // open modal\n const modalInstance = $uibModal.open({\n templateUrl: '/admin/settings/save_policy.html',\n controller: 'SavePolicyController',\n resolve: {\n saveCb () { return $scope.save; },\n privacyPolicy () { return $scope.privacyPolicy; }\n }\n });\n\n // once done, update the client data\n modalInstance.result.then(function (type) {\n Setting.get({ name: 'privacy_draft', history: true }, function (data) {\n // reset history\n $scope.privacyDraftsHistory = [];\n data.setting.history.forEach(function (draft) {\n $scope.privacyDraftsHistory.push({ id: draft.id, name: _t('app.admin.settings.privacy.draft_from_USER_DATE', { USER: draft.user.name, DATE: draft.created_at }), content: draft.value });\n });\n if (type === 'privacy_draft') {\n const orderedHistory = $filter('orderBy')(data.setting.history, 'created_at');\n const last = orderedHistory[orderedHistory.length - 1];\n if (last) {\n $scope.privacyPolicy.version = last.id;\n }\n } else {\n $scope.privacyPolicy.version = null;\n }\n });\n });\n };\n\n /**\n * For use with ngUpload (https://github.com/twilson63/ngUpload).\n * Intended to be the callback when the upload is done: Any raised error will be displayed in a growl\n * message. If everything goes fine, a growl success message is shown.\n * @param content {Object} JSON - The upload's result\n */\n $scope.submited = function (content) {\n if ((content.custom_asset == null)) {\n $scope.alerts = [];\n return angular.forEach(content, function (v) {\n angular.forEach(v, function (err) { growl.error(err); });\n });\n } else {\n growl.success(_t('app.admin.settings.file_successfully_updated'));\n if (content.custom_asset.name === 'cgu-file') {\n $scope.cguFile = content.custom_asset;\n $scope.methods.cgu = 'put';\n if (!($scope.actionUrl.cgu.indexOf('/cgu-file') > 0)) { $scope.actionUrl.cgu += '/cgu-file'; }\n return $scope.loader.cgu = false;\n } else if (content.custom_asset.name === 'cgv-file') {\n $scope.cgvFile = content.custom_asset;\n $scope.methods.cgv = 'put';\n if (!($scope.actionUrl.cgv.indexOf('/cgv-file') > 0)) { $scope.actionUrl.cgv += '/cgv-file'; }\n return $scope.loader.cgv = false;\n } else if (content.custom_asset.name === 'logo-file') {\n $scope.customLogo = content.custom_asset;\n $scope.methods.logo = 'put';\n if (!($scope.actionUrl.logo.indexOf('/logo-file') > 0)) { return $scope.actionUrl.logo += '/logo-file'; }\n } else if (content.custom_asset.name === 'logo-black-file') {\n $scope.customLogoBlack = content.custom_asset;\n $scope.methods.logoBlack = 'put';\n if (!($scope.actionUrl.logoBlack.indexOf('/logo-black-file') > 0)) { return $scope.actionUrl.logoBlack += '/logo-black-file'; }\n } else if (content.custom_asset.name === 'favicon-file') {\n $scope.customFavicon = content.custom_asset;\n $scope.methods.favicon = 'put';\n if (!($scope.actionUrl.favicon.indexOf('/favicon-file') > 0)) { return $scope.actionUrl.favicon += '/favicon-file'; }\n } else if (content.custom_asset.name === 'profile-image-file') {\n $scope.profileImage = content.custom_asset;\n $scope.methods.profileImage = 'put';\n if (!($scope.actionUrl.profileImage.indexOf('/profile-image-file') > 0)) { return $scope.actionUrl.profileImage += '/profile-image-file'; }\n }\n }\n };\n\n /**\n * @param target {String} 'cgu' | 'cgv'\n */\n $scope.addLoader = function (target) {\n $scope.loader[target] = true;\n };\n\n /**\n * Change the revision of the displayed privacy policy, from drafts history\n */\n $scope.handlePolicyRevisionChange = function () {\n if ($scope.privacyPolicy.version === null) {\n $scope.privacyPolicy.bodyTemp = settingsPromise.privacy_body;\n return;\n }\n for (const draft of $scope.privacyDraftsHistory) {\n if (draft.id === $scope.privacyPolicy.version) {\n $scope.privacyPolicy.bodyTemp = draft.content;\n break;\n }\n }\n };\n\n /**\n * Open a modal showing a sample of the collected data if FabAnalytics is enabled\n */\n $scope.analyticsModal = function () {\n $uibModal.open({\n templateUrl: '/admin/settings/analyticsModal.html',\n controller: 'AnalyticsModalController',\n size: 'lg',\n resolve: {\n analyticsData: ['FabAnalytics', function (FabAnalytics) { return FabAnalytics.data().$promise; }]\n }\n });\n };\n\n /**\n * Reset the home page to its initial state (factory value)\n */\n $scope.resetHomePage = function () {\n dialogs.confirm({\n resolve: {\n object () {\n return {\n title: _t('app.admin.settings.confirmation_required'),\n msg: _t('app.admin.settings.confirm_reset_home_page')\n };\n }\n }\n }\n , function () { // confirmed\n Setting.reset({ name: 'home_content' }, function (data) {\n $scope.homeContent.value = data.value;\n growl.success(_t('app.admin.settings.home_content_reset'));\n });\n }\n );\n };\n\n /**\n * Callback triggered when the codemirror editor is loaded into the DOM\n * @param editor codemirror instance\n */\n $scope.codemirrorLoaded = function (editor) {\n $scope.codeMirrorEditor = editor;\n };\n\n /**\n * Shows a success message forwarded from a child react component\n */\n $scope.onSuccess = function (message) {\n growl.success(message);\n };\n\n /**\n * Callback triggered by react components\n */\n $scope.onError = function (message) {\n growl.error(message);\n };\n\n /**\n * Options for allow/prevent book overlapping slots: which kind of slots are used in the overlapping computation\n */\n $scope.availableOverlappingOptions = [\n ['training_reservations', _t('app.admin.settings.overlapping_options.training_reservations')],\n ['machine_reservations', _t('app.admin.settings.overlapping_options.machine_reservations')],\n ['space_reservations', _t('app.admin.settings.overlapping_options.space_reservations')],\n ['events_reservations', _t('app.admin.settings.overlapping_options.events_reservations')]\n ];\n\n /**\n * Setup the feature-tour for the admin/settings page.\n * This is intended as a contextual help (when pressing F1)\n */\n $scope.setupSettingsTour = function () {\n // get the tour defined by the ui-tour directive\n const uitour = uiTourService.getTourByName('settings');\n uitour.createStep({\n selector: 'body',\n stepId: 'welcome',\n order: 0,\n title: _t('app.admin.tour.settings.welcome.title'),\n content: _t('app.admin.tour.settings.welcome.content'),\n placement: 'bottom',\n orphan: true\n });\n uitour.createStep({\n selector: '.admin-settings .general-page-tab',\n stepId: 'general',\n order: 1,\n title: _t('app.admin.tour.settings.general.title'),\n content: _t('app.admin.tour.settings.general.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.admin-settings .home-page-content h4',\n stepId: 'home',\n order: 2,\n title: _t('app.admin.tour.settings.home.title'),\n content: _t('app.admin.tour.settings.home.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.admin-settings .home-page-content .note-toolbar .note-insert div',\n stepId: 'components',\n order: 3,\n title: _t('app.admin.tour.settings.components.title'),\n content: _t('app.admin.tour.settings.components.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.admin-settings .home-page-content .note-toolbar .btn-codeview',\n stepId: 'codeview',\n order: 4,\n title: _t('app.admin.tour.settings.codeview.title'),\n content: _t('app.admin.tour.settings.codeview.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.admin-settings .reset-button',\n stepId: 'reset',\n order: 5,\n title: _t('app.admin.tour.settings.reset.title'),\n content: _t('app.admin.tour.settings.reset.content'),\n placement: 'left'\n });\n uitour.createStep({\n selector: '.admin-settings .home-page-style',\n stepId: 'css',\n order: 6,\n title: _t('app.admin.tour.settings.css.title'),\n content: _t('app.admin.tour.settings.css.content'),\n placement: 'top'\n });\n uitour.createStep({\n selector: '.admin-settings .about-page-tab',\n stepId: 'about',\n order: 7,\n title: _t('app.admin.tour.settings.about.title'),\n content: _t('app.admin.tour.settings.about.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.admin-settings .privacy-page-tab',\n stepId: 'privacy',\n order: 8,\n title: _t('app.admin.tour.settings.privacy.title'),\n content: _t('app.admin.tour.settings.privacy.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.admin-settings .history-select',\n stepId: 'draft',\n order: 9,\n title: _t('app.admin.tour.settings.draft.title'),\n content: _t('app.admin.tour.settings.draft.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.admin-settings .reservations-page-tab',\n stepId: 'reservations',\n order: 10,\n title: _t('app.admin.tour.settings.reservations.title'),\n content: _t('app.admin.tour.settings.reservations.content'),\n placement: 'bottom',\n popupClass: 'shift-left-50'\n });\n uitour.createStep({\n selector: 'body',\n stepId: 'conclusion',\n order: 11,\n title: _t('app.admin.tour.conclusion.title'),\n content: _t('app.admin.tour.conclusion.content'),\n placement: 'bottom',\n orphan: true\n });\n // on step change, change the active tab if needed\n uitour.on('stepChanged', function (nextStep) {\n if (nextStep.stepId === 'general') { $scope.tabs.active = 0; }\n if (nextStep.stepId === 'home' || nextStep.stepId === 'css') { $scope.tabs.active = 1; }\n if (nextStep.stepId === 'about') { $scope.tabs.active = 2; }\n if (nextStep.stepId === 'privacy' || nextStep.stepId === 'draft') { $scope.tabs.active = 3; }\n if (nextStep.stepId === 'reservations') { $scope.tabs.active = 4; }\n });\n // on tour end, save the status in database\n uitour.on('ended', function () {\n if (uitour.getStatus() === uitour.Status.ON && $scope.currentUser.profile_attributes.tours.indexOf('settings') < 0) {\n Member.completeTour({ id: $scope.currentUser.id }, { tour: 'settings' }, function (res) {\n $scope.currentUser.profile_attributes.tours = res.tours;\n });\n }\n });\n // if the user has never seen the tour, show him now\n if ($scope.allSettings.feature_tour_display !== 'manual' && $scope.currentUser.profile_attributes.tours.indexOf('settings') < 0) {\n uitour.start();\n }\n };\n\n $scope.onSuccess = function (message) {\n growl.success(message);\n };\n\n $scope.onError = function (message) {\n growl.error(message);\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n // set the authenticity tokens in the forms\n CSRF.setMetaTags();\n\n // we prevent the admin from setting the closing time before the opening time\n $scope.$watch('windowEnd.value', function (newValue, oldValue, scope) {\n if ($scope.windowStart && moment($scope.windowStart.value).isAfter(newValue)) {\n return $scope.windowEnd.value = oldValue;\n }\n });\n\n // change form methods to PUT if items already exists\n if (cguFile.custom_asset) {\n $scope.methods.cgu = 'put';\n $scope.actionUrl.cgu += '/cgu-file';\n }\n if (cgvFile.custom_asset) {\n $scope.methods.cgv = 'put';\n $scope.actionUrl.cgv += '/cgv-file';\n }\n if (logoFile.custom_asset) {\n $scope.methods.logo = 'put';\n $scope.actionUrl.logo += '/logo-file';\n }\n if (logoBlackFile.custom_asset) {\n $scope.methods.logoBlack = 'put';\n $scope.actionUrl.logoBlack += '/logo-black-file';\n }\n if (faviconFile.custom_asset) {\n $scope.methods.favicon = 'put';\n $scope.actionUrl.favicon += '/favicon-file';\n }\n if (profileImageFile.custom_asset) {\n $scope.methods.profileImage = 'put';\n $scope.actionUrl.profileImage += '/profile-image-file';\n }\n\n privacyDraftsPromise.setting.history.forEach(function (draft) {\n $scope.privacyDraftsHistory.push({ id: draft.id, name: _t('app.admin.settings.privacy.draft_from_USER_DATE', { USER: draft.user.name, DATE: moment(draft.created_at).format('L LT') }), content: draft.value });\n });\n\n // refresh codemirror to display the fetched setting\n $scope.$watch('advancedSettings.open', function (newValue) {\n if (newValue) $scope.codeMirrorEditor.refresh();\n });\n\n // use the tours list, based on the selected value\n $scope.$watch('allSettings.feature_tour_display', function (newValue, oldValue, scope) {\n if (newValue === oldValue) return;\n\n if (newValue === 'session') {\n $scope.currentUser.profile_attributes.tours = Fablab.sessionTours;\n } else if (newValue === 'once') {\n Member.get({ id: $scope.currentUser.id }, function (user) {\n $scope.currentUser.profile_attributes.tours = user.profile_attributes.tours;\n });\n }\n });\n };\n\n // init the controller (call at the end !)\n return initialize();\n }\n\n]);\n\n/**\n * Controller used in the invoice refunding modal window\n */\nApplication.Controllers.controller('SavePolicyController', ['$scope', '$uibModalInstance', '_t', 'growl', 'saveCb', 'privacyPolicy',\n function ($scope, $uibModalInstance, _t, growl, saveCb, privacyPolicy) {\n /* PUBLIC SCOPE */\n\n /**\n * Save as draft the current text\n */\n $scope.save = function () {\n saveCb({ name: 'privacy_draft', value: privacyPolicy.bodyTemp });\n $uibModalInstance.close('privacy_draft');\n };\n\n /**\n * Publish the current text as the new privacy policy\n */\n $scope.publish = function () {\n saveCb({ name: 'privacy_body', value: privacyPolicy.bodyTemp });\n growl.info(_t('app.admin.settings.privacy.users_notified'));\n $uibModalInstance.close('privacy_body');\n };\n /**\n * Cancel the saving, dismiss the modal window\n */\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n }\n]);\n\n/**\n * Controller used in the \"what do we collect?\" modal, about FabAnalytics\n */\nApplication.Controllers.controller('AnalyticsModalController', ['$scope', '$uibModalInstance', 'analyticsData',\n function ($scope, $uibModalInstance, analyticsData) {\n // analytics data sample\n $scope.data = analyticsData;\n\n // callback to close the modal\n $scope.close = function () {\n $uibModalInstance.dismiss();\n };\n }\n]);\n","/* eslint-disable\n no-constant-condition,\n no-return-assign,\n no-undef,\n n/no-callback-literal,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS205: Consider reworking code to avoid use of IIFEs\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\nApplication.Controllers.controller('StatisticsController', ['$scope', '$state', '$transitions', '$rootScope', '$uibModal', 'es', 'Member', '_t', 'membersPromise', 'statisticsPromise', 'uiTourService', 'settingsPromise',\n function ($scope, $state, $transitions, $rootScope, $uibModal, es, Member, _t, membersPromise, statisticsPromise, uiTourService, settingsPromise) {\n /* PRIVATE STATIC CONSTANTS */\n\n // search window size\n const RESULTS_PER_PAGE = 20;\n\n // keep search context for (delay in minutes) ...\n const ES_SCROLL_TIME = 1;\n\n /* PUBLIC SCOPE */\n\n // ui-view transitions optimization: if true, the stats will never be refreshed\n $scope.preventRefresh = false;\n\n // statistics structure in elasticSearch\n $scope.statistics = statisticsPromise;\n\n // fablab users list\n $scope.members = membersPromise;\n\n // statistics data recovered from elasticSearch\n $scope.data = null;\n\n // when did the search was triggered\n $scope.searchDate = null;\n\n // id of the elastic search context\n $scope.scrollId = null;\n\n // total number of results for the current query\n $scope.totalHits = null;\n\n // configuration of the widget allowing to pick the ages range\n $scope.agePicker = {\n show: false,\n start: null,\n end: null\n };\n\n // total CA for the current view\n $scope.sumCA = 0;\n\n // average users' age for the current view\n $scope.averageAge = 0;\n\n // total of the stat field for non simple types\n $scope.sumStat = 0;\n\n // Results of custom aggregations for the current type\n $scope.customAggs = {};\n\n // default: results are not sorted\n $scope.sorting = {\n ca: 'none',\n date: 'desc'\n };\n\n // active tab will be set here\n $scope.selectedIndex = null;\n\n // ui-bootstrap active tab index\n $scope.selectedTab = 0;\n\n // type filter binding\n $scope.type = {\n selected: null,\n active: null\n };\n\n // selected custom filter\n $scope.customFilter = {\n show: false,\n criterion: {},\n value: null,\n exclude: false,\n datePicker: {\n format: Fablab.uibDateFormat,\n opened: false, // default: datePicker is not shown\n minDate: null,\n maxDate: moment().toDate(),\n options: {\n startingDay: Fablab.weekStartingDay\n }\n }\n };\n\n // available custom filters\n $scope.filters = [];\n\n // default: we do not open the datepicker menu\n $scope.datePicker =\n { show: false };\n\n // datePicker parameters for interval beginning\n $scope.datePickerStart = {\n format: Fablab.uibDateFormat,\n opened: false, // default: datePicker is not shown\n minDate: null,\n maxDate: moment().subtract(1, 'day').toDate(),\n selected: moment().utc().subtract(1, 'months').subtract(1, 'day').startOf('day').toDate(),\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n // datePicker parameters for interval ending\n $scope.datePickerEnd = {\n format: Fablab.uibDateFormat,\n opened: false, // default: datePicker is not shown\n minDate: null,\n maxDate: moment().subtract(1, 'day').toDate(),\n selected: moment().subtract(1, 'day').endOf('day').toDate(),\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n /**\n * Return a localized name for the given field\n */\n $scope.customFieldName = function (field) {\n return _t(`app.admin.statistics.${field}`);\n };\n\n /**\n * Callback to open the datepicker (interval start)\n * @param $event {Object} jQuery event object\n */\n $scope.toggleStartDatePicker = function ($event) { toggleDatePicker($event, $scope.datePickerStart); };\n\n /**\n * Callback to open the datepicker (interval end)\n * @param $event {Object} jQuery event object\n */\n $scope.toggleEndDatePicker = function ($event) { toggleDatePicker($event, $scope.datePickerEnd); };\n\n /**\n * Callback to open the datepicker (custom filter)\n * @param $event {Object} jQuery event object\n */\n $scope.toggleCustomDatePicker = function ($event) { toggleDatePicker($event, $scope.customFilter.datePicker); };\n\n /**\n * Callback called when the active tab is changed.\n * recover the current tab and store its value in $scope.selectedIndex\n * @param tab {Object} elasticsearch statistic structure (from statistic_indices table)\n * @param index {number} index of the tab in the $scope.statistics array\n */\n $scope.setActiveTab = function (tab, index) {\n $scope.selectedIndex = tab;\n $scope.selectedTab = index;\n $scope.type.selected = tab.types[0];\n $scope.type.active = $scope.type.selected;\n $scope.customFilter.criterion = {};\n $scope.customFilter.value = null;\n $scope.customFilter.exclude = false;\n $scope.sorting.ca = 'none';\n $scope.sorting.date = 'desc';\n buildCustomFiltersList();\n return refreshStats();\n };\n\n /**\n * Returns true if the provided tab must be hidden due to some global or local configuration\n * @param tab {Object} elasticsearch statistic structure (from statistic_indices table)\n */\n $scope.hiddenTab = function (tab) {\n if (tab.table) {\n return ((tab.es_type_key === 'subscription' && !$rootScope.modules.plans) ||\n (tab.es_type_key === 'training' && !$rootScope.modules.trainings) ||\n (tab.es_type_key === 'space' && !$rootScope.modules.spaces) ||\n (tab.es_type_key === 'machine' && !$rootScope.modules.machines) ||\n (tab.es_type_key === 'order' && !$rootScope.modules.store)\n );\n } else {\n return true;\n }\n };\n\n /**\n * Callback to validate the filters and send a new request to elastic\n */\n $scope.validateFilterChange = function () {\n $scope.agePicker.show = false;\n $scope.customFilter.show = false;\n $scope.type.active = $scope.type.selected;\n buildCustomFiltersList();\n return refreshStats();\n };\n\n /**\n * Callback to validate the dates range and refresh the data from elastic\n */\n $scope.validateDateChange = function () {\n $scope.datePicker.show = false;\n return refreshStats();\n };\n\n /**\n * Parse the given date and return a user-friendly string\n * @param date {Date} JS date or ant moment.js compatible date string\n */\n $scope.formatDate = function (date) { return moment(date).format('LL'); };\n\n /**\n * Parse the sex and return a user-friendly string\n * @param sex {string} 'male' | 'female'\n */\n $scope.formatSex = function (sex) {\n if (sex === 'male') {\n return _t('app.admin.statistics.man');\n }\n if (sex === 'female') {\n return _t('app.admin.statistics.woman');\n }\n };\n\n /**\n * Retrieve the label for the given subtype in the current type\n * @param key {string} statistic subtype key\n */\n $scope.formatSubtype = function (key) {\n let label = '';\n angular.forEach($scope.type.active.subtypes, function (subtype) {\n if (subtype.key === key) {\n return label = subtype.label;\n }\n });\n return label;\n };\n\n /**\n * Helper usable in ng-switch to determine the input type to display for custom filter value\n * @param filter {Object} custom filter criterion\n */\n $scope.getCustomValueInputType = function (filter) {\n if (filter && filter.values) {\n if (typeof (filter.values[0]) === 'string') {\n return filter.values[0];\n } else if (typeof (filter.values[0] === 'object')) {\n return 'input_select';\n }\n } else {\n return 'input_text';\n }\n };\n\n /**\n * Change the sorting order and refresh the results to match the new order\n * @param filter {Object} any filter\n */\n $scope.toggleSorting = function (filter) {\n switch ($scope.sorting[filter]) {\n case 'none': $scope.sorting[filter] = 'asc'; break;\n case 'asc': $scope.sorting[filter] = 'desc'; break;\n case 'desc': $scope.sorting[filter] = 'none'; break;\n }\n return refreshStats();\n };\n\n /**\n * Return the user's name from his given ID\n * @param id {number} user ID\n */\n $scope.getUserNameFromId = function (id) {\n const name = $scope.members[id];\n return (name || `ID ${id}`);\n };\n\n /**\n * Run a scroll query to elasticsearch to append the next packet of results to those displayed.\n * If the ES search context has expired when the user ask for more results, we re-run the whole query.\n */\n $scope.showMoreResults = function () {\n // if all results were retrieved, do nothing\n if ($scope.data.length >= $scope.totalHits) {\n return;\n }\n\n if (moment($scope.searchDate).add(ES_SCROLL_TIME, 'minutes').isBefore(moment())) {\n // elastic search context has expired, so we run again the whole query\n return refreshStats();\n } else {\n return es.scroll({\n scroll: ES_SCROLL_TIME + 'm',\n body: { scrollId: $scope.scrollId }\n }\n , function (error, response) {\n if (error) {\n return console.error(`Error: something unexpected occurred during elasticSearch scroll query: ${error}`);\n } else {\n $scope.scrollId = response._scroll_id;\n return $scope.data = $scope.data.concat(response.hits.hits);\n }\n });\n }\n };\n\n /**\n * Open a modal dialog asking the user for details about exporting the statistics tables to an excel file\n */\n $scope.exportToExcel = function () {\n const options = {\n templateUrl: '/admin/statistics/export.html',\n size: 'sm',\n controller: 'ExportStatisticsController',\n resolve: {\n dates () {\n return {\n start: $scope.datePickerStart.selected,\n end: $scope.datePickerEnd.selected\n };\n },\n query () {\n const custom = buildCustomFilterQuery();\n return buildElasticDataQuery($scope.type.active.key, custom, $scope.agePicker.start, $scope.agePicker.end, moment($scope.datePickerStart.selected), moment($scope.datePickerEnd.selected), $scope.sorting);\n },\n index () {\n return { key: $scope.selectedIndex.es_type_key };\n },\n type () {\n return { key: $scope.type.active.key };\n }\n }\n };\n\n return $uibModal.open(options)\n .result.finally(null).then(function (info) { console.log(info); });\n };\n\n /**\n * Setup the feature-tour for the admin/statistics page.\n * This is intended as a contextual help (when pressing F1)\n */\n $scope.setupStatisticsTour = function () {\n // get the tour defined by the ui-tour directive\n const uitour = uiTourService.getTourByName('statistics');\n uitour.createStep({\n selector: 'body',\n stepId: 'welcome',\n order: 0,\n title: _t('app.admin.tour.statistics.welcome.title'),\n content: _t('app.admin.tour.statistics.welcome.content'),\n placement: 'bottom',\n orphan: true\n });\n uitour.createStep({\n selector: '.heading .export-button',\n stepId: 'export',\n order: 1,\n title: _t('app.admin.tour.statistics.export.title'),\n content: _t('app.admin.tour.statistics.export.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.heading .charts-button',\n stepId: 'trending',\n order: 2,\n title: _t('app.admin.tour.statistics.trending.title'),\n content: _t('app.admin.tour.statistics.trending.content'),\n placement: 'left'\n });\n uitour.createStep({\n selector: 'body',\n stepId: 'conclusion',\n order: 3,\n title: _t('app.admin.tour.conclusion.title'),\n content: _t('app.admin.tour.conclusion.content'),\n placement: 'bottom',\n orphan: true\n });\n // on tour end, save the status in database\n uitour.on('ended', function () {\n if (uitour.getStatus() === uitour.Status.ON && $scope.currentUser.profile_attributes.tours.indexOf('statistics') < 0) {\n Member.completeTour({ id: $scope.currentUser.id }, { tour: 'statistics' }, function (res) {\n $scope.currentUser.profile_attributes.tours = res.tours;\n });\n }\n });\n // if the user has never seen the tour, show him now\n if (settingsPromise.feature_tour_display !== 'manual' && $scope.currentUser.profile_attributes.tours.indexOf('statistics') < 0) {\n uitour.start();\n }\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n // workaround for angular-bootstrap::tabs behavior: on tab deletion, another tab will be selected\n // which will cause every tabs to reload, one by one, when the view is closed\n $transitions.onStart({ to: 'app.admin.statistics' }, function (trans) {\n if (Object.keys(trans.from().params).length === 0) {\n return $scope.preventRefresh = true;\n }\n });\n\n // set the default tab to \"machines\" if \"subscriptions\" are disabled\n if (!$rootScope.modules.plans) {\n const idx = $scope.statistics.findIndex(s => s.es_type_key === 'machine');\n $scope.setActiveTab($scope.statistics[idx], idx);\n } else {\n const idx = $scope.statistics.findIndex(s => s.es_type_key === 'subscription');\n $scope.setActiveTab($scope.statistics[idx], idx);\n }\n };\n\n /**\n * Generic function to toggle a bootstrap datePicker\n * @param $event {Object} jQuery event object\n * @param datePicker {Object} settings object of the concerned datepicker. Must have an 'opened' property\n */\n const toggleDatePicker = function ($event, datePicker) {\n $event.preventDefault();\n $event.stopPropagation();\n return datePicker.opened = !datePicker.opened;\n };\n\n /**\n * Force update the statistics table, querying elasticSearch according to the current config values\n */\n const refreshStats = function () {\n if ($scope.selectedIndex && !$scope.preventRefresh && $scope.type.active) {\n $scope.data = [];\n $scope.sumCA = 0;\n $scope.averageAge = 0;\n $scope.sumStat = 0;\n $scope.customAggs = {};\n $scope.totalHits = null;\n $scope.searchDate = new Date();\n let custom = buildCustomFilterQuery();\n return queryElasticStats($scope.selectedIndex.es_type_key, $scope.type.active.key, custom, function (res, err) {\n if (err) {\n return console.error(`[statisticsController::refreshStats] Unable to refresh due to ${err}`);\n } else {\n $scope.data = res.hits.hits;\n $scope.totalHits = res.hits.total;\n $scope.sumCA = res.aggregations.total_ca.value;\n $scope.averageAge = Math.round(res.aggregations.average_age.value * 100) / 100;\n $scope.sumStat = res.aggregations.total_stat.value;\n $scope.scrollId = res._scroll_id;\n return (function () {\n const result = [];\n for (custom of Array.from($scope.type.active.custom_aggregations)) {\n result.push($scope.customAggs[custom.field] = res.aggregations[custom.field].value);\n }\n return result;\n })();\n }\n });\n }\n };\n\n /**\n * Run the elasticSearch query to retrieve the /stats/type aggregations\n * @param index {String} elasticSearch document type (account|event|machine|project|subscription|training)\n * @param type {String} statistics type (month|year|booking|hour|user|project)\n * @param custom {{key:{string}, value:{string}}|null} custom filter property or null to disable this filter\n * @param callback {function} function be to run after results were retrieved, it will receive\n * two parameters : results {Object}, error {String} (if any)\n */\n const queryElasticStats = function (index, type, custom, callback) {\n // handle invalid callback\n if (typeof (callback) !== 'function') {\n console.error('[statisticsController::queryElasticStats] Error: invalid callback provided');\n return;\n }\n\n // run query\n return es.search({\n index: 'stats',\n type: index,\n size: RESULTS_PER_PAGE,\n scroll: ES_SCROLL_TIME + 'm',\n 'stat-type': type,\n 'custom-query': custom ? JSON.stringify(Object.assign({ exclude: custom.exclude }, buildElasticCustomCriterion(custom))) : '',\n 'start-date': moment($scope.datePickerStart.selected).format(),\n 'end-date': moment($scope.datePickerEnd.selected).format(),\n body: buildElasticDataQuery(type, custom, $scope.agePicker.start, $scope.agePicker.end, moment($scope.datePickerStart.selected), moment($scope.datePickerEnd.selected), $scope.sorting)\n }\n , function (error, response) {\n if (error) {\n return callback({}, `Error: something unexpected occurred during elasticSearch query: ${error}`);\n } else {\n return callback(response);\n }\n });\n };\n\n /**\n * Build an object representing the content of the REST-JSON query to elasticSearch,\n * based on the provided parameters for row data recovering.\n * @param type {String} statistics type (month|year|booking|hour|user|project)\n * @param custom {{key:{string}, value:{string}}|null} custom filter property or null to disable this filter\n * @param ageMin {Number|null} filter by age: range lower value OR null to do not filter\n * @param ageMax {Number|null} filter by age: range higher value OR null to do not filter\n * @param intervalBegin {moment} statitics interval beginning (moment.js type)\n * @param intervalEnd {moment} statitics interval ending (moment.js type)\n * @param sortings {Array|null} elasticSearch criteria for sorting the results\n */\n const buildElasticDataQuery = function (type, custom, ageMin, ageMax, intervalBegin, intervalEnd, sortings) {\n const q = {\n query: {\n bool: {\n must: [\n {\n term: { type }\n },\n {\n range: {\n date: {\n gte: intervalBegin.format(),\n lte: intervalEnd.format()\n }\n }\n }\n ]\n }\n }\n };\n // optional date range\n if ((typeof ageMin === 'number') && (typeof ageMax === 'number')) {\n q.query.bool.must.push({\n range: {\n age: {\n gte: ageMin,\n lte: ageMax\n }\n }\n });\n }\n // optional criterion\n if (custom) {\n const criterion = buildElasticCustomCriterion(custom);\n if (custom.exclude) {\n q.query.bool.must_not = [\n { term: criterion.match }\n ];\n } else {\n q.query.bool.must.push(criterion);\n }\n }\n\n if (sortings) {\n q.sort = buildElasticSortCriteria(sortings);\n }\n\n // aggregations (avg age & CA sum)\n q.aggs = {\n total_ca: {\n sum: {\n field: 'ca'\n }\n },\n average_age: {\n avg: {\n field: 'age'\n }\n },\n total_stat: {\n sum: {\n field: 'stat'\n }\n }\n };\n return q;\n };\n\n /**\n * Build the elasticSearch query DSL to match the selected cutom filter\n * @param custom {Object} if custom is empty or undefined, an empty string will be returned\n * @returns {{match:*}|string}\n */\n const buildElasticCustomCriterion = function (custom) {\n if (custom) {\n const criterion = {\n match: {}\n };\n switch ($scope.getCustomValueInputType($scope.customFilter.criterion)) {\n case 'input_date': criterion.match[custom.key] = moment(custom.value).format('YYYY-MM-DD'); break;\n case 'input_select': criterion.match[custom.key] = custom.value.key; break;\n case 'input_list': criterion.match[custom.key + '.name'] = custom.value; break;\n default: criterion.match[custom.key] = custom.value;\n }\n return criterion;\n } else {\n return '';\n }\n };\n\n /**\n * Parse the provided criteria array and return the corresponding elasticSearch syntax\n * @param criteria {Array} array of {key_to_sort:order}\n */\n const buildElasticSortCriteria = function (criteria) {\n const crits = [];\n angular.forEach(criteria, function (value, key) {\n if ((typeof value !== 'undefined') && (value !== null) && (value !== 'none')) {\n const c = {};\n c[key] = { order: value };\n return crits.push(c);\n }\n });\n return crits;\n };\n\n /**\n * Fulfill the list of available options in the custom filter panel. The list will be based on common\n * properties and on index-specific properties (additional_fields)\n */\n const buildCustomFiltersList = function () {\n $scope.filters = [\n { key: 'date', label: _t('app.admin.statistics.date'), values: ['input_date'] },\n { key: 'userId', label: _t('app.admin.statistics.user_id'), values: ['input_number'] },\n { key: 'gender', label: _t('app.admin.statistics.gender'), values: [{ key: 'male', label: _t('app.admin.statistics.man') }, { key: 'female', label: _t('app.admin.statistics.woman') }] },\n { key: 'age', label: _t('app.admin.statistics.age'), values: ['input_number'] },\n { key: 'ca', label: _t('app.admin.statistics.revenue'), values: ['input_number'] }\n ];\n\n // if no plans were created, there's no types for statisticIndex=subscriptions\n if ($scope.type.active) {\n $scope.filters.splice(4, 0, { key: 'subType', label: _t('app.admin.statistics.type'), values: $scope.type.active.subtypes });\n\n if (!$scope.type.active.simple) {\n const f = { key: 'stat', label: $scope.type.active.label, values: ['input_number'] };\n $scope.filters.push(f);\n }\n }\n\n return angular.forEach($scope.selectedIndex.additional_fields, function (field) {\n const filter = { key: field.key, label: field.label, values: [] };\n switch (field.data_type) {\n case 'index': filter.values.push('input_number'); break;\n case 'number': filter.values.push('input_number'); break;\n case 'date': filter.values.push('input_date'); break;\n case 'list': filter.values.push('input_list'); break;\n default: filter.values.push('input_text');\n }\n\n return $scope.filters.push(filter);\n });\n };\n\n /**\n * Build and return an object according to the custom filter set by the user, used to request elasticsearch\n * @return {Object|null}\n */\n const buildCustomFilterQuery = function () {\n let custom = null;\n if (!angular.isUndefinedOrNull($scope.customFilter.criterion) &&\n !angular.isUndefinedOrNull($scope.customFilter.criterion.key) &&\n !angular.isUndefinedOrNull($scope.customFilter.value)) {\n custom = {};\n custom.key = $scope.customFilter.criterion.key;\n custom.value = $scope.customFilter.value;\n custom.exclude = $scope.customFilter.exclude;\n }\n return custom;\n };\n\n // init the controller (call at the end !)\n return initialize();\n }\n\n]);\n\nApplication.Controllers.controller('ExportStatisticsController', ['$scope', '$uibModalInstance', 'Export', 'dates', 'query', 'index', 'type', 'CSRF', 'growl', '_t',\n function ($scope, $uibModalInstance, Export, dates, query, index, type, CSRF, growl, _t) {\n // Retrieve Anti-CSRF tokens from cookies\n CSRF.setMetaTags();\n\n // Bindings for date range\n $scope.dates = dates;\n\n // Body of the query to export\n $scope.query = JSON.stringify(query);\n\n // API URL where the form will be posted\n $scope.actionUrl = `/stats/${index.key}/export`;\n\n // Key of the current search' statistic type\n $scope.typeKey = type.key;\n\n // Form action on the above URL\n $scope.method = 'post';\n\n // Anti-CSRF token to inject into the download form\n $scope.csrfToken = angular.element('meta[name=\"csrf-token\"]')[0].content;\n\n // Binding of the export type (global / current)\n $scope.export =\n { type: 'current' };\n\n // datePicker parameters for interval beginning\n $scope.exportStart = {\n format: Fablab.uibDateFormat,\n opened: false, // default: datePicker is not shown\n minDate: null,\n maxDate: moment().subtract(1, 'day').toDate(),\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n // datePicker parameters for interval ending\n $scope.exportEnd = {\n format: Fablab.uibDateFormat,\n opened: false, // default: datePicker is not shown\n minDate: null,\n maxDate: moment().subtract(1, 'day').toDate(),\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n /**\n * Callback to open the datepicker (interval start)\n * @param $event {Object} jQuery event object\n */\n $scope.toggleStartDatePicker = function ($event) { $scope.exportStart.opened = !$scope.exportStart.opened; };\n\n /**\n * Callback to open the datepicker (interval end)\n * @param $event {Object} jQuery event object\n */\n $scope.toggleEndDatePicker = function ($event) { $scope.exportEnd.opened = !$scope.exportEnd.opened; };\n\n /**\n * Callback when exchanging the export type between 'global' and 'current view'\n * Adjust the query and the requesting url according to this type.\n */\n $scope.setRequest = function () {\n if ($scope.export.type === 'global') {\n $scope.actionUrl = '/stats/global/export';\n return $scope.query = JSON.stringify({\n query: {\n bool: {\n must: [\n {\n range: {\n date: {\n gte: moment($scope.dates.start).format(),\n lte: moment($scope.dates.end).format()\n }\n }\n }\n ]\n }\n }\n });\n } else {\n $scope.actionUrl = `/stats/${index.key}/export`;\n $scope.query = JSON.stringify(query);\n }\n };\n\n /**\n * Callback to close the modal, telling the caller what is exported\n */\n $scope.exportData = function () {\n const statusQry = { category: 'statistics', type: $scope.export.type, query: $scope.query };\n if ($scope.export.type !== 'global') {\n statusQry.type = index.key;\n statusQry.key = type.key;\n }\n\n Export.status(statusQry).then(function (res) {\n if (!res.data.exists) {\n return growl.success(_t('app.admin.statistics.export_is_running_you_ll_be_notified_when_its_ready'));\n }\n });\n\n return $uibModalInstance.close(statusQry);\n };\n\n /**\n * Callback to cancel the export and close the modal\n */\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n }\n]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n'use strict';\n\nApplication.Controllers.controller('AdminStoreController', ['$scope', 'CSRF', 'growl', '$state', '$uiRouter',\n function ($scope, CSRF, growl, $state, $uiRouter) {\n /* PRIVATE SCOPE */\n // Map of tab state and index\n const TABS = {\n 'app.admin.store.settings': 0,\n 'app.admin.store.products': 1,\n 'app.admin.store.categories': 2,\n 'app.admin.store.orders': 3\n };\n\n /* PUBLIC SCOPE */\n // default tab: products\n $scope.tabs = {\n active: TABS[$state.current.name]\n };\n\n // the following item is used by the Products component to save/restore filters in the URL\n $scope.uiRouter = $uiRouter;\n\n /**\n * Callback triggered in click tab\n */\n $scope.selectTab = () => {\n setTimeout(function () {\n const currentTab = _.keys(TABS)[$scope.tabs.active];\n if (currentTab !== $state.current.name) {\n $state.go(currentTab, { location: true, notify: false, reload: false });\n }\n });\n };\n\n /**\n * Callback triggered in case of error\n */\n $scope.onError = (message) => {\n growl.error(message);\n };\n\n /**\n * Callback triggered in case of success\n */\n $scope.onSuccess = (message) => {\n growl.success(message);\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n // set the authenticity tokens in the forms\n CSRF.setMetaTags();\n };\n\n // init the controller (call at the end !)\n return initialize();\n }\n\n]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n'use strict';\n\nApplication.Controllers.controller('AdminStoreProductController', ['$scope', 'CSRF', 'growl', '$state', '$transition$', '$uiRouter',\n function ($scope, CSRF, growl, $state, $transition$, $uiRouter) {\n /* PUBLIC SCOPE */\n $scope.productId = $transition$.params().id;\n\n // the following item is used by the UnsavedFormAlert component to detect a page change\n $scope.uiRouter = $uiRouter;\n\n /**\n * Callback triggered in case of error\n */\n $scope.onError = (message) => {\n growl.error(message);\n };\n\n /**\n * Callback triggered in case of success\n */\n $scope.onSuccess = (message) => {\n growl.success(message);\n };\n\n /**\n * Click Callback triggered in case of back products list\n */\n $scope.backProductsList = (event) => {\n event.preventDefault();\n event.stopPropagation();\n if ($state.prevState === '') {\n $state.prevState = 'app.admin.store.products';\n }\n window.history.back();\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n // set the authenticity tokens in the forms\n CSRF.setMetaTags();\n };\n\n // init the controller (call at the end !)\n return initialize();\n }\n\n]);\n","/* eslint-disable\n handle-callback-err,\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\nApplication.Controllers.controller('TagsController', ['$scope', 'tagsPromise', 'Tag', 'dialogs', 'growl', '_t', function ($scope, tagsPromise, Tag, dialogs, growl, _t) {\n // List of users's tags\n $scope.tags = tagsPromise;\n\n /**\n * Removes the newly inserted but not saved tag / Cancel the current tag modification\n * @param rowform {Object} see http://vitalets.github.io/angular-xeditable/\n * @param index {number} tag index in the $scope.tags array\n */\n $scope.cancelTag = function (rowform, index) {\n if ($scope.tags[index].id != null) {\n return rowform.$cancel();\n } else {\n return $scope.tags.splice(index, 1);\n }\n };\n\n /**\n * Creates a new empty entry in the $scope.tags array\n */\n $scope.addTag = function () {\n $scope.inserted =\n { name: '' };\n return $scope.tags.push($scope.inserted);\n };\n\n /**\n * Saves a new tag / Update an existing tag to the server (form validation callback)\n * @param data {Object} tag name\n * @param [data] {number} tag id, in case of update\n */\n $scope.saveTag = function (data, id) {\n if (id != null) {\n return Tag.update({ id }, { tag: data }, response => growl.success(_t('app.admin.members.tag_form.changes_successfully_saved'))\n , () => growl.error(_t('app.admin.members.tag_form.an_error_occurred_while_saving_changes')));\n } else {\n return Tag.save({ tag: data }, function (resp) {\n growl.success(_t('app.admin.members.tag_form.new_tag_successfully_saved'));\n return $scope.tags[$scope.tags.length - 1].id = resp.id;\n }\n , function () {\n growl.error(_t('app.admin.members.tag_form.an_error_occurred_while_saving_the_new_tag'));\n return $scope.tags.splice($scope.tags.length - 1, 1);\n });\n }\n };\n\n /**\n * Deletes the tag at the specified index\n * @param index {number} tag index in the $scope.tags array\n */\n $scope.removeTag = index =>\n dialogs.confirm({\n resolve: {\n object () {\n return {\n title: _t('app.admin.members.tag_form.confirmation_required'),\n msg: _t('app.admin.members.tag_form.confirm_delete_tag_html')\n };\n }\n }\n }\n , () => {\n Tag.delete({ id: $scope.tags[index].id }, function (resp) {\n growl.success(_t('app.admin.members.tag_form.tag_successfully_deleted'));\n return $scope.tags.splice(index, 1);\n }\n , () => growl.error(_t('app.admin.members.tag_form.an_error_occurred_and_the_tag_deletion_failed')));\n });\n}\n\n]);\n","/* eslint-disable\n handle-callback-err,\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\n/* COMMON CODE */\n\n/**\n * Provides a set of common callback methods to the $scope parameter. These methods are used\n * in the various trainings' admin controllers.\n *\n * Provides :\n * - $scope.submited(content)\n * - $scope.fileinputClass(v)\n * - $scope.onDisableToggled\n *\n * Requires :\n * - $state (Ui-Router) [ 'app.admin.trainings' ]\n * - $scope.training\n */\nclass TrainingsController {\n constructor ($scope, $state) {\n /*\n * For use with ngUpload (https://github.com/twilson63/ngUpload).\n * Intended to be the callback when the upload is done: any raised error will be stacked in the\n * $scope.alerts array. If everything goes fine, the user is redirected to the trainings list.\n * @param content {Object} JSON - The upload's result\n */\n $scope.submited = function (content) {\n if ((content.id == null)) {\n $scope.alerts = [];\n return angular.forEach(content, function (v, k) {\n angular.forEach(v, function (err) {\n $scope.alerts.push({\n msg: k + ': ' + err,\n type: 'danger'\n });\n });\n });\n } else {\n return $state.go('app.admin.trainings');\n }\n };\n\n /**\n * Changes the current user's view, redirecting him to the machines list\n */\n $scope.cancel = function () { $state.go('app.admin.trainings'); };\n\n /**\n * Force the 'public_page' attribute to false when the current training is disabled\n */\n $scope.onDisableToggled = function () { $scope.training.public_page = !$scope.training.disabled; };\n\n /**\n * For use with 'ng-class', returns the CSS class name for the uploads previews.\n * The preview may show a placeholder or the content of the file depending on the upload state.\n * @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules)\n */\n $scope.fileinputClass = function (v) {\n if (v) {\n return 'fileinput-exists';\n } else {\n return 'fileinput-new';\n }\n };\n }\n}\n\n/**\n * Controller used in the training creation page (admin)\n */\nApplication.Controllers.controller('NewTrainingController', ['$scope', '$state', 'machinesPromise', 'settingsPromise', 'CSRF',\n function ($scope, $state, machinesPromise, settingsPromise, CSRF) {\n /* PUBLIC SCOPE */\n\n // Form action on the following URL\n $scope.method = 'post';\n\n // API URL where the form will be posted\n $scope.actionUrl = '/api/trainings/';\n\n // list of machines\n $scope.machines = machinesPromise;\n\n $scope.enableMachinesModule = settingsPromise.machines_module === 'true';\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n CSRF.setMetaTags();\n\n // Using the TrainingsController\n return new TrainingsController($scope, $state);\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n\n/**\n * Controller used in the training edition page (admin)\n */\nApplication.Controllers.controller('EditTrainingController', ['$scope', '$state', '$transition$', 'trainingPromise', 'machinesPromise', 'settingsPromise', 'CSRF',\n function ($scope, $state, $transition$, trainingPromise, machinesPromise, settingsPromise, CSRF) {\n /* PUBLIC SCOPE */\n\n // Form action on the following URL\n $scope.method = 'patch';\n\n // API URL where the form will be posted\n $scope.actionUrl = `/api/trainings/${$transition$.params().id}`;\n\n // Details of the training to edit (id in URL)\n $scope.training = trainingPromise;\n\n // list of machines\n $scope.machines = machinesPromise;\n\n $scope.enableMachinesModule = settingsPromise.machines_module === 'true';\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n CSRF.setMetaTags();\n\n // Using the TrainingsController\n return new TrainingsController($scope, $state);\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n\n/**\n * Controller used in the trainings management page, allowing admins users to see and manage the list of trainings and reservations.\n */\nApplication.Controllers.controller('TrainingsAdminController', ['$scope', '$state', '$uibModal', 'Training', 'trainingsPromise', 'machinesPromise', '_t', 'growl', 'dialogs', 'Member', 'uiTourService', 'settingsPromise',\n function ($scope, $state, $uibModal, Training, trainingsPromise, machinesPromise, _t, growl, dialogs, Member, uiTourService, settingsPromise) {\n // list of trainings\n $scope.trainings = trainingsPromise;\n\n // simplified list of machines\n $scope.machines = machinesPromise;\n\n // Training to monitor, bound with drop-down selection\n $scope.monitoring = { training: null };\n\n // list of training availabilities, grouped by date\n $scope.groupedAvailabilities = {};\n\n // default: accordions are not open\n $scope.accordions = {};\n\n // Binding for the parseInt function\n $scope.parseInt = parseInt;\n\n // Default: we show only enabled trainings\n $scope.trainingFiltering = 'enabled';\n\n // Available options for filtering trainings by status\n $scope.filterDisabled = [\n 'enabled',\n 'disabled',\n 'all'\n ];\n\n // default tab: trainings list\n $scope.tabs = { active: 0 };\n\n $scope.enableMachinesModule = settingsPromise.machines_module === 'true';\n\n /**\n * In the trainings listing tab, return the stringified list of machines associated with the provided training\n * @param training {Object} Training object, inherited from $resource\n * @returns {string}\n */\n $scope.showMachines = function (training) {\n const selected = [];\n angular.forEach($scope.machines, function (m) {\n if (training.machine_ids.indexOf(m.id) >= 0) {\n return selected.push(m.name);\n }\n });\n if (selected.length) { return selected.join(', '); } else { return _t('app.admin.trainings.none'); }\n };\n\n /**\n * Removes the newly inserted but not saved training / Cancel the current training modification\n * @param rowform {Object} see http://vitalets.github.io/angular-xeditable/\n * @param index {number} training index in the $scope.trainings array\n */\n $scope.cancelTraining = function (rowform, index) {\n if ($scope.trainings[index].id != null) {\n return rowform.$cancel();\n } else {\n return $scope.trainings.splice(index, 1);\n }\n };\n\n /**\n * In the trainings monitoring tab, callback to open a modal window displaying the current bookings for the\n * provided training slot. The admin will be then able to validate the training for the users that followed\n * the training.\n * @param training {Object} Training object, inherited from $resource\n * @param availability {Object} time slot when the training occurs\n */\n $scope.showReservations = function (training, availability) {\n $uibModal.open({\n templateUrl: '/admin/trainings/validTrainingModal.html',\n controller: ['$scope', '$uibModalInstance', function ($scope, $uibModalInstance) {\n $scope.availability = availability;\n\n $scope.usersToValid = [];\n\n /**\n * Mark/unmark the provided user for training validation\n * @param user {Object} from the availability.reservation_users list\n */\n $scope.toggleSelection = function (user) {\n const index = $scope.usersToValid.indexOf(user);\n if (index > -1) {\n return $scope.usersToValid.splice(index, 1);\n } else {\n return $scope.usersToValid.push(user);\n }\n };\n\n /**\n * Validates the modifications (training validations) and save them to the server\n */\n $scope.ok = function () {\n const users = $scope.usersToValid.map(function (u) { return u.id; });\n return Training.update({ id: training.id }, {\n training: {\n users\n }\n }\n , function () { // success\n angular.forEach($scope.usersToValid, function (u) { u.is_valid = true; });\n $scope.usersToValid = [];\n return $uibModalInstance.close(training);\n });\n };\n\n /**\n * Cancel the modifications and close the modal window\n */\n return $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n }\n ]\n });\n };\n\n /**\n * Delete the provided training and, in case of success, remove it from the trainings list afterwards\n * @param index {number} index of the provided training in $scope.trainings\n * @param training {Object} training to delete\n */\n $scope.removeTraining = function (index, training) {\n dialogs.confirm(\n {\n resolve: {\n object () {\n return {\n title: _t('app.admin.trainings.confirmation_required'),\n msg: _t('app.admin.trainings.do_you_really_want_to_delete_this_training')\n };\n }\n }\n },\n function () { // deletion confirmed\n training.$delete(function () {\n $scope.trainings.splice(index, 1);\n growl.info(_t('app.admin.trainings.training_successfully_deleted'));\n },\n function (error) {\n growl.warning(_t('app.admin.trainings.unable_to_delete_the_training_because_some_users_already_booked_it'));\n console.error(error);\n });\n }\n );\n };\n\n /**\n * Takes a month number and return its localized literal name\n * @param number {Number} from 0 to 11\n * @returns {String} eg. 'janvier'\n */\n $scope.formatMonth = function (number) {\n number = parseInt(number);\n return moment().month(number).format('MMMM');\n };\n\n /**\n * Given a day, month and year, return a localized literal name for the day\n * @param day {Number} from 1 to 31\n * @param month {Number} from 0 to 11\n * @param year {Number} Gregorian's year number\n * @returns {String} eg. 'mercredi 12'\n */\n $scope.formatDay = function (day, month, year) {\n day = parseInt(day);\n month = parseInt(month);\n year = parseInt(year);\n\n return moment({ year, month, day }).format('dddd D');\n };\n\n /**\n * Callback when the drop-down selection is changed.\n * The selected training details will be loaded from the API and rendered into the accordions.\n */\n $scope.selectTrainingToMonitor = function () {\n Training.availabilities({ id: $scope.monitoring.training.id }, function (training) {\n $scope.groupedAvailabilities = groupAvailabilities([training]);\n // we open current year/month by default\n const now = moment();\n $scope.accordions[training.name] = {};\n $scope.accordions[training.name][now.year()] = { isOpenFirst: true };\n $scope.accordions[training.name][now.year()][now.month()] = { isOpenFirst: true };\n });\n };\n\n /**\n * Setup the feature-tour for the admin/trainings page.\n * This is intended as a contextual help (when pressing F1)\n */\n $scope.setupTrainingsTour = function () {\n // get the tour defined by the ui-tour directive\n const uitour = uiTourService.getTourByName('trainings');\n uitour.createStep({\n selector: 'body',\n stepId: 'welcome',\n order: 0,\n title: _t('app.admin.tour.trainings.welcome.title'),\n content: _t('app.admin.tour.trainings.welcome.content'),\n placement: 'bottom',\n orphan: true\n });\n uitour.createStep({\n selector: '.trainings-monitoring .manage-trainings',\n stepId: 'trainings',\n order: 1,\n title: _t('app.admin.tour.trainings.trainings.title'),\n content: _t('app.admin.tour.trainings.trainings.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.trainings-monitoring .filter-trainings',\n stepId: 'filter',\n order: 2,\n title: _t('app.admin.tour.trainings.filter.title'),\n content: _t('app.admin.tour.trainings.filter.content'),\n placement: 'left'\n });\n uitour.createStep({\n selector: '.trainings-monitoring .post-tracking',\n stepId: 'tracking',\n order: 3,\n title: _t('app.admin.tour.trainings.tracking.title'),\n content: _t('app.admin.tour.trainings.tracking.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: 'body',\n stepId: 'conclusion',\n order: 4,\n title: _t('app.admin.tour.conclusion.title'),\n content: _t('app.admin.tour.conclusion.content'),\n placement: 'bottom',\n orphan: true\n });\n // on step change, change the active tab if needed\n uitour.on('stepChanged', function (nextStep) {\n if (nextStep.stepId === 'filter' || nextStep.stepId === 'machines') { $scope.tabs.active = 0; }\n if (nextStep.stepId === 'tracking') { $scope.tabs.active = 1; }\n });\n // on tour end, save the status in database\n uitour.on('ended', function () {\n if (uitour.getStatus() === uitour.Status.ON && $scope.currentUser.profile_attributes.tours.indexOf('trainings') < 0) {\n Member.completeTour({ id: $scope.currentUser.id }, { tour: 'trainings' }, function (res) {\n $scope.currentUser.profile_attributes.tours = res.tours;\n });\n }\n });\n // if the user has never seen the tour, show him now\n if (settingsPromise.feature_tour_display !== 'manual' && $scope.currentUser.profile_attributes.tours.indexOf('trainings') < 0) {\n uitour.start();\n }\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {};\n\n /**\n * Group the trainings availabilities by trainings and by dates and return the resulting tree\n * @param trainings {Array} $scope.trainings is expected here\n * @returns {Object} Tree constructed as /training_name/year/month/day/[availabilities]\n */\n const groupAvailabilities = function (trainings) {\n const tree = {};\n for (const training of Array.from(trainings)) {\n tree[training.name] = {};\n tree[training.name].training = training;\n for (const availability of Array.from(training.availabilities)) {\n const start = moment(availability.start_at);\n\n // init the tree structure\n if (typeof tree[training.name][start.year()] === 'undefined') {\n tree[training.name][start.year()] = {};\n }\n if (typeof tree[training.name][start.year()][start.month()] === 'undefined') {\n tree[training.name][start.year()][start.month()] = {};\n }\n if (typeof tree[training.name][start.year()][start.month()][start.date()] === 'undefined') {\n tree[training.name][start.year()][start.month()][start.date()] = [];\n }\n\n // add the availability at its right place\n tree[training.name][start.year()][start.month()][start.date()].push(availability);\n }\n }\n return tree;\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n\n]);\n","\nApplication.Controllers.controller('ApplicationController', ['$rootScope', '$scope', '$transitions', '$window', '$locale', '$timeout', 'Session', 'AuthService', 'Auth', '$uibModal', '$state', 'growl', 'Notification', '$interval', 'Setting', '_t', 'Version', 'Help', '$cookies',\n function ($rootScope, $scope, $transitions, $window, $locale, $timeout, Session, AuthService, Auth, $uibModal, $state, growl, Notification, $interval, Setting, _t, Version, Help, $cookies) {\n /* PRIVATE STATIC CONSTANTS */\n\n // User's notifications will get refreshed every 30s\n const NOTIFICATIONS_CHECK_PERIOD = 30000;\n\n /* PUBLIC SCOPE */\n\n // Fab-manager's version\n $scope.version =\n { current: '' };\n\n // currency symbol for the current locale (cf. angular-i18n)\n $rootScope.currencySymbol = $locale.NUMBER_FORMATS.CURRENCY_SYM;\n\n /**\n * Set the current user to the provided value and initialize the session\n * @param user {Object} Rails/Devise user\n */\n $scope.setCurrentUser = function (user) {\n if (!angular.isUndefinedOrNull(user)) {\n $rootScope.currentUser = user;\n Session.create(user);\n getNotifications();\n // Fab-manager's app-version\n if (user.role === 'admin') {\n // get the version\n $scope.version = Version.get({ origin: window.location.origin });\n } else {\n $scope.version = { current: '' };\n }\n }\n };\n\n /**\n * Login callback\n * @param e {Object} see https://docs.angularjs.org/guide/expression#-event-\n * @param callback {function}\n */\n $scope.login = function (e, callback) {\n if (e) { e.preventDefault(); }\n return openLoginModal(null, null, callback);\n };\n\n /**\n * Logout callback\n * @param e {Object} see https://docs.angularjs.org/guide/expression#-event-\n */\n $scope.logout = function (e) {\n e.preventDefault();\n return Auth.logout().then(function () {\n Session.destroy();\n $rootScope.currentUser = null;\n $rootScope.toCheckNotifications = false;\n $scope.notifications = {\n total: 0,\n unread: 0\n };\n $cookies.remove('fablab_cart_token');\n return $state.go('app.public.home');\n }, function (error) {\n console.error(`An error occurred logging out: ${error}`);\n });\n };\n\n /**\n * Open the modal window allowing the user to create an account.\n * @param e {Object} see https://docs.angularjs.org/guide/expression#-event-\n */\n $scope.signup = function (e) {\n if (e) { e.preventDefault(); }\n if (Fablab.activeProviderType !== 'DatabaseProvider') {\n $window.location.href = '/sso-redirect';\n } else {\n return $uibModal.open({\n templateUrl: '/shared/signupModal.html',\n backdrop: 'static',\n keyboard: false,\n size: 'md',\n resolve: {\n settingsPromise: ['Setting', function (Setting) {\n return Setting.query({ names: \"['phone_required', 'recaptcha_site_key', 'confirmation_required', 'address_required']\" }).$promise;\n }],\n profileCustomFieldsPromise: ['ProfileCustomField', function (ProfileCustomField) { return ProfileCustomField.query({}).$promise; }],\n proofOfIdentityTypesPromise: ['ProofOfIdentityType', function (ProofOfIdentityType) { return ProofOfIdentityType.query({}).$promise; }]\n },\n controller: ['$scope', '$uibModalInstance', 'Group', 'CustomAsset', 'settingsPromise', 'growl', '_t', 'profileCustomFieldsPromise', 'proofOfIdentityTypesPromise', function ($scope, $uibModalInstance, Group, CustomAsset, settingsPromise, growl, _t, profileCustomFieldsPromise, proofOfIdentityTypesPromise) {\n // default parameters for the date picker in the account creation modal\n $scope.datePicker = {\n format: Fablab.uibDateFormat,\n opened: false,\n options: {\n startingDay: Fablab.weekStartingDay,\n maxDate: new Date()\n }\n };\n\n // is the phone number required to sign-up?\n $scope.phoneRequired = (settingsPromise.phone_required === 'true');\n\n // is the address required to sign-up?\n $scope.addressRequired = (settingsPromise.address_required === 'true');\n\n // reCaptcha v2 site key (or undefined)\n $scope.recaptchaSiteKey = settingsPromise.recaptcha_site_key;\n\n // callback to open the date picker (account creation modal)\n $scope.openDatePicker = function ($event) {\n $event.preventDefault();\n $event.stopPropagation();\n $scope.datePicker.opened = true;\n };\n\n $scope.profileCustomFields = profileCustomFieldsPromise.filter(f => f.actived);\n\n // retrieve the groups (standard, student ...)\n Group.query(function (groups) {\n $scope.groups = groups;\n $scope.enabledGroups = groups.filter(g => !g.disabled);\n });\n\n // retrieve the CGU\n CustomAsset.get({ name: 'cgu-file' }, function (cgu) {\n $scope.cgu = cgu.custom_asset;\n });\n\n // default user's parameters\n $scope.user = {\n is_allow_contact: true,\n is_allow_newsletter: false,\n // reCaptcha response, received from Google (through AJAX) and sent to server for validation\n recaptcha: undefined,\n invoicing_profile_attributes: {\n user_profile_custom_fields_attributes: $scope.profileCustomFields.map(f => {\n return { profile_custom_field_id: f.id };\n })\n }\n };\n\n $scope.hasProofOfIdentityTypes = function (groupId) {\n return proofOfIdentityTypesPromise.filter(t => t.group_ids.includes(groupId)).length > 0;\n };\n\n $scope.groupName = function (groupId) {\n if (!$scope.enabledGroups || groupId === undefined || groupId === null) {\n return '';\n }\n return $scope.enabledGroups.find(g => g.id === groupId).name;\n };\n\n // Errors display\n $scope.alerts = [];\n $scope.closeAlert = function (index) {\n $scope.alerts.splice(index, 1);\n };\n\n // callback for form validation\n $scope.ok = function () {\n // try to create the account\n $scope.alerts = [];\n // remove 'organization' attribute\n const orga = $scope.user.organization;\n delete $scope.user.organization;\n // register on server\n return Auth.register($scope.user).then(function (user) {\n if (user.id) {\n // creation successful\n $uibModalInstance.close({\n user,\n settings: settingsPromise\n });\n } else {\n // the user was not saved in database, something wrong occurred\n growl.error(_t('app.public.common.unexpected_error_occurred'));\n }\n }, function (error) {\n // creation failed...\n // restore organization param\n $scope.user.organization = orga;\n // display errors\n angular.forEach(error.data.errors, function (v, k) {\n angular.forEach(v, function (err) {\n $scope.alerts.push({\n msg: k + ': ' + err,\n type: 'danger'\n });\n });\n });\n });\n };\n\n $scope.dismiss = function () {\n $uibModalInstance.dismiss('cancel');\n };\n }]\n }).result.finally(null).then(function (res) {\n // when the account was created successfully, set the session to the newly created account\n if (res.settings.confirmation_required === 'true') {\n Auth._currentUser = null;\n growl.info(_t('app.public.common.you_will_receive_confirmation_instructions_by_email_detailed'));\n } else {\n $scope.setCurrentUser(res.user);\n }\n });\n }\n };\n\n /**\n * Open the modal window allowing the user to change his password.\n * @param token {string} security token for password changing. The user should have recieved it by mail\n */\n $scope.editPassword = function (token) {\n $uibModal.open({\n templateUrl: '/shared/passwordEditModal.html',\n size: 'md',\n controller: ['$scope', '$uibModalInstance', '$http', function ($scope, $uibModalInstance, $http) {\n $scope.user = { reset_password_token: token };\n $scope.alerts = [];\n $scope.closeAlert = function (index) {\n $scope.alerts.splice(index, 1);\n };\n\n $scope.changePassword = function () {\n $scope.alerts = [];\n return $http.put('/users/password.json', { user: $scope.user }).then(function () { $uibModalInstance.close(); }).catch(function (data) {\n angular.forEach(data.data.errors, function (v, k) {\n angular.forEach(v, function (err) {\n $scope.alerts.push({\n msg: k + ': ' + err,\n type: 'danger'\n });\n });\n });\n });\n };\n }]\n }).result.finally(null).then(function () {\n growl.success(_t('app.public.common.your_password_was_successfully_changed'));\n return Auth.login().then(function (user) {\n $scope.setCurrentUser(user);\n }, function (error) {\n console.error(`Authentication failed: ${JSON.stringify(error)}`);\n }\n );\n });\n };\n\n /**\n * Compact/Expend the width of the left navigation bar\n * @param event {Object} see https://docs.angularjs.org/guide/expression#-event-\n */\n $scope.toggleNavSize = function (event) {\n let $classes, $targets;\n if (typeof event === 'undefined') {\n console.error('[ApplicationController::toggleNavSize] Missing event parameter');\n return;\n }\n\n let toggler = $(event.target);\n if (!toggler.data('toggle')) { toggler = toggler.closest('[data-toggle^=\"class\"]'); }\n\n const $class = toggler.data().toggle;\n const $target = toggler.data('target') || toggler.attr('data-link');\n\n if ($class) {\n const $tmp = $class.split(':')[1];\n if ($tmp) { $classes = $tmp.split(','); }\n }\n\n if ($target) {\n $targets = $target.split(',');\n }\n\n if ($classes && $classes.length) {\n $.each($targets, function (index) {\n if ($classes[index].indexOf('*') !== -1) {\n const patt = new RegExp('\\\\s',\n +$classes[index].replace(/\\*/g, '[A-Za-z0-9-_]+').split(' ').join('\\\\s|\\\\s'),\n +'\\\\s', 'g');\n $(toggler).each(function (i, it) {\n let cn = ` ${it.className} `;\n while (patt.test(cn)) {\n cn = cn.replace(patt, ' ');\n }\n it.className = $.trim(cn);\n });\n }\n\n return (($targets[index] !== '#') && $($targets[index]).toggleClass($classes[index])) || toggler.toggleClass($classes[index]);\n });\n }\n\n toggler.toggleClass('active');\n };\n\n /**\n * Open the modal dialog showing that an upgrade is available\n */\n $scope.versionModal = function () {\n if ($scope.version.up_to_date) return;\n if ($rootScope.currentUser.role !== 'admin') return;\n\n $uibModal.open({\n templateUrl: '/admin/versions/upgradeModal.html',\n controller: 'VersionModalController',\n resolve: {\n version () { return $scope.version; }\n }\n });\n };\n\n /**\n * Trigger the contextual help \"feature tour\".\n * @param event {Object} see https://docs.angularjs.org/guide/expression#-event-\n */\n $scope.help = function (event) {\n event.preventDefault();\n\n // we wrap the event triggering into a $timeout to prevent conflicting with current $apply\n $timeout(function () {\n const evt = new KeyboardEvent('keydown', { key: 'F1' });\n window.dispatchEvent(evt);\n });\n };\n\n /* PRIVATE SCOPE */\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n // try to retrieve any currently logged user\n Auth.login().then(function (user) {\n $scope.setCurrentUser(user);\n // force users to complete their profile if they are not\n if (user.need_completion) {\n return $state.transitionTo('app.logged.profileCompletion');\n }\n }, function () {\n console.info('No users currently logged');\n $rootScope.toCheckNotifications = false;\n });\n\n // bind to the $transitions.onStart event (UI-Router)\n $transitions.onStart({}, function (trans) {\n if (!trans.$to().data) { return; }\n\n const { authorizedRoles } = trans.$to().data;\n if (!AuthService.isAuthorized(authorizedRoles)) {\n if (AuthService.isAuthenticated()) {\n // user is not allowed\n console.error('[ApplicationController::initialize] user is not allowed');\n return false;\n } else {\n // user is not logged in\n openLoginModal(trans.$to().name, trans.$to().params);\n return false;\n }\n }\n });\n\n // we stop polling notifications when the page is not in foreground\n onPageVisible(function (state) { $rootScope.toCheckNotifications = (state === 'visible'); });\n\n Setting.query({ names: \"['fablab_name', 'name_genre', 'link_name']\" }, function (settings) {\n $scope.fablabName = settings.fablab_name;\n $scope.nameGenre = settings.name_genre;\n $scope.linkName = settings.link_name;\n });\n\n // shorthands\n $scope.isAuthenticated = Auth.isAuthenticated;\n $scope.isAuthorized = AuthService.isAuthorized;\n $rootScope.login = $scope.login;\n\n // handle F1 key to trigger help\n window.addEventListener('keydown', Help);\n };\n\n /**\n * Retrieve once the notifications from the server and display a message popup for each new one.\n * Then, periodically check for new notifications.\n */\n const getNotifications = function () {\n $rootScope.toCheckNotifications = true;\n if (!$rootScope.checkNotificationsIsInit && !!$rootScope.currentUser) {\n setTimeout(function () {\n // we request the most recent notifications\n Notification.last_unread(function (notifications) {\n $rootScope.lastCheck = new Date();\n $scope.notifications = notifications.totals;\n\n const toDisplay = [];\n angular.forEach(notifications.notifications, function (n) { toDisplay.push(n); });\n\n if (toDisplay.length < notifications.totals.unread) {\n toDisplay.push({ message: { description: _t('app.public.common.and_NUMBER_other_notifications', { NUMBER: notifications.totals.unread - toDisplay.length }) } });\n }\n\n angular.forEach(toDisplay, function (notification) { growl.info(notification.message.description); });\n });\n }, 2000);\n\n const checkNotifications = function () {\n if ($rootScope.toCheckNotifications) {\n return Notification.polling({ last_poll: $rootScope.lastCheck }).$promise.then(function (data) {\n $rootScope.lastCheck = new Date();\n $scope.notifications = data.totals;\n\n angular.forEach(data.notifications, function (notification) { growl.info(notification.message.description); });\n }).catch(function (error) {\n console.error('Error while polling notifications', error);\n });\n }\n };\n\n $interval(checkNotifications, NOTIFICATIONS_CHECK_PERIOD);\n $rootScope.checkNotificationsIsInit = true;\n }\n };\n\n /**\n * Open the modal window allowing the user to log in.\n */\n const openLoginModal = function (toState, toParams, callback) {\n if (Fablab.activeProviderType !== 'DatabaseProvider') {\n $window.location.href = '/sso-redirect';\n } else {\n return $uibModal.open({\n templateUrl: '/shared/deviseModal.html',\n backdrop: 'static',\n size: 'sm',\n resolve: {\n settingsPromise: ['Setting', function (Setting) {\n return Setting.query({ names: \"['confirmation_required', 'public_registrations']\" }).$promise;\n }]\n },\n controller: ['$scope', '$uibModalInstance', '_t', 'settingsPromise', function ($scope, $uibModalInstance, _t, settingsPromise) {\n const user = ($scope.user = {});\n\n // email confirmation required before user sign-in?\n $scope.confirmationRequired = settingsPromise.confirmation_required;\n\n // is public registrations allowed?\n $scope.publicRegistrations = (settingsPromise.public_registrations !== 'false');\n\n $scope.login = function () {\n Auth.login(user).then(function (user) {\n // Authentication succeeded ...\n $uibModalInstance.close(user);\n if (callback && (typeof callback === 'function')) {\n return callback(user);\n }\n }\n , function (error) {\n console.error(`Authentication failed: ${JSON.stringify(error)}`);\n $scope.alerts = [];\n return $scope.alerts.push({\n msg: error.data.error,\n type: 'danger'\n });\n });\n };\n // handle modal behaviors. The provided reason will be used to define the following actions\n $scope.dismiss = function () {\n $uibModalInstance.dismiss('cancel');\n };\n\n $scope.openSignup = function (e) {\n e.preventDefault();\n return $uibModalInstance.dismiss('signup');\n };\n\n $scope.openConfirmationNewModal = function (e) {\n e.preventDefault();\n return $uibModalInstance.dismiss('confirmationNew');\n };\n\n $scope.openResetPassword = function (e) {\n e.preventDefault();\n return $uibModalInstance.dismiss('resetPassword');\n };\n }]\n }).result.finally(null).then(function (user) {\n // what to do when the modal is closed\n\n // authentication succeeded, set the session, gather the notifications and redirect\n GTM.trackLogin();\n $scope.setCurrentUser(user);\n\n if ((toState !== null) && (toParams !== null)) {\n return $state.go(toState, toParams);\n }\n }, function (reason) {\n // authentication did not end successfully\n if (reason === 'signup') {\n // open sign-up modal\n $scope.signup();\n } else if (reason === 'resetPassword') {\n // open the 'reset password' modal\n return $uibModal.open({\n templateUrl: '/shared/passwordNewModal.html',\n size: 'sm',\n controller: ['$scope', '$uibModalInstance', '$http', function ($scope, $uibModalInstance, $http) {\n $scope.user = { email: '' };\n $scope.sendReset = function () {\n return $http.post('/users/password.json', { user: $scope.user }).then(function () {\n $uibModalInstance.close();\n });\n };\n }]\n }).result.finally(null).then(function () {\n growl.info(_t('app.public.common.you_will_receive_in_a_moment_an_email_with_instructions_to_reset_your_password'));\n });\n } else if (reason === 'confirmationNew') {\n // open the 'reset password' modal\n return $uibModal.open({\n templateUrl: '/shared/ConfirmationNewModal.html',\n size: 'sm',\n controller: ['$scope', '$uibModalInstance', '$http', function ($scope, $uibModalInstance, $http) {\n $scope.user = { email: '' };\n $scope.submitConfirmationNewForm = function () {\n return $http.post('/users/confirmation.json', { user: $scope.user }).then(function () {\n $uibModalInstance.close();\n });\n };\n }]\n }).result.finally(null).then(function () {\n growl.info(_t('app.public.common.you_will_receive_confirmation_instructions_by_email_detailed'));\n });\n }\n });\n // otherwise the user just closed the modal\n }\n };\n\n /**\n * Detect if the current page (tab/window) is active of put as background.\n * When the status changes, the callback is triggered with the new status as parameter\n * Inspired by http://stackoverflow.com/questions/1060008/is-there-a-way-to-detect-if-a-browser-window-is-not-currently-active#answer-1060034\n */\n const onPageVisible = function (callback) {\n let hidden = 'hidden';\n\n const onchange = function (evt) {\n const v = 'visible';\n const h = 'hidden';\n const evtMap = {\n focus: v,\n focusin: v,\n pageshow: v,\n blur: h,\n focusout: h,\n pagehide: h\n };\n evt = evt || window.event;\n if (evt.type in evtMap) {\n if (typeof callback === 'function') { callback(evtMap[evt.type]); }\n } else {\n const visibility = this[hidden] ? 'hidden' : 'visible';\n if (typeof callback === 'function') { callback(visibility); }\n }\n };\n\n // Standards:\n if (hidden in document) {\n document.addEventListener('visibilitychange', onchange);\n } else if ((hidden = 'mozHidden') in document) {\n document.addEventListener('mozvisibilitychange', onchange);\n } else if ((hidden = 'webkitHidden') in document) {\n document.addEventListener('webkitvisibilitychange', onchange);\n } else if ((hidden = 'msHidden') in document) {\n document.addEventListener('msvisibilitychange', onchange);\n // IE 9 and lower\n } else if ('onfocusin' in document) {\n document.onfocusin = (document.onfocusout = onchange);\n // All others\n } else {\n window.onpageshow = (window.onpagehide = (window.onfocus = (window.onblur = onchange)));\n }\n // set the initial state (but only if browser supports the Page Visibility API)\n if (document[hidden] !== undefined) {\n return onchange({ type: document[hidden] ? 'blur' : 'focus' });\n }\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n\n/**\n * Controller used in the modal showing details about the version and the upgrades\n */\nApplication.Controllers.controller('VersionModalController', ['$scope', '$uibModalInstance', 'version', function ($scope, $uibModalInstance, version) {\n // version infos (current version + upgrade infos from hub)\n $scope.version = version;\n\n // callback to close the modal\n $scope.close = function () {\n $uibModalInstance.dismiss();\n };\n}]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\n/**\n * Controller used in the public calendar global\n */\n\nApplication.Controllers.controller('CalendarController', ['$scope', '$state', '$aside', 'moment', 'Availability', 'Setting', 'growl', 'dialogs', 'bookingWindowStart', 'bookingWindowEnd', '_t', 'uiCalendarConfig', 'CalendarConfig', 'trainingsPromise', 'machinesPromise', 'spacesPromise', 'iCalendarPromise',\n function ($scope, $state, $aside, moment, Availability, Setting, growl, dialogs, bookingWindowStart, bookingWindowEnd, _t, uiCalendarConfig, CalendarConfig, trainingsPromise, machinesPromise, spacesPromise, iCalendarPromise) {\n /* PRIVATE STATIC CONSTANTS */\n let currentMachineEvent = null;\n machinesPromise.forEach(m => m.checked = true);\n trainingsPromise.forEach(t => t.checked = true);\n spacesPromise.forEach(s => s.checked = true);\n\n // check all formation/machine is select in filter\n const isSelectAll = (type, scope) => scope[type].length === scope[type].filter(t => t.checked).length;\n\n /* PUBLIC SCOPE */\n\n // List of trainings\n $scope.trainings = trainingsPromise.filter(t => !t.disabled);\n\n // List of machines\n $scope.machines = machinesPromise.filter(t => !t.disabled);\n\n // List of spaces\n $scope.spaces = spacesPromise.filter(t => !t.disabled);\n\n // List of external iCalendar sources\n $scope.externals = iCalendarPromise.map(e => Object.assign(e, { checked: true }));\n\n // add availabilities source to event sources\n $scope.eventSources = [];\n\n // filter availabilities if have change\n $scope.filterAvailabilities = function (filter, scope) {\n if (!scope) { scope = $scope; }\n scope.filter = ($scope.filter = {\n trainings: isSelectAll('trainings', scope),\n machines: isSelectAll('machines', scope),\n spaces: isSelectAll('spaces', scope),\n externals: isSelectAll('externals', scope),\n evt: filter.evt,\n dispo: filter.dispo\n });\n // remove all\n $scope.eventSources.splice(0, $scope.eventSources.length);\n // recreate source for trainings/machines/events with new filters\n $scope.eventSources.push({\n url: availabilitySourceUrl()\n });\n // external iCalendar events sources\n $scope.externals.forEach(e => {\n if (e.checked) {\n if (!$scope.eventSources.some(evt => evt.id === e.id)) {\n $scope.eventSources.push({\n id: e.id,\n url: `/api/i_calendar/${e.id}/events`,\n textColor: e.text_color || '#000',\n color: e.color\n });\n }\n } else {\n if ($scope.eventSources.some(evt => evt.id === e.id)) {\n const idx = $scope.eventSources.findIndex(evt => evt.id === e.id);\n $scope.eventSources.splice(idx, 1);\n }\n }\n });\n uiCalendarConfig.calendars.calendar.fullCalendar('refetchEvents');\n };\n\n /**\n * Return a CSS-like style of the given calendar configuration\n * @param calendar\n */\n $scope.calendarStyle = function (calendar) {\n return {\n 'border-color': calendar.color,\n color: calendar.text_color\n };\n };\n\n // a variable for formation/machine/event/dispo checkbox is or not checked\n $scope.filter = {\n trainings: isSelectAll('trainings', $scope),\n machines: isSelectAll('machines', $scope),\n spaces: isSelectAll('spaces', $scope),\n externals: isSelectAll('externals', $scope),\n evt: true,\n dispo: true\n };\n\n // toggle to select all formation/machine\n $scope.toggleFilter = function (type, filter) {\n $scope[type].forEach(t => t.checked = filter[type]);\n $scope.filterAvailabilities(filter, $scope);\n };\n\n $scope.openFilterAside = () =>\n $aside.open({\n templateUrl: '/calendar/filterAside.html',\n placement: 'right',\n size: 'md',\n backdrop: false,\n resolve: {\n trainings () {\n return $scope.trainings;\n },\n machines () {\n return $scope.machines;\n },\n spaces () {\n return $scope.spaces;\n },\n externals () {\n return $scope.externals;\n },\n filter () {\n return $scope.filter;\n },\n toggleFilter () {\n return $scope.toggleFilter;\n },\n filterAvailabilities () {\n return $scope.filterAvailabilities;\n }\n },\n controller: ['$scope', '$uibModalInstance', 'trainings', 'machines', 'spaces', 'externals', 'filter', 'toggleFilter', 'filterAvailabilities', function ($scope, $uibModalInstance, trainings, machines, spaces, externals, filter, toggleFilter, filterAvailabilities) {\n $scope.trainings = trainings;\n $scope.machines = machines;\n $scope.spaces = spaces;\n $scope.externals = externals;\n $scope.filter = filter;\n\n $scope.toggleFilter = (type, filter) => toggleFilter(type, filter);\n\n $scope.filterAvailabilities = filter => filterAvailabilities(filter, $scope);\n\n return $scope.close = function (e) {\n $uibModalInstance.dismiss();\n return e.stopPropagation();\n };\n }]\n });\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = () => {\n // fullCalendar (v2) configuration\n $scope.calendarConfig = CalendarConfig({\n slotEventOverlap: true,\n header: {\n left: 'month agendaWeek agendaDay today prev,next',\n center: 'title',\n right: ''\n },\n minTime: moment.duration(moment(bookingWindowStart.setting.value).format('HH:mm:ss')),\n maxTime: moment.duration(moment(bookingWindowEnd.setting.value).format('HH:mm:ss')),\n defaultView: window.innerWidth <= 480 ? 'agendaDay' : 'agendaWeek',\n eventClick (event, jsEvent, view) {\n return calendarEventClickCb(event, jsEvent, view);\n },\n viewRender (view, element) {\n return viewRenderCb(view, element);\n },\n eventRender (event, element) {\n return eventRenderCb(event, element);\n }\n });\n $scope.eventSources = [{\n url: availabilitySourceUrl()\n }];\n $scope.externals.forEach(e => {\n if (e.checked) {\n $scope.eventSources.push({\n id: e.id,\n url: `/api/i_calendar/${e.id}/events`,\n textColor: e.text_color || '#000',\n color: e.color\n });\n }\n });\n };\n\n /**\n * Callback triggered when an event object is clicked in the fullCalendar view\n */\n const calendarEventClickCb = function (event) {\n // current calendar object\n const { calendar } = uiCalendarConfig.calendars;\n if (event.available_type === 'machines') {\n currentMachineEvent = event;\n calendar.fullCalendar('changeView', 'agendaDay');\n calendar.fullCalendar('gotoDate', event.start);\n } else if (event.available_type === 'space') {\n calendar.fullCalendar('changeView', 'agendaDay');\n calendar.fullCalendar('gotoDate', event.start);\n } else if (event.available_type === 'event') {\n $state.go('app.public.events_show', { id: event.event_id });\n } else if (event.available_type === 'training') {\n $state.go('app.public.training_show', { id: event.training_id });\n } else {\n if (event.machine_ids) {\n // TODO open modal to ask the user to select the machine to show\n $state.go('app.public.machines_show', { id: event.machine_ids[0] });\n } else if (event.space_id) {\n $state.go('app.public.space_show', { id: event.space_id });\n }\n }\n };\n\n // agendaDay view: disable slotEventOverlap\n // agendaWeek view: enable slotEventOverlap\n const toggleSlotEventOverlap = function (view) {\n // set defaultView, because when we change slotEventOverlap\n // ui-calendar will trigger rerender calendar\n $scope.calendarConfig.defaultView = view.type;\n const today = currentMachineEvent ? currentMachineEvent.start : moment().utc().startOf('day');\n if ((today > view.intervalStart) && (today < view.intervalEnd) && (today !== view.intervalStart)) {\n $scope.calendarConfig.defaultDate = today;\n } else {\n $scope.calendarConfig.defaultDate = view.intervalStart;\n }\n if (view.type === 'agendaDay') {\n return $scope.calendarConfig.slotEventOverlap = false;\n } else {\n return $scope.calendarConfig.slotEventOverlap = true;\n }\n };\n\n /**\n * This function is called when calendar view is rendered or changed\n * @see https://fullcalendar.io/docs/v3/viewRender#v2\n */\n const viewRenderCb = function (view) {\n toggleSlotEventOverlap(view);\n if (view.type === 'agendaDay') {\n // get availabilties by 1 day for show machine slots\n return uiCalendarConfig.calendars.calendar.fullCalendar('refetchEvents');\n }\n };\n\n /**\n * Callback triggered by fullCalendar when it is about to render an event.\n * @see https://fullcalendar.io/docs/v3/eventRender#v2\n */\n const eventRenderCb = function (event, element) {\n if (event.tags && event.tags.length > 0) {\n let html = '';\n for (const tag of Array.from(event.tags)) {\n html += `${tag.name} `;\n }\n element.find('.fc-title').append(`
    ${html}`);\n }\n };\n\n const getFilter = function () {\n const t = $scope.trainings.filter(t => t.checked).map(t => t.id);\n const m = $scope.machines.filter(m => m.checked).map(m => m.id);\n const s = $scope.spaces.filter(s => s.checked).map(s => s.id);\n return { t, m, s, evt: $scope.filter.evt, dispo: $scope.filter.dispo };\n };\n\n const availabilitySourceUrl = () => `/api/availabilities/public?${$.param(getFilter())}`;\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n'use strict';\n\nApplication.Controllers.controller('CartController', ['$scope', 'CSRF', 'growl', '$state',\n function ($scope, CSRF, growl, $state) {\n /* PRIVATE SCOPE */\n\n /* PUBLIC SCOPE */\n\n /**\n * Open the modal dialog allowing the user to log into the system\n */\n $scope.userLogin = function () {\n setTimeout(() => {\n if (!$scope.isAuthenticated()) {\n $scope.login();\n $scope.$apply();\n }\n }, 50);\n };\n\n /**\n * Overlap global function to allow the user to navigate to the previous screen\n * If no previous $state were recorded, navigate to the project list page\n */\n $scope.backPrevLocation = function (event) {\n event.preventDefault();\n event.stopPropagation();\n if ($state.prevState === '') {\n $state.prevState = 'app.public.store';\n }\n window.history.back();\n };\n\n /**\n * Callback triggered in case of error\n */\n $scope.onError = (message) => {\n growl.error(message);\n };\n\n /**\n * Callback triggered in case of success\n */\n $scope.onSuccess = (message) => {\n growl.success(message);\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n // set the authenticity tokens in the forms\n CSRF.setMetaTags();\n };\n\n // init the controller (call at the end !)\n return initialize();\n }\n\n]);\n","'use strict';\n\n/**\n * Controller used for the cookies consent modal\n */\nApplication.Controllers.controller('CookiesController', ['$scope', '$cookies', 'Setting',\n function ($scope, $cookies, Setting) {\n /* PUBLIC SCOPE */\n\n // the acceptation state (undefined if no decision was made until now)\n $scope.cookiesState = undefined;\n\n // link pointed by \"learn more\"\n $scope.learnMoreUrl = 'https://www.cookiesandyou.com/';\n\n // add a cookie to the browser, saving the user choice to refuse cookies\n $scope.declineCookies = function () {\n const expires = moment().add(13, 'months').toDate();\n $cookies.put('fab-manager-cookies-consent', 'decline', { expires });\n readCookie();\n };\n\n // add a cookie to the browser, saving the user choice to accept cookies.\n // Then enable the analytics\n $scope.acceptCookies = function () {\n const expires = moment().add(13, 'months').toDate();\n $cookies.put('fab-manager-cookies-consent', 'accept', { expires });\n readCookie();\n GTM.enableAnalytics(Fablab.trackingId);\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n readCookie();\n // if the privacy policy was defined, redirect the user to it when clicking on \"read more\"\n Setting.get({ name: 'privacy_body' }, data => {\n if (data.setting.value) {\n $scope.learnMoreUrl = '#!/privacy-policy';\n }\n });\n // if the tracking ID was not set in the settings, only functional cookies will be set, so user consent is not required\n if (!Fablab.trackingId) $scope.cookiesState = 'ignore';\n };\n\n const readCookie = function () {\n $scope.cookiesState = $cookies.get('fab-manager-cookies-consent');\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\nApplication.Controllers.controller('DashboardController', ['$scope', 'memberPromise', 'trainingsPromise', 'SocialNetworks', 'growl', 'proofOfIdentityTypesPromise',\n function ($scope, memberPromise, trainingsPromise, SocialNetworks, growl, proofOfIdentityTypesPromise) {\n // Current user's profile\n $scope.user = memberPromise;\n\n // List of social networks associated with this user and toggle 'show all' state\n $scope.social = {\n showAllLinks: false,\n networks: SocialNetworks\n };\n\n $scope.hasProofOfIdentityTypes = proofOfIdentityTypesPromise.length > 0;\n\n /**\n * Check if the member has used his training credits for the given credit\n * @param trainingCredits array of credits used by the member\n * @param trainingId id of the training to find\n */\n $scope.hasUsedTrainingCredit = function (trainingCredits, trainingId) {\n return trainingCredits.find(tc => tc.training_id === trainingId);\n };\n\n /**\n * Return the name associated with the provided training ID\n * @param trainingId training identifier\n * @return {string}\n */\n $scope.getTrainingName = function (trainingId) {\n return trainingsPromise.find(t => t.id === trainingId).name;\n };\n\n /**\n * Callback used in PaymentScheduleDashboard, in case of error\n */\n $scope.onError = function (message) {\n growl.error(message);\n };\n\n /**\n * Callback triggered when the user has successfully updated his card\n */\n $scope.onCardUpdateSuccess = function (message) {\n growl.success(message);\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = () => {\n $scope.social.networks = filterNetworks();\n };\n\n /**\n * Filter the social networks or websites that are associated with the profile of the user provided in promise\n * and return the filtered networks\n * @return {Array}\n */\n const filterNetworks = function () {\n const networks = [];\n for (const network of Array.from(SocialNetworks)) {\n if ($scope.user.profile_attributes[network] && ($scope.user.profile_attributes[network].length > 0)) {\n networks.push(network);\n }\n }\n return networks;\n };\n\n /**\n * Callback used in case of error\n */\n $scope.onSuccess = function (message) {\n growl.success(message);\n };\n\n /**\n * Callback used in PaymentScheduleDashboard, in case of error\n */\n $scope.onError = function (message) {\n growl.error(message);\n };\n\n /**\n * Callback triggered when the user has successfully updated his card\n */\n $scope.onCardUpdateSuccess = function (message) {\n growl.success(message);\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n\n]);\n","'use strict';\n\nApplication.Controllers.controller('HeaderController', ['$scope', '$transitions', '$state', 'settingsPromise', 'ProofOfIdentityType', 'AuthService',\n function ($scope, $transitions, $state, settingsPromise, ProofOfIdentityType, AuthService) {\n $scope.aboutPage = ($state.current.name === 'app.public.about');\n\n $transitions.onStart({}, function (trans) {\n $scope.aboutPage = (trans.$to().name === 'app.public.about');\n });\n\n /**\n * Returns the current state of the public registration setting (allowed/blocked).\n */\n $scope.registrationEnabled = function () {\n return settingsPromise.public_registrations === 'true';\n };\n\n $scope.dropdownOnToggled = function (open) {\n if (open) {\n ProofOfIdentityType.query({ group_id: $scope.currentUser.group_id }, function (proofOfIdentityTypes) {\n $scope.hasProofOfIdentityTypes = proofOfIdentityTypes.length > 0;\n });\n }\n };\n }\n]);\n","'use strict';\n\nApplication.Controllers.controller('HomeController', ['$scope', '$transition$', '$translatePartialLoader', 'AuthService', 'settingsPromise', 'Member', 'uiTourService', '_t',\n function ($scope, $transition$, $translatePartialLoader, AuthService, settingsPromise, Member, uiTourService, _t) {\n /* PUBLIC SCOPE */\n\n // Home page HTML content\n $scope.homeContent = null;\n\n // Status of the components in the home page (exists or not?)\n $scope.status = {\n news: false,\n projects: false,\n twitter: false,\n members: false,\n events: false\n };\n\n /**\n * Setup the feature-tour for the home page. (admins only)\n * This is intended as a contextual help (when pressing F1)\n */\n $scope.setupHomeTour = function () {\n if (AuthService.isAuthorized(['admin', 'manager'])) {\n // Workaround for the following bug: sometimes, when the feature tour is shown, the translations keys are not\n // interpreted. This is an ugly hack, but we can't do better for now because angular-ui-tour does not support\n // removing steps (this would allow us to recreate the steps when the translations are loaded), and we can't use\n // promises with _t's translations (this would be a very big refactoring)\n setTimeout(setupWelcomeTour, 1000);\n }\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n // if we receive a token to reset the password as GET parameter, trigger the\n // changePassword modal from the parent controller\n if ($transition$.params().reset_password_token) {\n return $scope.$parent.editPassword($transition$.params().reset_password_token);\n }\n\n // We set the home page content, with the directives replacing the placeholders\n $scope.homeContent = insertDirectives(settingsPromise.home_content);\n\n // for admins, setup the tour on login\n $scope.$watch('currentUser', function (newValue, oldValue) {\n if (!oldValue && newValue && newValue.role === 'admin') {\n const uitour = uiTourService.getTourByName('welcome');\n if (!uitour.hasStep()) {\n setupWelcomeTour();\n }\n }\n });\n };\n\n /**\n * Parse the provided html and replace the elements with special IDs (#news, #projects, #twitter, #members, #events)\n * by their respective angular directives\n * @param html {String} a valid html string, as defined by the summernote editor in admin/settings/home_page\n * @returns {string} a valid html string containing angular directives for the specified plugins\n */\n const insertDirectives = function (html) {\n const node = document.createElement('div');\n node.innerHTML = html.trim();\n\n node.querySelectorAll('div#news').forEach((newsNode) => {\n const news = document.createElement('news');\n newsNode.parentNode.replaceChild(news, newsNode);\n $scope.status.news = true;\n });\n\n node.querySelectorAll('div#projects').forEach((projectsNode) => {\n const projects = document.createElement('projects');\n projectsNode.parentNode.replaceChild(projects, projectsNode);\n $scope.status.projects = true;\n });\n\n node.querySelectorAll('div#twitter').forEach((twitterNode) => {\n const twitter = document.createElement('twitter');\n twitterNode.parentNode.replaceChild(twitter, twitterNode);\n $scope.status.twitter = true;\n });\n\n node.querySelectorAll('div#members').forEach((membersNode) => {\n const members = document.createElement('members');\n membersNode.parentNode.replaceChild(members, membersNode);\n $scope.status.members = true;\n });\n\n node.querySelectorAll('div#events').forEach((eventsNode) => {\n const events = document.createElement('events');\n eventsNode.parentNode.replaceChild(events, eventsNode);\n $scope.status.events = true;\n });\n\n return node.outerHTML;\n };\n\n /**\n * Setup the feature-tour for the home page that will present an overview of the whole app.\n * This is intended as a contextual help.\n */\n const setupWelcomeTour = function () {\n // get the tour defined by the ui-tour directive\n const uitour = uiTourService.getTourByName('welcome');\n if (!uitour) return;\n // add the steps\n uitour.createStep({\n selector: 'body',\n stepId: 'welcome',\n order: 0,\n title: _t('app.public.tour.welcome.welcome.title'),\n content: _t('app.public.tour.welcome.welcome.content'),\n placement: 'bottom',\n orphan: true\n });\n uitour.createStep({\n selector: '.nav-primary li.home-link',\n stepId: 'home',\n order: 1,\n title: _t('app.public.tour.welcome.home.title'),\n content: _t('app.public.tour.welcome.home.content'),\n placement: 'right'\n });\n uitour.createStep({\n selector: '.nav-primary li.public-calendar-link',\n stepId: 'calendar',\n order: 2,\n title: _t('app.public.tour.welcome.calendar.title'),\n content: _t('app.public.tour.welcome.calendar.content'),\n placement: 'right'\n });\n uitour.createStep({\n selector: '.nav-primary li.reserve-machine-link',\n stepId: 'machines',\n order: 3,\n title: _t('app.public.tour.welcome.machines.title'),\n content: _t('app.public.tour.welcome.machines.content'),\n placement: 'right'\n });\n if ($scope.$root.modules.spaces) {\n uitour.createStep({\n selector: '.nav-primary li.reserve-space-link',\n stepId: 'spaces',\n order: 4,\n title: _t('app.public.tour.welcome.spaces.title'),\n content: _t('app.public.tour.welcome.spaces.content'),\n placement: 'right'\n });\n }\n uitour.createStep({\n selector: '.nav-primary li.reserve-training-link',\n stepId: 'trainings',\n order: 5,\n title: _t('app.public.tour.welcome.trainings.title'),\n content: _t('app.public.tour.welcome.trainings.content'),\n placement: 'right'\n });\n uitour.createStep({\n selector: '.nav-primary li.reserve-event-link',\n stepId: 'events',\n order: 6,\n title: _t('app.public.tour.welcome.events.title'),\n content: _t('app.public.tour.welcome.events.content'),\n placement: 'right'\n });\n uitour.createStep({\n selector: '.nav-primary li.projects-gallery-link',\n stepId: 'projects',\n order: 7,\n title: _t('app.public.tour.welcome.projects.title'),\n content: _t('app.public.tour.welcome.projects.content'),\n placement: 'right'\n });\n uitour.createStep({\n selector: '.nav-primary li.plans-link',\n stepId: 'plans',\n order: 8,\n title: _t('app.public.tour.welcome.plans.title'),\n content: _t('app.public.tour.welcome.plans.content'),\n placement: 'right'\n });\n uitour.createStep({\n selector: '.nav-primary .admin-section',\n stepId: 'admin',\n order: 9,\n title: _t('app.public.tour.welcome.admin.title', { ROLE: _t(`app.public.common.${$scope.currentUser.role}`) }),\n content: _t('app.public.tour.welcome.admin.content'),\n placement: 'right'\n });\n uitour.createStep({\n selector: '.navbar.header li.about-page-link',\n stepId: 'about',\n order: 10,\n title: _t('app.public.tour.welcome.about.title'),\n content: _t('app.public.tour.welcome.about.content'),\n placement: 'bottom',\n popupClass: 'shift-right-40'\n });\n uitour.createStep({\n selector: '.navbar.header li.notification-center-link',\n stepId: 'notifications',\n order: 11,\n title: _t('app.public.tour.welcome.notifications.title'),\n content: _t('app.public.tour.welcome.notifications.content'),\n placement: 'bottom'\n });\n uitour.createStep({\n selector: '.navbar.header li.user-menu-dropdown',\n stepId: 'profile',\n order: 12,\n title: _t('app.public.tour.welcome.profile.title'),\n content: _t('app.public.tour.welcome.profile.content'),\n placement: 'bottom',\n popupClass: 'shift-left-80'\n });\n if ($scope.status.news && settingsPromise.home_blogpost) {\n uitour.createStep({\n selector: 'news',\n stepId: 'news',\n order: 13,\n title: _t('app.public.tour.welcome.news.title'),\n content: _t('app.public.tour.welcome.news.content'),\n placement: 'bottom'\n });\n }\n if ($scope.status.projects) {\n uitour.createStep({\n selector: 'projects',\n stepId: 'last_projects',\n order: 14,\n title: _t('app.public.tour.welcome.last_projects.title'),\n content: _t('app.public.tour.welcome.last_projects.content'),\n placement: 'right'\n });\n }\n if ($scope.status.twitter) {\n uitour.createStep({\n selector: 'twitter',\n stepId: 'last_tweet',\n order: 15,\n title: _t('app.public.tour.welcome.last_tweet.title'),\n content: _t('app.public.tour.welcome.last_tweet.content'),\n placement: 'left'\n });\n }\n if ($scope.status.members) {\n uitour.createStep({\n selector: 'members',\n stepId: 'last_members',\n order: 16,\n title: _t('app.public.tour.welcome.last_members.title'),\n content: _t('app.public.tour.welcome.last_members.content'),\n placement: 'left'\n });\n }\n if ($scope.status.events) {\n uitour.createStep({\n selector: 'events',\n stepId: 'next_events',\n order: 17,\n title: _t('app.public.tour.welcome.next_events.title'),\n content: _t('app.public.tour.welcome.next_events.content'),\n placement: 'top'\n });\n }\n uitour.createStep({\n selector: 'body',\n stepId: 'customize',\n order: 18,\n title: _t('app.public.tour.welcome.customize.title'),\n content: _t('app.public.tour.welcome.customize.content'),\n placement: 'bottom',\n orphan: 'true'\n });\n if (AuthService.isAuthorized('admin')) {\n uitour.createStep({\n selector: '.app-generator .app-version',\n stepId: 'version',\n order: 19,\n title: _t('app.public.tour.welcome.version.title'),\n content: _t('app.public.tour.welcome.version.content'),\n placement: 'top'\n });\n }\n uitour.createStep({\n selector: 'body',\n stepId: 'conclusion',\n order: 20,\n title: _t('app.public.tour.conclusion.title'),\n content: _t('app.public.tour.conclusion.content'),\n placement: 'bottom',\n orphan: true\n });\n // on tour end, save the status in database\n uitour.on('ended', function () {\n if (uitour.getStatus() === uitour.Status.ON && $scope.currentUser.profile_attributes.tours.indexOf('welcome') < 0) {\n Member.completeTour({ id: $scope.currentUser.id }, { tour: 'welcome' }, function (res) {\n $scope.currentUser.profile_attributes.tours = res.tours;\n });\n }\n });\n // if the user has never seen the tour, show him now\n if (settingsPromise.feature_tour_display !== 'manual' && $scope.currentUser.profile_attributes.tours.indexOf('welcome') < 0) {\n uitour.start();\n }\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n","/* eslint-disable\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\n/**\n * Navigation controller. List the links availables in the left navigation pane and their icon.\n */\nApplication.Controllers.controller('MainNavController', ['$scope', 'settingsPromise', function ($scope, settingsPromise) {\n /**\n * Returns the current state of the public registration setting (allowed/blocked).\n */\n $scope.registrationEnabled = function () {\n return settingsPromise.public_registrations === 'true';\n };\n\n /**\n * Check if the store should be hidden to members/visitors\n */\n $scope.storeHidden = function () {\n return settingsPromise.store_hidden === 'true';\n };\n\n // Common links (public application)\n $scope.navLinks = [\n {\n state: 'app.public.home',\n linkText: 'app.public.common.home',\n linkIcon: 'home',\n class: 'home-link'\n },\n { class: 'menu-spacer' },\n $scope.$root.modules.publicAgenda && {\n state: 'app.public.calendar',\n linkText: 'app.public.common.public_calendar',\n linkIcon: 'calendar',\n class: 'public-calendar-link'\n },\n $scope.$root.modules.machines && {\n state: 'app.public.machines_list',\n linkText: 'app.public.common.reserve_a_machine',\n linkIcon: 'cogs',\n class: 'reserve-machine-link'\n },\n $scope.$root.modules.trainings && {\n state: 'app.public.trainings_list',\n linkText: 'app.public.common.trainings_registrations',\n linkIcon: 'graduation-cap',\n class: 'reserve-training-link'\n },\n $scope.$root.modules.spaces && {\n state: 'app.public.spaces_list',\n linkText: 'app.public.common.reserve_a_space',\n linkIcon: 'rocket',\n class: 'reserve-space-link'\n },\n {\n state: 'app.public.events_list',\n linkText: 'app.public.common.events_registrations',\n linkIcon: 'tags',\n class: 'reserve-event-link'\n },\n $scope.$root.modules.store && {\n state: 'app.public.store',\n linkText: 'app.public.common.fablab_store',\n linkIcon: 'cart-plus',\n class: 'store-link',\n authorizedRoles: $scope.storeHidden() ? ['admin', 'manager'] : undefined\n },\n { class: 'menu-spacer' },\n {\n state: 'app.public.projects_list',\n linkText: 'app.public.common.projects_gallery',\n linkIcon: 'th',\n class: 'projects-gallery-link'\n },\n $scope.$root.modules.plans && { class: 'menu-spacer' },\n $scope.$root.modules.plans && {\n state: 'app.public.plans',\n linkText: 'app.public.common.subscriptions',\n linkIcon: 'credit-card',\n class: 'plans-link'\n }\n ].filter(Boolean);\n\n Fablab.adminNavLinks = Fablab.adminNavLinks || [];\n $scope.adminNavLinks = [\n {\n state: 'app.admin.calendar',\n linkText: 'app.public.common.manage_the_calendar',\n linkIcon: 'calendar',\n authorizedRoles: ['admin', 'manager']\n },\n $scope.$root.modules.machines && {\n state: 'app.public.machines_list',\n linkText: 'app.public.common.manage_the_machines',\n linkIcon: 'cogs',\n authorizedRoles: ['admin', 'manager']\n },\n $scope.$root.modules.trainings && {\n state: 'app.admin.trainings',\n linkText: 'app.public.common.trainings_monitoring',\n linkIcon: 'graduation-cap',\n authorizedRoles: ['admin', 'manager']\n },\n $scope.$root.modules.spaces && {\n state: 'app.public.spaces_list',\n linkText: 'app.public.common.manage_the_spaces',\n linkIcon: 'rocket'\n },\n {\n state: 'app.admin.events',\n linkText: 'app.public.common.manage_the_events',\n linkIcon: 'tags',\n authorizedRoles: ['admin', 'manager']\n },\n $scope.$root.modules.store && {\n state: 'app.admin.store.products',\n linkText: 'app.public.common.manage_the_store',\n linkIcon: 'cart-plus',\n authorizedRoles: ['admin', 'manager']\n },\n { class: 'menu-spacer' },\n {\n state: 'app.admin.members',\n linkText: 'app.public.common.manage_the_users',\n linkIcon: 'users',\n authorizedRoles: ['admin', 'manager']\n },\n {\n state: 'app.admin.pricing',\n linkText: 'app.public.common.subscriptions_and_prices',\n linkIcon: 'money',\n authorizedRoles: ['admin']\n },\n {\n state: 'app.admin.invoices',\n linkText: 'app.public.common.manage_the_invoices',\n linkIcon: 'file-pdf-o',\n authorizedRoles: ['admin', 'manager']\n },\n $scope.$root.modules.statistics && {\n state: 'app.admin.statistics',\n linkText: 'app.public.common.statistics',\n linkIcon: 'bar-chart-o',\n authorizedRoles: ['admin']\n },\n {\n class: 'menu-spacer',\n authorizedRoles: ['admin']\n },\n {\n state: 'app.admin.settings',\n linkText: 'app.public.common.customization',\n linkIcon: 'gear',\n authorizedRoles: ['admin']\n },\n {\n state: 'app.admin.projects',\n linkText: 'app.public.common.projects',\n linkIcon: 'tasks',\n authorizedRoles: ['admin']\n },\n {\n state: 'app.admin.open_api_clients',\n linkText: 'app.public.common.open_api_clients',\n linkIcon: 'cloud',\n authorizedRoles: ['admin']\n }\n ].filter(Boolean).concat(Fablab.adminNavLinks);\n}\n]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\n/**\n * Controller used in the members listing page\n */\nApplication.Controllers.controller('MembersController', ['$scope', 'Member', 'membersPromise', function ($scope, Member, membersPromise) {\n /* PRIVATE STATIC CONSTANTS */\n\n // number of invoices loaded each time we click on 'load more...'\n const MEMBERS_PER_PAGE = 10;\n\n /* PUBLIC SCOPE */\n\n // currently displayed page of members\n $scope.page = 1;\n\n // members list\n $scope.members = membersPromise;\n\n // true when all members are loaded\n $scope.noMoreResults = false;\n\n /**\n * Callback for the 'load more' button.\n * Will load the next results of the current search, if any\n */\n $scope.showNextMembers = function () {\n $scope.page += 1;\n return Member.query({\n requested_attributes: '[profile]',\n page: $scope.page,\n size: MEMBERS_PER_PAGE\n }, function (members) {\n $scope.members = $scope.members.concat(members);\n\n if (!members[0] || (members[0].maxMembers <= $scope.members.length)) {\n return $scope.noMoreResults = true;\n }\n });\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n if (!membersPromise[0] || (membersPromise[0].maxMembers <= $scope.members.length)) {\n return $scope.noMoreResults = true;\n }\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n}\n\n]);\n\n/**\n * Controller used when editing the current user's profile (in dashboard)\n */\nApplication.Controllers.controller('EditProfileController', ['$scope', '$rootScope', '$state', '$window', '$sce', '$cookies', '$injector', 'Member', 'Auth', 'Session', 'activeProviderPromise', 'settingsPromise', 'growl', 'dialogs', 'CSRF', 'memberPromise', 'groups', '_t', 'proofOfIdentityTypesPromise', 'ProofOfIdentityType',\n function ($scope, $rootScope, $state, $window, $sce, $cookies, $injector, Member, Auth, Session, activeProviderPromise, settingsPromise, growl, dialogs, CSRF, memberPromise, groups, _t, proofOfIdentityTypesPromise, ProofOfIdentityType) {\n /* PUBLIC SCOPE */\n\n // API URL where the form will be posted\n $scope.actionUrl = `/api/members/${$scope.currentUser.id}`;\n\n // list of groups\n $scope.groups = groups.filter(g => !g.disabled);\n\n // Form action on the above URL\n $scope.method = 'patch';\n\n // Current user's profile\n $scope.user = cleanUser(memberPromise);\n\n // default : do not show the group changing form\n $scope.group =\n { change: false };\n\n // group ID of the current/selected user\n $scope.userGroup = memberPromise.group_id;\n\n // active authentication provider parameters\n $scope.activeProvider = activeProviderPromise;\n\n // allow the user to change his password except if he connect from an SSO\n $scope.preventPassword = false;\n\n // get the status of cookies acceptance\n $scope.cookiesStatus = $cookies.get('fab-manager-cookies-consent');\n\n // mapping of fields to disable\n $scope.preventField = {};\n\n // Should the passord be modified?\n $scope.password = { change: false };\n\n // is the phone number required in _member_form?\n $scope.phoneRequired = (settingsPromise.phone_required === 'true');\n\n // is the address required in _member_form?\n $scope.addressRequired = (settingsPromise.address_required === 'true');\n\n // Angular-Bootstrap datepicker configuration for birthday\n $scope.datePicker = {\n format: Fablab.uibDateFormat,\n opened: false, // default: datePicker is not shown\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n // This boolean value will tell if the current user is the system admin\n $scope.isAdminSys = memberPromise.id === Fablab.adminSysId;\n\n $scope.hasProofOfIdentityTypes = proofOfIdentityTypesPromise.length > 0;\n\n /**\n * Return the group object, identified by the ID set in $scope.userGroup\n */\n $scope.getUserGroup = function () {\n for (const group of Array.from($scope.groups)) {\n if (group.id === $scope.userGroup) {\n return group;\n }\n }\n };\n\n /**\n * Callback triggered when the user has successfully changed his group\n */\n $scope.onGroupUpdateSuccess = function (message, user) {\n growl.success(message);\n setTimeout(() => {\n $scope.user = _.cloneDeep(user);\n $scope.$apply();\n }, 50);\n $rootScope.currentUser.group_id = user.group_id;\n Auth._currentUser.group_id = user.group_id;\n ProofOfIdentityType.query({ group_id: user.group_id }, function (proofOfIdentityTypes) {\n $scope.hasProofOfIdentityTypes = proofOfIdentityTypes.length > 0;\n });\n };\n\n /**\n * Check if it is allowed the change the group of the current user\n */\n $scope.isAllowedChangingGroup = function () {\n return !$scope.user.subscribed_plan?.name;\n };\n\n /**\n * Callback to diplay the datepicker as a dropdown when clicking on the input field\n * @param $event {Object} jQuery event object\n */\n $scope.openDatePicker = function ($event) {\n $event.preventDefault();\n $event.stopPropagation();\n return $scope.datePicker.opened = true;\n };\n\n /**\n * For use with ngUpload (https://github.com/twilson63/ngUpload).\n * Intended to be the callback when the upload is done: any raised error will be stacked in the\n * $scope.alerts array. If everything goes fine, the user's profile is updated and the user is\n * redirected to the home page\n * @param content {Object} JSON - The upload's result\n */\n $scope.submited = function (content) {\n if ((content.id == null)) {\n $scope.alerts = [];\n return angular.forEach(content, (v, k) =>\n angular.forEach(v, err =>\n $scope.alerts.push({\n msg: k + ': ' + err,\n type: 'danger'\n })\n )\n );\n } else {\n $scope.currentUser.profile_attributes.user_avatar_attributes = content.profile_attributes.user_avatar_attributes;\n Auth._currentUser.profile_attributes.user_avatar_attributes = content.profile_attributes.user_avatar_attributes;\n $scope.currentUser.name = content.name;\n Auth._currentUser.name = content.name;\n $scope.currentUser = content;\n Auth._currentUser = content;\n $rootScope.currentUser = content;\n return $state.go('app.public.home');\n }\n };\n\n /**\n * Ask for confirmation then delete the current user's account\n * @param user {Object} the current user (to delete)\n */\n $scope.deleteUser = user =>\n dialogs.confirm({\n resolve: {\n object () {\n return {\n title: _t('app.logged.dashboard.settings.confirmation_required'),\n msg: $sce.trustAsHtml(\n _t('app.logged.dashboard.settings.confirm_delete_your_account') + '
    ' +\n '' + _t('app.logged.dashboard.settings.all_data_will_be_lost') + '

    ' +\n _t('app.logged.dashboard.settings.invoicing_data_kept') + '
    ' +\n _t('app.logged.dashboard.settings.statistic_data_anonymized') + '
    ' +\n _t('app.logged.dashboard.settings.no_further_access_to_projects')\n )\n };\n }\n }\n }\n , () => // cancel confirmed\n Member.remove({ id: user.id }, () =>\n Auth.logout().then(function () {\n $state.go('app.public.home');\n return growl.success(_t('app.logged.dashboard.settings.your_user_account_has_been_successfully_deleted_goodbye'));\n })\n\n , function (error) {\n console.log(error);\n return growl.error(_t('app.logged.dashboard.settings.an_error_occured_preventing_your_account_from_being_deleted'));\n })\n );\n\n /**\n * For use with 'ng-class', returns the CSS class name for the uploads previews.\n * The preview may show a placeholder or the content of the file depending on the upload state.\n * @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules)\n */\n $scope.fileinputClass = function (v) {\n if (v) {\n return 'fileinput-exists';\n } else {\n return 'fileinput-new';\n }\n };\n\n /**\n * Check if the of the properties editable by the user are linked to the SSO\n * @return {boolean} true if some editable fields are mapped with the SSO, false otherwise\n */\n $scope.hasSsoFields = () =>\n // if check if keys > 1 because there's a minimum of 1 mapping (id <-> provider-uid)\n // so the user may want to edit his profile on the SSO if at least 2 mappings exists\n Object.keys($scope.preventField).length > 1;\n\n /**\n * Disconnect and re-connect the user to the SSO to force the synchronisation of the profile's data\n */\n $scope.syncProfile = () =>\n Auth.logout().then(function (oldUser) {\n Session.destroy();\n $rootScope.currentUser = null;\n $rootScope.toCheckNotifications = false;\n $scope.notifications = {\n total: 0,\n unread: 0\n };\n return $window.location.href = $scope.activeProvider.link_to_sso_connect;\n });\n\n /**\n * Destroy the cookie used to save the user's preference, this will trigger the choice popup again\n */\n $scope.resetCookies = function () {\n $cookies.remove('fab-manager-cookies-consent');\n $scope.cookiesStatus = undefined;\n $injector.get('$state').reload();\n };\n\n /**\n * Callback triggered when an error is raised on a lower-level component\n * @param message {string}\n */\n $scope.onError = function (message) {\n growl.error(message);\n };\n\n /**\n * Callback triggered when the user was successfully updated\n * @param user {object} the updated user\n */\n $scope.onSuccess = function (user) {\n $scope.currentUser = _.cloneDeep(user);\n Auth._currentUser = _.cloneDeep(user);\n $rootScope.currentUser = _.cloneDeep(user);\n growl.success(_t('app.logged.dashboard.settings.your_profile_has_been_successfully_updated'));\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n CSRF.setMetaTags();\n\n if ($scope.activeProvider.providable_type !== 'DatabaseProvider') {\n $scope.preventPassword = true;\n }\n\n // bind fields protection with sso fields\n return angular.forEach(activeProviderPromise.mapping, map => $scope.preventField[map] = true);\n };\n\n // prepare the user for the react-hook-form\n function cleanUser (user) {\n delete user.$promise;\n delete user.$resolved;\n return user;\n }\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n\n/**\n * Controller used on the public user's profile page (seeing another user's profile)\n */\nApplication.Controllers.controller('ShowProfileController', ['$scope', 'memberPromise', 'SocialNetworks', function ($scope, memberPromise, SocialNetworks) {\n // Selected user's information\n $scope.user = memberPromise; // DEPENDENCY WITH NAVINUM GAMIFICATION PLUGIN !!!!\n\n // List of social networks associated with this user and toggle 'show all' state\n $scope.social = {\n showAllLinks: false,\n networks: SocialNetworks\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = () => $scope.social.networks = filterNetworks();\n\n /**\n * Filter social network or website that are associated with the profile of the user provided in promise\n * and return the filtered networks\n * @return {Array}\n */\n const filterNetworks = function () {\n const networks = [];\n for (const network of Array.from(SocialNetworks)) {\n if ($scope.user.profile_attributes[network] && ($scope.user.profile_attributes[network].length > 0)) {\n networks.push(network);\n }\n }\n return networks;\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n}\n\n]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n no-unused-vars,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\n/**\n * Controller used in notifications page\n * inherits $scope.$parent.notifications (global notifications state) from ApplicationController\n */\nApplication.Controllers.controller('NotificationsController', ['$scope', 'Notification', function ($scope, Notification) {\n /* PUBLIC SCOPE */\n\n // Array containg the archived notifications (already read)\n $scope.notificationsRead = [];\n\n // Array containg the new notifications (not read)\n $scope.notificationsUnread = [];\n\n // Total number of notifications for the current user\n $scope.total = 0;\n\n // Total number of unread notifications for the current user\n $scope.totalUnread = 0;\n\n // By default, the pagination mode is activated to limit the page size\n $scope.paginateActive = true;\n\n // The currently displayed page number\n $scope.page = 1;\n\n /**\n * Mark the provided notification as read, updating its status on the server and moving it\n * to the already read notifications list.\n * @param notification {{id:number}} the notification to mark as read\n * @param e {Object} see https://docs.angularjs.org/guide/expression#-event-\n */\n $scope.markAsRead = function (notification, e) {\n e.preventDefault();\n return Notification.update({ id: notification.id }, {\n id: notification.id,\n is_read: true\n }\n , function (updatedNotif) {\n // remove notif from unreads\n const index = $scope.notificationsUnread.indexOf(notification);\n $scope.notificationsUnread.splice(index, 1);\n // add update notif to read\n $scope.notificationsRead.push(updatedNotif);\n // update counters\n $scope.$parent.notifications.unread -= 1;\n return $scope.totalUnread -= 1;\n });\n };\n\n /**\n * Mark every unread notifications as read and move them for the unread list to to read array.\n */\n $scope.markAllAsRead = () =>\n Notification.update({}\n , function () { // success\n // add notifs to read\n angular.forEach($scope.notificationsUnread, function (n) {\n n.is_read = true;\n return $scope.notificationsRead.push(n);\n });\n // clear unread\n $scope.notificationsUnread = [];\n // update counters\n $scope.$parent.notifications.unread = 0;\n return $scope.totalUnread = 0;\n });\n\n /**\n * Request the server to retrieve the next notifications and add them\n * to their corresponding notifications list (read or unread).\n */\n $scope.addMoreNotifications = function () {\n Notification.query({ page: $scope.page }, function (notifications) {\n $scope.total = notifications.totals.total;\n $scope.totalUnread = notifications.totals.unread;\n angular.forEach(notifications.notifications, function (notif) {\n if (notif.is_read) {\n return $scope.notificationsRead.push(notif);\n } else {\n return $scope.notificationsUnread.push(notif);\n }\n });\n return $scope.paginateActive = (notifications.totals.total > ($scope.notificationsRead.length + $scope.notificationsUnread.length));\n });\n\n return $scope.page += 1;\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = () => $scope.addMoreNotifications();\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n}\n]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n'use strict';\n\nApplication.Controllers.controller('ShowOrdersController', ['$rootScope', '$scope', 'CSRF', 'growl', '$state', '$transition$',\n function ($rootScope, $scope, CSRF, growl, $state, $transition$) {\n /* PRIVATE SCOPE */\n\n /* PUBLIC SCOPE */\n $scope.orderId = $transition$.params().id;\n\n /**\n * Callback triggered in case of error\n */\n $scope.onError = (message) => {\n growl.error(message);\n };\n\n /**\n * Callback triggered in case of success\n */\n $scope.onSuccess = (message) => {\n growl.success(message);\n };\n\n /**\n * Click Callback triggered in case of back orders list\n */\n $scope.backOrdersList = () => {\n $state.go('app.logged.dashboard.orders');\n };\n\n // currently logged-in user\n $scope.currentUser = $rootScope.currentUser;\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n // set the authenticity tokens in the forms\n CSRF.setMetaTags();\n };\n\n // init the controller (call at the end !)\n return initialize();\n }\n\n]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\nApplication.Controllers.controller('PlansIndexController', ['$scope', '$rootScope', '$state', '$uibModal', 'Auth', 'AuthService', 'dialogs', 'growl', 'Subscription', 'Member', 'subscriptionExplicationsPromise', '_t', 'Wallet', 'helpers', 'settingsPromise', 'Price',\n function ($scope, $rootScope, $state, $uibModal, Auth, AuthService, dialogs, growl, Subscription, Member, subscriptionExplicationsPromise, _t, Wallet, helpers, settingsPromise, Price) {\n /* PUBLIC SCOPE */\n\n // user to deal with\n $scope.ctrl = {\n member: null,\n member_id: null\n };\n\n // already subscribed plan of the current user\n $scope.paid =\n { plan: null };\n\n // plan to subscribe (shopping cart)\n $scope.selectedPlan = null;\n\n // the moment when the plan selection changed for the last time, used to trigger changes in the cart\n $scope.planSelectionTime = null;\n\n // the application global settings\n $scope.settings = settingsPromise;\n\n // Global config: is the user validation required ?\n $scope.enableUserValidationRequired = settingsPromise.user_validation_required === 'true';\n\n // Discount coupon to apply to the basket, if any\n $scope.coupon =\n { applied: null };\n\n // text that appears in the bottom-right box of the page (subscriptions rules details)\n $scope.subscriptionExplicationsAlert = subscriptionExplicationsPromise.setting.value;\n\n /**\n * Callback to deal with the subscription of the user selected in the dropdown list instead of the current user's\n * subscription. (admins and managers only)\n */\n $scope.updateMember = function () {\n $scope.selectedPlan = null;\n $scope.paid.plan = null;\n Member.get({ id: $scope.ctrl.member.id }, function (member) {\n $scope.ctrl.member = member;\n });\n };\n\n /**\n * Add the provided plan to the shopping basket\n * @param plan {Object} The plan to subscribe to\n */\n $scope.selectPlan = function (plan) {\n setTimeout(() => {\n if ($scope.isAuthenticated()) {\n if (!AuthService.isAuthorized(['admin', 'manager']) && (helpers.isUserValidationRequired($scope.settings, 'subscription') && !helpers.isUserValidated($scope.ctrl.member))) {\n return;\n }\n if ($scope.selectedPlan !== plan) {\n $scope.selectedPlan = plan;\n $scope.planSelectionTime = new Date();\n }\n } else {\n $scope.login();\n }\n $scope.$apply();\n }, 50);\n };\n\n $scope.canSelectPlan = function () {\n return helpers.isUserValidatedByType($scope.ctrl.member, $scope.settings, 'subscription');\n };\n\n /**\n * Open the modal dialog allowing the user to log into the system\n */\n $scope.userLogin = function () {\n setTimeout(() => {\n if (!$scope.isAuthenticated()) {\n $scope.login();\n $scope.$apply();\n }\n }, 50);\n };\n\n /**\n * Callback triggered when an error is raised on a lower-level component\n * @param message {string}\n */\n $scope.onError = function (message) {\n growl.error(message);\n };\n\n /**\n * Test if the provided date is in the future\n * @param dateTime {Date}\n * @return {boolean}\n */\n $scope.isInFuture = function (dateTime) {\n return (moment().diff(moment(dateTime)) < 0);\n };\n\n /**\n * To use as callback in Array.prototype.filter to get only enabled plans\n */\n $scope.filterDisabledPlans = function (plan) { return !plan.disabled; };\n\n /**\n * Once the subscription has been confirmed (payment process successfully completed), mark the plan as subscribed,\n * and update the user's subscription\n */\n $scope.afterPayment = function () {\n $scope.ctrl.member.subscribed_plan = angular.copy($scope.selectedPlan);\n if ($scope.ctrl.member.id === Auth._currentUser.id) {\n Auth._currentUser.subscribed_plan = angular.copy($scope.selectedPlan);\n }\n $scope.paid.plan = angular.copy($scope.selectedPlan);\n $scope.selectedPlan = null;\n $scope.coupon.applied = null;\n };\n\n /**\n * Callback triggered when the user has successfully changed his group\n */\n $scope.onGroupUpdateSuccess = function (message, user) {\n growl.success(message);\n setTimeout(() => {\n $scope.ctrl.member = _.cloneDeep(user);\n $scope.$apply();\n }, 50);\n if (AuthService.isAuthorized('member') ||\n (AuthService.isAuthorized('manager') && $scope.currentUser.id !== $scope.ctrl.member.id)) {\n $rootScope.currentUser.group_id = user.group_id;\n Auth._currentUser.group_id = user.group_id;\n }\n };\n\n /**\n * Check if it is allowed the change the group of the selected user\n */\n $scope.isAllowedChangingGroup = function () {\n return $scope.ctrl.member && !$scope.selectedPlan && !$scope.paid.plan;\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n if ($scope.currentUser) {\n if (!AuthService.isAuthorized('admin')) {\n $scope.ctrl.member = $scope.currentUser;\n $scope.paid.plan = $scope.currentUser.subscribed_plan;\n }\n }\n\n $scope.$on('devise:new-session', function (event, user) { if (user.role !== 'admin') { $scope.ctrl.member = user; } });\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n","'use strict';\n\nApplication.Controllers.controller('PrivacyController', ['$scope', 'Setting', function ($scope, Setting) {\n /* PUBLIC SCOPE */\n\n Setting.get({ name: 'privacy_body' }, data => { $scope.privacyBody = data.setting; });\n\n Setting.get({ name: 'privacy_dpo' }, data => { $scope.privacyDpo = data.setting; });\n}\n]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n'use strict';\n\nApplication.Controllers.controller('ShowProductController', ['$scope', 'CSRF', 'growl', '$transition$', '$state',\n function ($scope, CSRF, growl, $transition$, $state) {\n /* PRIVATE SCOPE */\n\n /* PUBLIC SCOPE */\n $scope.productSlug = $transition$.params().slug;\n\n /**\n * Overlap global function to allow the user to navigate to the previous screen\n * If no previous $state were recorded, navigate to the project list page\n */\n $scope.backPrevLocation = function (event) {\n event.preventDefault();\n event.stopPropagation();\n if ($state.prevState === '') {\n $state.prevState = 'app.public.store';\n }\n window.history.back();\n };\n\n /**\n * Callback triggered in case of error\n */\n $scope.onError = (message) => {\n growl.error(message);\n };\n\n /**\n * Callback triggered in case of success\n */\n $scope.onSuccess = (message) => {\n growl.success(message);\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n // set the authenticity tokens in the forms\n CSRF.setMetaTags();\n };\n\n // init the controller (call at the end !)\n return initialize();\n }\n\n]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n\n'use strict';\n\nApplication.Controllers.controller('CompleteProfileController', ['$scope', '$rootScope', '$state', '$window', '_t', 'growl', 'CSRF', 'Auth', 'Member', 'settingsPromise', 'activeProviderPromise', 'groupsPromise', 'cguFile', 'memberPromise', 'Session', 'dialogs', 'AuthProvider',\n function ($scope, $rootScope, $state, $window, _t, growl, CSRF, Auth, Member, settingsPromise, activeProviderPromise, groupsPromise, cguFile, memberPromise, Session, dialogs, AuthProvider) {\n /* PUBLIC SCOPE */\n\n // API URL where the form will be posted\n $scope.actionUrl = `/api/members/${memberPromise.id}`;\n\n // Form action on the above URL\n $scope.method = 'patch';\n\n // genre of the application name (eg. \"_le_ Fablab\" or \"_la_ Fabrique\")\n $scope.nameGenre = settingsPromise.name_genre;\n\n // name of the current fablab application (eg. \"Fablab de la Casemate\")\n $scope.fablabName = settingsPromise.fablab_name;\n\n // information from the current SSO provider\n $scope.activeProvider = activeProviderPromise;\n\n // list of user's groups (student/standard/...)\n $scope.groups = groupsPromise;\n\n // current user, contains information retrieved from the SSO\n $scope.user = cleanUser(memberPromise);\n\n // disallow the user to change his password as he connect from SSO\n $scope.preventPassword = true;\n\n // mapping of fields to disable\n $scope.preventField = {};\n\n // CGU\n $scope.cgu = cguFile.custom_asset;\n\n // is the phone number required in _member_form?\n $scope.phoneRequired = (settingsPromise.phone_required === 'true');\n\n // is the address required in _member_form?\n $scope.addressRequired = (settingsPromise.address_required === 'true');\n\n // Angular-Bootstrap datepicker configuration for birthday\n $scope.datePicker = {\n format: Fablab.uibDateFormat,\n opened: false, // default: datePicker is not shown\n options: {\n startingDay: Fablab.weekStartingDay\n }\n };\n\n /**\n * Callback to diplay the datepicker as a dropdown when clicking on the input field\n * @param $event {Object} jQuery event object\n */\n $scope.openDatePicker = function ($event) {\n $event.preventDefault();\n $event.stopPropagation();\n return $scope.datePicker.opened = true;\n };\n\n /**\n * For use with ngUpload (https://github.com/twilson63/ngUpload).\n * Intended to be the callback when the upload is done: any raised error will be stacked in the\n * $scope.alerts array. If everything goes fine, the user's profile is updated and the user is\n * redirected to the home page\n * @param content {Object} JSON - The upload's result\n */\n $scope.submited = function (content) {\n if ((content.id == null)) {\n $scope.alerts = [];\n angular.forEach(content, function (v, k) {\n angular.forEach(v, function (err) {\n $scope.alerts.push({\n msg: k + ': ' + err,\n type: 'danger'\n });\n });\n });\n } else {\n $scope.user.profile_attributes.user_avatar_attributes = content.profile_attributes.user_avatar_attributes;\n Auth._currentUser.profile_attributes.user_avatar_attributes = content.profile_attributes.user_avatar_attributes;\n $scope.user.name = content.name;\n Auth._currentUser.name = content.name;\n $scope.user = content;\n Auth._currentUser = content;\n $rootScope.currentUser = content;\n return $state.go('app.public.home');\n }\n };\n\n /**\n * For use with 'ng-class', returns the CSS class name for the uploads previews.\n * The preview may show a placeholder or the content of the file depending on the upload state.\n * @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules)\n */\n $scope.fileinputClass = function (v) {\n if (v) {\n return 'fileinput-exists';\n } else {\n return 'fileinput-new';\n }\n };\n\n /**\n * Merge the current user into the account with the given auth_token\n */\n $scope.registerAuthToken = function () {\n Member.merge({ id: $rootScope.currentUser.id }, { user: { auth_token: $scope.user.auth_token } }, function (user) {\n $scope.user = user;\n Auth._currentUser = user;\n $rootScope.currentUser = user;\n $state.go('app.public.home');\n }\n , function (err) {\n if (err.data.error) {\n growl.error(err.data.error);\n } else {\n growl.error(_t('app.logged.profile_completion.an_unexpected_error_occurred_check_your_authentication_code'));\n console.error(err);\n }\n });\n };\n\n /**\n * Return the email given by the SSO provider, parsed if needed\n * @return {String} E-mail of the current user\n */\n $scope.ssoEmail = function () {\n const { email } = memberPromise;\n if (email) {\n const duplicate = email.match(/^<([^>]+)>.{20}-duplicate$/);\n if (duplicate) {\n return duplicate[1];\n }\n }\n return email;\n };\n\n /**\n * Test if the user's mail is marked as duplicate\n * @return {boolean}\n */\n $scope.hasDuplicate = function () {\n const { email } = memberPromise;\n if (email) {\n return !(email.match(/^<([^>]+)>.{20}-duplicate$/) === null);\n }\n };\n\n /**\n * Ask for email confirmation and send the SSO merging token again\n * @param event {Object} jQuery event object\n */\n $scope.resendCode = function (event) {\n event.preventDefault();\n event.stopPropagation();\n dialogs.confirm(\n {\n templateUrl: '/profile/resend_code_modal.html',\n resolve: {\n object () {\n return { email: memberPromise.email };\n }\n }\n },\n function (email) {\n // Request the server to send an auth-migration email to the current user\n AuthProvider.send_code({ email },\n function (res) { growl.info(_t('app.logged.profile_completion.code_successfully_sent_again')); },\n function (err) { growl.error(err.data.error); }\n );\n }\n );\n };\n\n /**\n * Disconnect and re-connect the user to the SSO to force the synchronisation of the profile's data\n */\n $scope.syncProfile = function () {\n Auth.logout().then(function (oldUser) {\n Session.destroy();\n $rootScope.currentUser = null;\n $rootScope.toCheckNotifications = false;\n $scope.notifications = {\n total: 0,\n unread: 0\n };\n $window.location.href = activeProviderPromise.link_to_sso_connect;\n });\n };\n\n /**\n * Hide the new account messages.\n * If hidden, the page will be used only to complete the current user's profile.\n */\n $scope.hideNewAccountConfirmation = function () {\n return !$scope.activeProvider.previous_provider || $scope.activeProvider.previous_provider.id === $scope.activeProvider.id;\n };\n\n /**\n * Callback triggered when an error is raised on a lower-level component\n * @param message {string}\n */\n $scope.onError = function (message) {\n growl.error(message);\n };\n\n /**\n * Callback triggered when the user was successfully updated\n * @param user {object} the updated user\n */\n $scope.onSuccess = function (user) {\n $scope.currentUser = _.cloneDeep(user);\n Auth._currentUser = _.cloneDeep(user);\n $rootScope.currentUser = _.cloneDeep(user);\n growl.success(_t('app.logged.profile_completion.your_profile_has_been_successfully_updated'));\n $state.go('app.public.home');\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n CSRF.setMetaTags();\n\n // init the birth date to JS object\n $scope.user.statistic_profile_attributes.birthday = $scope.user.statistic_profile_attributes.birthday ? moment($scope.user.statistic_profile_attributes.birthday).toDate() : undefined;\n\n // bind fields protection with sso fields\n angular.forEach(activeProviderPromise.mapping, function (map) { $scope.preventField[map] = true; });\n };\n\n // prepare the user for the react-hook-form\n function cleanUser (user) {\n delete user.$promise;\n delete user.$resolved;\n return user;\n }\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n\n]);\n","/* eslint-disable\n handle-callback-err,\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS205: Consider reworking code to avoid use of IIFEs\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\n/* COMMON CODE */\n\n/**\n * Provides a set of common properties and methods to the $scope parameter. They are used\n * in the various projects' admin controllers.\n *\n * Provides :\n * - $scope.summernoteOptsProject\n * - $scope.totalSteps\n * - $scope.machines = [{Machine}]\n * - $scope.components = [{Component}]\n * - $scope.themes = [{Theme}]\n * - $scope.licences = [{Licence}]\n * - $scope.allowedExtensions = [{String}]\n * - $scope.submited(content)\n * - $scope.cancel()\n * - $scope.addFile()\n * - $scope.deleteFile(file)\n * - $scope.addStep()\n * - $scope.deleteStep(step)\n * - $scope.changeStepIndex(step, newIdx)\n *\n * Requires :\n * - $scope.project.project_caos_attributes = []\n * - $scope.project.project_steps_attributes = []\n * - $state (Ui-Router) [ 'app.public.projects_show', 'app.public.projects_list' ]\n */\nclass ProjectsController {\n constructor ($rootScope, $scope, $state, Project, Machine, Member, Component, Theme, Licence, $document, Diacritics, dialogs, allowedExtensions, _t) {\n // remove codeview from summernote editor\n $scope.summernoteOptsProject = angular.copy($rootScope.summernoteOpts);\n $scope.summernoteOptsProject.toolbar[6][1].splice(1, 1);\n\n // Retrieve the list of machines from the server\n Machine.query().$promise.then(function (data) {\n $scope.machines = data.map(function (d) {\n return ({\n id: d.id,\n name: d.name\n });\n });\n });\n\n // Retrieve the list of components from the server\n Component.query().$promise.then(function (data) {\n $scope.components = data.map(function (d) {\n return ({\n id: d.id,\n name: d.name\n });\n });\n });\n\n // Retrieve the list of themes from the server\n Theme.query().$promise.then(function (data) {\n $scope.themes = data.map(function (d) {\n return ({\n id: d.id,\n name: d.name\n });\n });\n });\n\n // Retrieve the list of licences from the server\n Licence.query().$promise.then(function (data) {\n $scope.licences = data.map(function (d) {\n return ({\n id: d.id,\n name: d.name\n });\n });\n });\n\n // Total number of documentation steps for the current project\n $scope.totalSteps = $scope.project.project_steps_attributes.length;\n\n // List of extensions allowed for CAD attachements upload\n $scope.allowedExtensions = allowedExtensions.setting.value.split(' ');\n\n /**\n * For use with ngUpload (https://github.com/twilson63/ngUpload).\n * Intended to be the callback when an upload is done: any raised error will be stacked in the\n * $scope.alerts array. If everything goes fine, the user is redirected to the project page.\n * @param content {Object} JSON - The upload's result\n */\n $scope.submited = function (content) {\n if ((content.id == null)) {\n $scope.alerts = [];\n angular.forEach(content, function (v, k) {\n angular.forEach(v, function (err) {\n $scope.alerts.push({\n msg: k + ': ' + err,\n type: 'danger'\n });\n });\n });\n // using https://github.com/oblador/angular-scroll\n $('section[ui-view=main]').scrollTop(0, 200);\n } else {\n return $state.go('app.public.projects_show', { id: content.slug });\n }\n };\n\n /**\n * For use with 'ng-class', returns the CSS class name for the uploads previews.\n * The preview may show a placeholder or the content of the file depending on the upload state.\n * @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules)\n */\n $scope.fileinputClass = function (v) {\n if (v) {\n return 'fileinput-exists';\n } else {\n return 'fileinput-new';\n }\n };\n\n /**\n * This will create a single new empty entry into the project's CAO attachements list.\n */\n $scope.addFile = function () { $scope.project.project_caos_attributes.push({}); };\n\n /**\n * This will remove the given file from the project's CAO attachements list. If the file was previously uploaded\n * to the server, it will be marked for deletion on the server. Otherwise, it will be simply truncated from\n * the CAO attachements array.\n * @param file {Object} the file to delete\n */\n $scope.deleteFile = function (file) {\n const index = $scope.project.project_caos_attributes.indexOf(file);\n if (file.id != null) {\n return file._destroy = true;\n } else {\n return $scope.project.project_caos_attributes.splice(index, 1);\n }\n };\n\n /**\n * This will create a single new empty entry into the project's steps list.\n */\n $scope.addStep = function () {\n $scope.totalSteps += 1;\n return $scope.project.project_steps_attributes.push({ step_nb: $scope.totalSteps, project_step_images_attributes: [] });\n };\n\n /**\n * This will remove the given step from the project's steps list. If the step was previously saved\n * on the server, it will be marked for deletion for the next saving. Otherwise, it will be simply truncated from\n * the steps array.\n * @param step {Object} the step to delete\n */\n $scope.deleteStep = function (step) {\n dialogs.confirm({\n resolve: {\n object () {\n return {\n title: _t('app.shared.project.confirmation_required'),\n msg: _t('app.shared.project.do_you_really_want_to_delete_this_step')\n };\n }\n }\n }\n , function () { // deletion confirmed\n const index = $scope.project.project_steps_attributes.indexOf(step);\n if (step.id != null) {\n step._destroy = true;\n } else {\n $scope.project.project_steps_attributes.splice(index, 1);\n }\n\n // update the new total number of steps\n $scope.totalSteps -= 1;\n // reindex the remaining steps\n return (function () {\n const result = [];\n for (const s of Array.from($scope.project.project_steps_attributes)) {\n if (s.step_nb > step.step_nb) {\n result.push(s.step_nb -= 1);\n } else {\n result.push(undefined);\n }\n }\n return result;\n })();\n });\n };\n\n /**\n * Change the step_nb property of the given step to the new value provided. The step that was previously at this\n * index will be assigned to the old position of the provided step.\n * @param event {Object} see https://docs.angularjs.org/guide/expression#-event-\n * @param step {Object} the project's step to reindex\n * @param newIdx {number} the new index to assign to the step\n */\n $scope.changeStepIndex = function (event, step, newIdx) {\n if (event) { event.preventDefault(); }\n for (const s of Array.from($scope.project.project_steps_attributes)) {\n if (s.step_nb === newIdx) {\n s.step_nb = step.step_nb;\n step.step_nb = newIdx;\n break;\n }\n }\n return false;\n };\n\n /**\n * This function will query the API to autocomplete the typed user's name\n * @param nameLookup {string}\n */\n $scope.autoCompleteName = function (nameLookup) {\n if (!nameLookup) {\n return;\n }\n const asciiName = Diacritics.remove(nameLookup);\n\n Member.search(\n { query: asciiName },\n function (users) { $scope.matchingMembers = users; },\n function (error) { console.error(error); }\n );\n };\n\n /**\n * This will create a single new empty entry into the project's step image list.\n */\n $scope.addProjectStepImage = function (step) { step.project_step_images_attributes.push({}); };\n\n /**\n * This will remove the given image from the project's step image list.\n * @param step {Object} the project step has images\n * @param image {Object} the image to delete\n */\n $scope.deleteProjectStepImage = function (step, image) {\n const index = step.project_step_images_attributes.indexOf(image);\n if (image.id != null) {\n return image._destroy = true;\n } else {\n return step.project_step_images_attributes.splice(index, 1);\n }\n };\n\n /**\n * Returns the text to display on the save button, depending on the current state of the project\n */\n $scope.saveButtonValue = function () {\n if (!$scope.project.state || $scope.project.state === 'draft') {\n return _t('app.shared.project.save_as_draft');\n }\n return _t('app.shared.buttons.save');\n };\n }\n}\n\n/**\n * Controller used on projects listing page\n */\nApplication.Controllers.controller('ProjectsController', ['$scope', '$state', 'Project', 'machinesPromise', 'themesPromise', 'componentsPromise', 'paginationService', 'OpenlabProject', '$window', 'growl', '_t', '$location', '$timeout', 'settingsPromise', 'openLabActive',\n function ($scope, $state, Project, machinesPromise, themesPromise, componentsPromise, paginationService, OpenlabProject, $window, growl, _t, $location, $timeout, settingsPromise, openLabActive) {\n /* PRIVATE STATIC CONSTANTS */\n\n // Number of projects added to the page when the user clicks on 'load more projects'\n // -- dependency in app/models/project.rb\n const PROJECTS_PER_PAGE = 16;\n\n /* PUBLIC SCOPE */\n\n // Fab-manager's instance ID in the openLab network\n $scope.openlabAppId = settingsPromise.openlab_app_id;\n\n // Is openLab enabled on the instance?\n $scope.openlab = {\n projectsActive: openLabActive.isPresent,\n searchOverWholeNetwork: settingsPromise.openlab_default === 'true'\n };\n\n // default search parameters\n $scope.search = {\n q: ($location.$$search.q || ''),\n from: ($location.$$search.from || undefined),\n machine_id: (parseInt($location.$$search.machine_id) || undefined),\n component_id: (parseInt($location.$$search.component_id) || undefined),\n theme_id: (parseInt($location.$$search.theme_id) || undefined)\n };\n\n // list of projects to display\n $scope.projects = [];\n\n // list of machines / used for filtering\n $scope.machines = machinesPromise;\n\n // list of themes / used for filtering\n $scope.themes = themesPromise;\n\n // list of components / used for filtering\n $scope.components = componentsPromise;\n\n /**\n * Callback triggered when the button \"search from the whole network\" is toggled\n */\n $scope.searchOverWholeNetworkChanged = function () {\n $scope.resetFiltersAndTriggerSearch();\n };\n\n /**\n * Callback to load the next projects of the result set, for the current search\n */\n $scope.loadMore = function () {\n if ($scope.openlab.searchOverWholeNetwork === true) {\n return $scope.projectsPagination.loadMore({ q: $scope.search.q });\n } else {\n return $scope.projectsPagination.loadMore({ search: $scope.search });\n }\n };\n\n /**\n * Reinitialize the search filters (used by the projects from the instance DB) and trigger a new search query\n */\n $scope.resetFiltersAndTriggerSearch = function () {\n $scope.search.q = '';\n $scope.search.from = undefined;\n $scope.search.machine_id = undefined;\n $scope.search.component_id = undefined;\n $scope.search.theme_id = undefined;\n $scope.setUrlQueryParams($scope.search);\n $scope.triggerSearch();\n };\n\n /**\n * Query the list of projects. Depending on $scope.openlab.searchOverWholeNetwork, the resulting list\n * will be fetched from OpenLab or from the instance DB\n */\n $scope.triggerSearch = function () {\n const currentPage = parseInt($location.$$search.page) || 1;\n if ($scope.openlab.searchOverWholeNetwork === true) {\n updateUrlParam('whole_network', 't');\n $scope.projectsPagination = new paginationService.Instance(OpenlabProject, currentPage, PROJECTS_PER_PAGE, null, { }, loadMoreOpenlabCallback);\n OpenlabProject.query({ q: $scope.search.q, page: currentPage, per_page: PROJECTS_PER_PAGE }, function (projectsPromise) {\n if (projectsPromise.errors) {\n growl.error(_t('app.public.projects_list.openlab_search_not_available_at_the_moment'));\n $scope.openlab.searchOverWholeNetwork = false;\n $scope.triggerSearch();\n } else {\n $scope.projectsPagination.totalCount = projectsPromise.meta.total;\n $scope.projects = normalizeProjectsAttrs(projectsPromise.projects);\n }\n });\n } else {\n updateUrlParam('whole_network', 'f');\n $scope.projectsPagination = new paginationService.Instance(Project, currentPage, PROJECTS_PER_PAGE, null, { }, loadMoreCallback, 'search');\n Project.search({ search: $scope.search, page: currentPage, per_page: PROJECTS_PER_PAGE }, function (projectsPromise) {\n $scope.projectsPagination.totalCount = projectsPromise.meta.total;\n $scope.projects = projectsPromise.projects;\n });\n }\n };\n\n /**\n * Callback to switch the user's view to the detailed project page\n * @param project {{slug:string}} The project to display\n */\n $scope.showProject = function (project) {\n if (($scope.openlab.searchOverWholeNetwork === true) && (project.app_id !== Fablab.openlabAppId)) {\n $window.open(project.project_url, '_blank');\n return true;\n } else {\n return $state.go('app.public.projects_show', { id: project.slug });\n }\n };\n\n /**\n * function to set all url query search parameters from search object\n */\n $scope.setUrlQueryParams = function (search) {\n updateUrlParam('page', 1);\n updateUrlParam('q', search.q);\n updateUrlParam('from', search.from);\n updateUrlParam('theme_id', search.theme_id);\n updateUrlParam('component_id', search.component_id);\n updateUrlParam('machine_id', search.machine_id);\n return true;\n };\n\n /**\n * Overlap global function to allow the user to navigate to the previous screen\n * If no previous $state were recorded, navigate to the project list page\n */\n $scope.backPrevLocation = function (event) {\n event.preventDefault();\n event.stopPropagation();\n if ($state.prevState === '' || $state.prevState === 'app.public.projects_list') {\n $state.prevState = 'app.public.home';\n return $state.go($state.prevState, {});\n }\n window.history.back();\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n if ($location.$$search.whole_network === 'f') {\n $scope.openlab.searchOverWholeNetwork = false;\n } else if ($location.$$search.whole_network === undefined) {\n $scope.openlab.searchOverWholeNetwork = $scope.openlab.projectsActive && settingsPromise.openlab_default === 'true';\n } else {\n $scope.openlab.searchOverWholeNetwork = $scope.openlab.projectsActive;\n }\n return $scope.triggerSearch();\n };\n\n /**\n * function to update url query param, little hack to turn off reloadOnSearch and re-enable it after we set the params.\n * params example: 'q' , 'presse-purée'\n */\n const updateUrlParam = function (name, value) {\n $state.current.reloadOnSearch = false;\n $location.search(name, value);\n $timeout(function () { $state.current.reloadOnSearch = undefined; });\n };\n\n /**\n * Callback triggered when the next projects were loaded from the result set (from the instance DB)\n * @param projectsPromise {{projects: []}}\n */\n const loadMoreCallback = function (projectsPromise) {\n $scope.projects = $scope.projects.concat(projectsPromise.projects);\n updateUrlParam('page', $scope.projectsPagination.currentPage);\n };\n\n /**\n * Callback triggered when the next projects were loaded from the result set (from OpenLab)\n * @param projectsPromise {{projects: []}}\n */\n const loadMoreOpenlabCallback = function (projectsPromise) {\n $scope.projects = $scope.projects.concat(normalizeProjectsAttrs(projectsPromise.projects));\n updateUrlParam('page', $scope.projectsPagination.currentPage);\n };\n\n const normalizeProjectsAttrs = function (projects) {\n return projects.map(function (project) {\n project.project_image = project.image_url;\n return project;\n });\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n\n/**\n * Controller used in the project creation page\n */\nApplication.Controllers.controller('NewProjectController', ['$rootScope', '$scope', '$state', 'Project', 'Machine', 'Member', 'Component', 'Theme', 'Licence', '$document', 'CSRF', 'Diacritics', 'dialogs', 'allowedExtensions', '_t',\n function ($rootScope, $scope, $state, Project, Machine, Member, Component, Theme, Licence, $document, CSRF, Diacritics, dialogs, allowedExtensions, _t) {\n CSRF.setMetaTags();\n\n // API URL where the form will be posted\n $scope.actionUrl = '/api/projects/';\n\n // Form action on the above URL\n $scope.method = 'post';\n\n // Default project parameters\n $scope.project = {\n project_steps_attributes: [],\n project_caos_attributes: []\n };\n\n $scope.matchingMembers = [];\n\n /*\n * Overlap global function to allow the user to navigate to the previous screen\n * If no previous $state were recorded, navigate to the project list page\n */\n $scope.backPrevLocation = function (event) {\n event.preventDefault();\n event.stopPropagation();\n if ($state.prevState === '') {\n $state.prevState = 'app.public.projects_list';\n return $state.go($state.prevState, {});\n }\n window.history.back();\n };\n\n // Using the ProjectsController\n return new ProjectsController($rootScope, $scope, $state, Project, Machine, Member, Component, Theme, Licence, $document, Diacritics, dialogs, allowedExtensions, _t);\n }\n]);\n\n/**\n * Controller used in the project edition page\n */\nApplication.Controllers.controller('EditProjectController', ['$rootScope', '$scope', '$state', '$transition$', 'Project', 'Machine', 'Member', 'Component', 'Theme', 'Licence', '$document', 'CSRF', 'projectPromise', 'Diacritics', 'dialogs', 'allowedExtensions', '_t',\n function ($rootScope, $scope, $state, $transition$, Project, Machine, Member, Component, Theme, Licence, $document, CSRF, projectPromise, Diacritics, dialogs, allowedExtensions, _t) {\n /* PUBLIC SCOPE */\n\n // API URL where the form will be posted\n $scope.actionUrl = `/api/projects/${$transition$.params().id}`;\n\n // Form action on the above URL\n $scope.method = 'put';\n\n // Retrieve the project's details, if an error occurred, redirect the user to the projects list page\n $scope.project = projectPromise;\n\n $scope.matchingMembers = $scope.project.project_users.map(function (u) {\n return ({\n id: u.id,\n name: u.full_name\n });\n });\n\n /**\n * Overlap global function to allow the user to navigate to the previous screen\n * If no previous $state were recorded, navigate to the project show page\n */\n $scope.backPrevLocation = function (event) {\n event.preventDefault();\n event.stopPropagation();\n if ($state.prevState === '') {\n $state.prevState = 'app.public.projects_show';\n }\n $state.go($state.prevState, { id: $transition$.params().id });\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n CSRF.setMetaTags();\n\n if ($scope.project.author_id !== $rootScope.currentUser.id && $scope.project.user_ids.indexOf($rootScope.currentUser.id) === -1 && $scope.currentUser.role !== 'admin') {\n $state.go('app.public.projects_show', { id: $scope.project.slug });\n console.error('[EditProjectController::initialize] user is not allowed');\n }\n\n // Using the ProjectsController\n return new ProjectsController($rootScope, $scope, $state, Project, Machine, Member, Component, Theme, Licence, $document, Diacritics, dialogs, allowedExtensions, _t);\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n\n/**\n * Controller used in the public project's details page\n */\nApplication.Controllers.controller('ShowProjectController', ['$scope', '$state', 'projectPromise', 'shortnamePromise', '$location', '$uibModal', 'dialogs', '_t',\n function ($scope, $state, projectPromise, shortnamePromise, $location, $uibModal, dialogs, _t) {\n /* PUBLIC SCOPE */\n\n // Store the project's details\n $scope.project = projectPromise;\n $scope.projectUrl = $location.absUrl();\n $scope.disqusShortname = shortnamePromise.setting.value;\n\n /**\n * Test if the provided user has the edition rights on the current project\n * @param [user] {{id:number}} (optional) the user to check rights\n * @returns boolean\n */\n $scope.projectEditableBy = function (user) {\n if ((user == null)) { return false; }\n if ($scope.project.author_id === user.id) { return true; }\n let canEdit = false;\n angular.forEach($scope.project.project_users, function (u) {\n if ((u.id === user.id) && u.is_valid) { return canEdit = true; }\n });\n return canEdit;\n };\n\n /**\n * Test if the provided user has the deletion rights on the current project\n * @param [user] {{id:number}} (optional) the user to check rights\n * @returns boolean\n */\n $scope.projectDeletableBy = function (user) {\n if ((user == null)) { return false; }\n if ($scope.project.author_id === user.id) { return true; }\n };\n\n /**\n * Callback to delete the current project. Then, the user is redirected to the projects list page,\n * which is refreshed. Admins and project owner only are allowed to delete a project\n */\n $scope.deleteProject = function () {\n // check the permissions\n if (($scope.currentUser.role === 'admin') || $scope.projectDeletableBy($scope.currentUser)) {\n // delete the project then refresh the projects list\n return dialogs.confirm({\n resolve: {\n object () {\n return {\n title: _t('app.public.projects_show.confirmation_required'),\n msg: _t('app.public.projects_show.do_you_really_want_to_delete_this_project')\n };\n }\n }\n }\n , function () { // cancel confirmed\n $scope.project.$delete(function () { $state.go('app.public.projects_list', {}, { reload: true }); });\n });\n } else {\n return console.error(_t('app.public.projects_show.unauthorized_operation'));\n }\n };\n\n /**\n * Open a modal box containg a form that allow the end-user to signal an abusive content\n * @param e {Object} jQuery event\n */\n $scope.signalAbuse = function (e) {\n if (e) { e.preventDefault(); }\n\n $uibModal.open({\n templateUrl: '/shared/signalAbuseModal.html',\n size: 'md',\n resolve: {\n project () { return $scope.project; }\n },\n controller: ['$scope', '$uibModalInstance', '_t', 'growl', 'Abuse', 'project', function ($scope, $uibModalInstance, _t, growl, Abuse, project) {\n // signaler's profile & signalement infos\n $scope.signaler = {\n signaled_type: 'Project',\n signaled_id: project.id\n };\n\n // callback for signaling cancellation\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n\n // callback for form validation\n return $scope.ok = function () {\n Abuse.save(\n {},\n { abuse: $scope.signaler },\n function (res) {\n // creation successful\n growl.success(_t('app.public.projects_show.your_report_was_successful_thanks'));\n return $uibModalInstance.close(res);\n }\n , function () {\n // creation failed...\n growl.error(_t('app.public.projects_show.an_error_occured_while_sending_your_report'));\n }\n );\n };\n }]\n });\n };\n\n /**\n * Return the URL allowing to share the current project on the Facebook social network\n */\n $scope.shareOnFacebook = function () { return `https://www.facebook.com/share.php?u=${$state.href('app.public.projects_show', { id: $scope.project.slug }, { absolute: true }).replace('#', '%23')}`; };\n\n /**\n * Return the URL allowing to share the current project on the Twitter social network\n */\n $scope.shareOnTwitter = function () { return `https://twitter.com/intent/tweet?url=${encodeURIComponent($state.href('app.public.projects_show', { id: $scope.project.slug }, { absolute: true }))}&text=${encodeURIComponent($scope.project.name)}`; };\n\n /**\n * Overlap global function to allow the user to navigate to the previous screen\n * If no previous $state were recorded, navigate to the project list page\n */\n $scope.backPrevLocation = function (event) {\n event.preventDefault();\n event.stopPropagation();\n if ($state.prevState === '') {\n $state.prevState = 'app.public.projects_list';\n return $state.go($state.prevState, {});\n }\n window.history.back();\n };\n }\n]);\n","'use strict';\n\nApplication.Controllers.controller('StoreController', ['$scope', 'CSRF', 'growl', '$uiRouter',\n function ($scope, CSRF, growl, $uiRouter) {\n /* PUBLIC SCOPE */\n\n // the following item is used by the Store component to store the filters in the URL\n $scope.uiRouter = $uiRouter;\n\n /**\n * Callback triggered in case of error\n */\n $scope.onError = (message) => {\n growl.error(message);\n };\n\n /**\n * Callback triggered in case of success\n */\n $scope.onSuccess = (message) => {\n growl.success(message);\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n // set the authenticity tokens in the forms\n CSRF.setMetaTags();\n };\n\n // init the controller (call at the end !)\n return initialize();\n }\n\n]);\n","'use strict';\n\nApplication.Controllers.controller('WalletController', ['$scope', 'walletPromise', 'transactionsPromise', 'proofOfIdentityTypesPromise',\n function ($scope, walletPromise, transactionsPromise, proofOfIdentityTypesPromise) {\n /* PUBLIC SCOPE */\n\n // current user wallet\n $scope.wallet = walletPromise;\n\n // current wallet transactions\n $scope.transactions = transactionsPromise;\n\n $scope.hasProofOfIdentityTypes = proofOfIdentityTypesPromise.length > 0;\n }\n]);\n","'use strict';\n\nApplication.Directives.directive('bsJasnyFileinput', [function () {\n return {\n require: ['ngModel'],\n link: function ($scope, elm, attrs, requiredCtrls) {\n const ngModelCtrl = requiredCtrls[0];\n const fileinput = elm.parents('[data-provides=fileinput]');\n const filetypeRegex = attrs.bsJasnyFileinput;\n fileinput.on('clear.bs.fileinput', function (e) {\n if (ngModelCtrl) {\n ngModelCtrl.$setViewValue(null);\n ngModelCtrl.$setPristine();\n $scope.$apply();\n }\n });\n fileinput.on('change.bs.fileinput', function (e, files) {\n if (ngModelCtrl) {\n if (files) {\n ngModelCtrl.$setViewValue(files.result);\n } else {\n ngModelCtrl.$setPristine();\n }\n\n // TODO: ne marche pas pour filetype\n if (filetypeRegex) {\n if (files && typeof files.type !== 'undefined' && files.type.match(new RegExp(filetypeRegex))) { ngModelCtrl.$setValidity('filetype', true); } else { ngModelCtrl.$setValidity('filetype', false); }\n };\n }\n $scope.$apply();\n });\n }\n };\n}]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\nApplication.Directives.directive('cart', ['$rootScope', '$uibModal', 'dialogs', 'growl', 'Auth', 'Price', 'Wallet', 'CustomAsset', 'SlotsReservation', 'AuthService', 'Payment', 'helpers', '_t',\n function ($rootScope, $uibModal, dialogs, growl, Auth, Price, Wallet, CustomAsset, SlotsReservation, AuthService, Payment, helpers, _t) {\n return ({\n restrict: 'E',\n scope: {\n slot: '=',\n slotSelectionTime: '=',\n events: '=',\n user: '=',\n modePlans: '=',\n plan: '=',\n planSelectionTime: '=',\n settings: '=',\n plans: '=',\n groups: '=',\n onSlotAddedToCart: '=',\n onSlotRemovedFromCart: '=',\n onSlotStartToModify: '=',\n onSlotModifySuccess: '=',\n onSlotModifyCancel: '=',\n onSlotModifyUnselect: '=',\n onSlotCancelSuccess: '=',\n afterPayment: '=',\n reservableId: '@',\n reservableType: '@',\n reservableName: '@',\n limitToOneSlot: '@'\n },\n templateUrl: '/shared/_cart.html',\n link ($scope, element, attributes) {\n // will store the user's plan if he chose to buy one\n $scope.selectedPlan = null;\n\n // total amount of the bill to pay\n $scope.amountTotal = 0;\n\n // total amount of the elements in the cart, without considering any coupon\n $scope.totalNoCoupon = 0;\n\n // once the cart was paid, retain the total amount paid by the customer\n $scope.amountPaid = 0;\n\n // Discount coupon to apply to the basket, if any\n $scope.coupon = { applied: null };\n\n // Global config: is the user authorized to change his bookings slots?\n $scope.enableBookingMove = ($scope.settings.booking_move_enable === 'true');\n\n // Global config: delay in hours before a booking while changing the booking slot is forbidden\n $scope.moveBookingDelay = parseInt($scope.settings.booking_move_delay);\n\n // Global config: is the user authorized to cancel his bookings?\n $scope.enableBookingCancel = ($scope.settings.booking_cancel_enable === 'true');\n\n // Global config: delay in hours before a booking while the cancellation is forbidden\n $scope.cancelBookingDelay = parseInt($scope.settings.booking_cancel_delay);\n\n // Payment schedule\n $scope.schedule = {\n requested_schedule: false, // does the user requests a payment schedule for his subscription\n payment_schedule: undefined // the effective computed payment schedule\n };\n\n // online payments (by card)\n $scope.onlinePayment = {\n showModal: false,\n cartItems: undefined\n };\n\n // offline payments (at the fablab's reception)\n $scope.localPayment = {\n showModal: false,\n cartItems: undefined\n };\n\n // currently logged-in user\n $scope.currentUser = $rootScope.currentUser;\n\n /**\n * Add the provided slot to the shopping cart (state transition from free to 'about to be reserved')\n * and increment the total amount of the cart if needed.\n * @param slot {Object} fullCalendar event object\n */\n $scope.validateSlot = function (slot) {\n validateTags(slot, function () {\n validateSameTimeReservations(slot, function () {\n slot.isValid = true;\n updateCartPrice();\n });\n });\n };\n\n /**\n * Remove the provided slot from the shopping cart (state transition from 'about to be reserved' to free)\n * and decrement the total amount of the cart if needed.\n * @param slot {Object} fullCalendar event object\n * @param index {number} index of the slot in the reservation array\n * @param [event] {Object} see https://docs.angularjs.org/guide/expression#-event-\n */\n $scope.removeSlot = function (slot, index, event) {\n if (event) { event.preventDefault(); }\n $scope.events.reserved.splice(index, 1);\n // if is was the last slot, we remove any plan from the cart\n if ($scope.events.reserved.length === 0) {\n $scope.selectedPlan = null;\n $scope.plan = null;\n $scope.modePlans = false;\n }\n if (typeof $scope.onSlotRemovedFromCart === 'function') { $scope.onSlotRemovedFromCart(slot); }\n return updateCartPrice();\n };\n\n /**\n * Checks that every selected slots were added to the shopping cart. Ie. will return false if\n * any checked slot was not validated by the user.\n */\n $scope.isSlotsValid = function () {\n let isValid = true;\n if ($scope.events) {\n angular.forEach($scope.events.reserved, function (m) {\n if (!m.isValid) {\n return isValid = false;\n }\n });\n }\n return isValid;\n };\n\n /**\n * Switch the user's view from the reservation agenda to the plan subscription\n */\n $scope.showPlans = function () {\n // first, we ensure that a user was selected (admin/manager) or logged (member)\n const isSelectedUser = Object.keys($scope.user).length > 0;\n // all slots are in future\n const areFutureSlots = _.every($scope.events.reserved, function (s) {\n return s.start.isAfter();\n });\n if (isSelectedUser && areFutureSlots) {\n return $scope.modePlans = true;\n } else if (!isSelectedUser) {\n // otherwise we alert, this error musn't occur when the current user hasn't the admin role\n return growl.error(_t('app.shared.cart.please_select_a_member_first'));\n } else if (!areFutureSlots) {\n return growl.error(_t('app.shared.cart.unable_to_select_plan_if_slots_in_the_past'));\n }\n };\n\n /**\n * Validates the shopping chart and redirect the user to the payment step\n */\n $scope.payCart = function () {\n // first, we check that a user was selected\n if (Object.keys($scope.user).length > 0) {\n // check selected user has a subscription, if any slot is restricted for subscriptions\n const slotValidations = [];\n let slotNotValid;\n let slotNotValidError;\n if ($scope.events.reserved) {\n $scope.events.reserved.forEach(function (slot) {\n if (slot.plan_ids.length > 0) {\n if (\n ($scope.selectedPlan && _.includes(slot.plan_ids, $scope.selectedPlan.id)) ||\n ($scope.user.subscribed_plan && _.includes(slot.plan_ids, $scope.user.subscribed_plan.id))\n ) {\n slotValidations.push(true);\n } else {\n slotNotValid = slot;\n if ($scope.selectedPlan && !_.includes(slot.plan_ids, $scope.selectedPlan.id)) {\n slotNotValidError = 'selectedPlanError';\n }\n if ($scope.user.subscribed_plan && !_.includes(slot.plan_ids, $scope.user.subscribed_plan.id)) {\n slotNotValidError = 'userPlanError';\n }\n if (!$scope.selectedPlan || !$scope.user.subscribed_plan) {\n slotNotValidError = 'noPlanError';\n }\n slotValidations.push(false);\n }\n }\n });\n const hasPlanForSlot = slotValidations.every(function (a) {\n return a;\n });\n if (!hasPlanForSlot) {\n if (!AuthService.isAuthorized(['admin', 'manager'])) {\n return growl.error(_t('app.shared.cart.slot_restrict_subscriptions_must_select_plan'));\n } else {\n const modalInstance = $uibModal.open({\n animation: true,\n templateUrl: '/shared/_reserve_slot_without_plan.html',\n size: 'md',\n controller: 'ReserveSlotWithoutPlanController',\n resolve: {\n slot: function () {\n return slotNotValid;\n },\n slotNotValidError: function () {\n return slotNotValidError;\n }\n }\n });\n modalInstance.result.then(function (res) {\n return paySlots();\n });\n }\n } else {\n return paySlots();\n }\n } else if ($scope.selectedPlan) {\n return paySlots();\n }\n } else {\n // otherwise we alert, this error musn't occur when the current user is not admin or manager\n return growl.error(_t('app.shared.cart.please_select_a_member_first'));\n }\n };\n\n /**\n * When modifying an already booked reservation, confirm the modification.\n */\n $scope.modifySlot = function () {\n SlotsReservation.update({ id: $scope.events.modifiable.slots_reservations_ids[0] }, {\n slots_reservation: {\n slot_id: $scope.events.placable.slot_id\n }\n }\n , function (slotReservation) { // success\n // -> run the callback\n if (typeof $scope.onSlotModifySuccess === 'function') { $scope.onSlotModifySuccess(); }\n // -> set the events as successfully moved (to display a summary)\n $scope.events.moved = {\n newSlot: Object.assign($scope.events.placable, { slots_reservations_ids: [slotReservation.id] }),\n oldSlot: $scope.events.modifiable\n };\n // -> reset the 'moving' status\n $scope.events.placable = null;\n $scope.events.modifiable = null;\n }\n , function (err) { // failure\n growl.error(_t('app.shared.cart.unable_to_change_the_reservation'));\n console.error(err);\n });\n };\n\n /**\n * Cancel the current booking modification, reseting the whole process\n * @param [event] {Object} see https://docs.angularjs.org/guide/expression#-event-\n */\n $scope.cancelModifySlot = function (event) {\n if (event) { event.preventDefault(); }\n if (typeof $scope.onSlotModifyCancel === 'function') { $scope.onSlotModifyCancel(); }\n $scope.events.placable = null;\n $scope.events.modifiable = null;\n };\n\n /**\n * When modifying an already booked reservation, cancel the choice of the new slot\n * @param e {Object} see https://docs.angularjs.org/guide/expression#-event-\n */\n $scope.removeSlotToPlace = function (e) {\n e.preventDefault();\n if (typeof $scope.onSlotModifyUnselect === 'function') { $scope.onSlotModifyUnselect(); }\n $scope.events.placable = null;\n };\n\n /**\n * Checks if $scope.events.modifiable and $scope.events.placable have tag incompatibilities\n * @returns {boolean} true in case of incompatibility\n */\n $scope.tagMissmatch = function () {\n if ($scope.events.placable.tag_ids.length === 0) { return false; }\n for (const tag of Array.from($scope.events.modifiable.tags)) {\n if (!Array.from($scope.events.placable.tag_ids).includes(tag.id)) {\n return true;\n }\n }\n return false;\n };\n\n /**\n * Check if the currently logged user has the 'admin' OR 'manager' role, but is not taking reseravtion for himself\n * @returns {boolean}\n */\n $scope.isAuthorized = function () {\n if (AuthService.isAuthorized(['admin', 'manager'])) {\n return ($rootScope.currentUser.id !== $scope.user.id);\n }\n\n return false;\n };\n\n /**\n * This will update the payment_schedule setting when the user toggles the switch button\n * @param checked {Boolean}\n */\n $scope.togglePaymentSchedule = (checked) => {\n setTimeout(() => {\n $scope.schedule.requested_schedule = checked;\n updateCartPrice();\n $scope.$apply();\n }, 50);\n };\n\n /**\n * This will open/close the online payment modal\n */\n $scope.toggleOnlinePaymentModal = (beforeApply) => {\n setTimeout(() => {\n $scope.onlinePayment.showModal = !$scope.onlinePayment.showModal;\n if (typeof beforeApply === 'function') {\n beforeApply();\n }\n $scope.$apply();\n }, 50);\n };\n\n /**\n * This will open/close the local payment modal\n */\n $scope.toggleLocalPaymentModal = (beforeApply) => {\n setTimeout(() => {\n $scope.localPayment.showModal = !$scope.localPayment.showModal;\n if (typeof beforeApply === 'function') {\n beforeApply();\n }\n $scope.$apply();\n }, 50);\n };\n\n /**\n * Invoked atfer a successful card payment\n * @param invoice {*} may be an Invoice or a paymentSchedule\n */\n $scope.afterOnlinePaymentSuccess = (invoice) => {\n $scope.toggleOnlinePaymentModal();\n afterPayment(invoice);\n };\n\n /**\n * Invoked atfer a successful offline payment\n * @param invoice {*} may be an Invoice or a paymentSchedule\n */\n $scope.afterLocalPaymentSuccess = (invoice) => {\n $scope.toggleLocalPaymentModal();\n afterPayment(invoice);\n };\n\n /**\n * Invoked when something wrong occurred after the payment dialog has been closed\n * @param message {string}\n */\n $scope.onLocalPaymentError = (message) => {\n growl.error(message);\n };\n\n /**\n * Invoked when something wrong occurred during the payment dialog initialization\n * @param message {string}\n */\n $scope.onOnlinePaymentError = (message) => {\n growl.error(message);\n };\n\n /**\n * Callback triggered when a child component (LocalPaymentModal) requires to update the cart content\n * @param cart {ShoppingCart}\n */\n $scope.updateCart = (cart) => {\n setTimeout(() => {\n $scope.localPayment.cartItems = cart;\n $scope.$apply();\n }, 50);\n };\n\n $scope.isUserValidatedByType = (type) => {\n return AuthService.isAuthorized(['admin', 'manager']) || (!helpers.isUserValidationRequired($scope.settings, type) || (\n helpers.isUserValidationRequired($scope.settings, type) && helpers.isUserValidated($scope.user)));\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the directive is loaded\n */\n const initialize = function () {\n // What the bound slot\n $scope.$watch('slotSelectionTime', function (newValue, oldValue) {\n if (newValue !== oldValue) {\n slotSelectionChanged();\n }\n });\n $scope.$watch('user', function (newValue, oldValue) {\n if (newValue !== oldValue) {\n resetCartState();\n updateCartPrice();\n }\n });\n $scope.$watch('planSelectionTime', function (newValue, oldValue) {\n if (newValue !== oldValue) {\n planSelectionChanged();\n }\n });\n // watch when a coupon is applied to re-compute the total price\n $scope.$watch('coupon.applied', function (newValue, oldValue) {\n if (newValue !== oldValue) {\n updateCartPrice();\n }\n });\n };\n\n /**\n * Validates that the current slot is reserved by a member with an authorized tag. Admin and managers can overpass\n * the mismatch.\n * @param slot {Object} fullCalendar event object.\n * @param callback {function}\n */\n const validateTags = function (slot, callback) {\n const interTags = _.intersection.apply(null, [slot.tag_ids, $scope.user.tag_ids]);\n if (slot.tag_ids.length === 0 || interTags.length > 0) {\n if (typeof callback === 'function') callback();\n } else {\n // ask confirmation\n const modalInstance = $uibModal.open({\n animation: true,\n templateUrl: '/shared/_reserve_slot_tags_mismatch.html',\n size: 'md',\n controller: 'ReserveSlotTagsMismatchController',\n resolve: {\n slotTags: function () { return slot.tags; },\n userTags: function () { return $scope.user.tags; },\n userName: function () { return $scope.user.name; }\n }\n });\n modalInstance.result.then(function (res) {\n if (typeof callback === 'function') callback(res);\n });\n }\n };\n\n /**\n * Validates that no other reservations were made that conflict the current slot and alert the user about the conflict.\n * If the user is an administrator or a manager, he can overpass the conflict.\n * @param slot {Object} fullCalendar event object.\n * @param callback {function}\n */\n const validateSameTimeReservations = function (slot, callback) {\n let sameTimeReservations = $scope.settings.overlapping_categories.split(',').map(function (k) {\n return _.filter($scope.user[k], function (sr) {\n return !sr.canceled_at && (\n slot.start.isSame(sr.start_at) ||\n (slot.end.isAfter(sr.start_at) && slot.end.isBefore(sr.end_at)) ||\n (slot.start.isAfter(sr.start_at) && slot.start.isBefore(sr.end_at)) ||\n (slot.start.isBefore(sr.start_at) && slot.end.isAfter(sr.end_at))\n );\n });\n });\n sameTimeReservations = _.union.apply(null, sameTimeReservations);\n if (sameTimeReservations.length > 0) {\n const modalInstance = $uibModal.open({\n animation: true,\n templateUrl: '/shared/_reserve_slot_same_time.html',\n size: 'md',\n controller: 'ReserveSlotSameTimeController',\n resolve: {\n sameTimeReservations: function () { return sameTimeReservations; },\n bookOverlappingSlotsPromise: ['Setting', function (Setting) { return Setting.get({ name: 'book_overlapping_slots' }).$promise; }]\n }\n });\n modalInstance.result.then(function (res) {\n if (typeof callback === 'function') callback(res);\n });\n } else {\n if (typeof callback === 'function') callback();\n }\n };\n\n /**\n * Callback triggered when the selected slot changed\n */\n const slotSelectionChanged = function () {\n if ($scope.slot) {\n // if this slot is restricted for subscribers...\n if ($scope.slot.plan_ids.length > 0) {\n // ... we select all the plans matching these restrictions...\n const _plans = _.filter($scope.plans, function (p) { return _.includes($scope.slot.plan_ids, p.id); });\n // ... and we group these plans, by Group...\n $scope.slot.plansGrouped = [];\n $scope.slot.group_ids = [];\n for (const group of Array.from($scope.groups)) {\n const groupObj = { id: group.id, name: group.name, plans: [] };\n for (const plan of Array.from(_plans)) {\n if (plan.group_id === group.id) { groupObj.plans.push(plan); }\n }\n if (groupObj.plans.length > 0) {\n // ... Finally, we only keep the plans matching the group of the current user\n // OR all plans if the current user is admin or manager\n if (AuthService.isAuthorized(['admin', 'manager'])) {\n $scope.slot.plansGrouped.push(groupObj);\n } else if ($scope.user.group_id === groupObj.id) {\n $scope.slot.plansGrouped.push(groupObj);\n }\n }\n }\n $scope.slot.group_ids = $scope.slot.plansGrouped.map(function (g) { return g.id; });\n }\n\n if (!$scope.slot.is_completed && $scope.slot.slots_reservations_ids.length === 0 && !$scope.events.modifiable) {\n // slot is not fully reserved, and not reserved by the current user, and we are not currently modifying a slot\n // -> can be added to cart or removed if already present\n const index = _.findIndex($scope.events.reserved, (e) => e.slot_id === $scope.slot.slot_id);\n if (index === -1) {\n if (($scope.limitToOneSlot === 'true') && $scope.events.reserved[0]) {\n // if we limit the number of slots in the cart to 1, and there is already\n // a slot in the cart, we remove it before adding the new one\n $scope.removeSlot($scope.events.reserved[0], 0);\n }\n // slot is not in the cart, so we add it\n $scope.events.reserved.push($scope.slot);\n if (typeof $scope.onSlotAddedToCart === 'function') { $scope.onSlotAddedToCart(); }\n } else {\n // slot is in the cart, remove it\n $scope.removeSlot($scope.slot, index);\n }\n // in every cases, because a new reservation has started, we reset the cart content\n resetCartState();\n // finally, we update the prices\n return updateCartPrice();\n } else if (!$scope.slot.is_completed && $scope.slot.slots_reservations_ids.length === 0 && $scope.events.modifiable) {\n // slot is not fully reserved, not reserved by the current user, and we are currently modifying a slot\n // -> we request the calendar to change the rendering\n if (typeof $scope.onSlotModifyUnselect === 'function') {\n // if the callback return false, cancel the selection for the current modification\n const res = $scope.onSlotModifyUnselect();\n if (!res) return;\n }\n // -> then, we re-affect the destination slot\n if (!$scope.events.placable || ($scope.events.placable.slot_id !== $scope.slot.slot_id)) {\n return $scope.events.placable = $scope.slot;\n } else {\n return $scope.events.placable = null;\n }\n } else if ($scope.slot.slots_reservations_ids.length > 0 &&\n $scope.events.modifiable &&\n ($scope.slot._id === $scope.events.modifiable._id)) {\n // slot is reserved and currently modified\n // -> we cancel the modification\n $scope.cancelModifySlot();\n } else if ($scope.slot.slots_reservations_ids.length > 0 &&\n (slotCanBeModified($scope.slot) || slotCanBeCanceled($scope.slot)) &&\n !$scope.events.modifiable &&\n $scope.events.reserved.length === 0) {\n // slot is reserved and is ok to be modified or cancelled\n // but we are not currently running a modification or having any slots in the cart\n // -> first affect the modification/cancellation rights attributes to the current slot\n resetCartState();\n $scope.slot.movable = slotCanBeModified($scope.slot);\n $scope.slot.cancelable = slotCanBeCanceled($scope.slot);\n // -> then, we open a dialog to ask to the user to choose an action\n return dialogs.confirm({\n templateUrl: '/shared/confirm_modify_slot_modal.html',\n resolve: {\n object () {\n if ($scope.slot.user && !$scope.slot.user.name) {\n $scope.slot.user.name = _t('app.shared.confirm_modify_slot_modal.deleted_user');\n }\n return $scope.slot;\n }\n }\n }\n , function (type) {\n // the user has chosen an action, so we proceed\n if (type === 'move') {\n if (typeof $scope.onSlotStartToModify === 'function') { $scope.onSlotStartToModify(); }\n $scope.events.modifiable = $scope.slot;\n } else if (type === 'cancel') {\n dialogs.confirm(\n {\n resolve: {\n object () {\n return {\n title: _t('app.shared.cart.confirmation_required'),\n msg: _t('app.shared.cart.do_you_really_want_to_cancel_this_reservation_html')\n };\n }\n }\n },\n function () { // cancel confirmed\n SlotsReservation.cancel({ id: $scope.slot.slots_reservations_ids[0] }, function () { // successfully canceled\n growl.success(_t('app.shared.cart.reservation_was_cancelled_successfully'));\n if (typeof $scope.onSlotCancelSuccess === 'function') { return $scope.onSlotCancelSuccess(); }\n }\n , function () { // error while canceling\n growl.error(_t('app.shared.cart.cancellation_failed'));\n });\n }\n );\n }\n });\n }\n }\n };\n\n /**\n * Reset the parameters that may lead to a wrong price but leave the content (events added to cart)\n */\n const resetCartState = function () {\n $scope.selectedPlan = null;\n $scope.paidPlan = null;\n $scope.coupon.applied = null;\n $scope.events.moved = null;\n $scope.events.paid = [];\n $scope.events.modifiable = null;\n $scope.events.placable = null;\n $scope.schedule.requested_schedule = false;\n $scope.schedule.payment_schedule = null;\n };\n\n /**\n * Determines if the provided booked slot is able to be modified by the user.\n * @param slot {Object} fullCalendar event object\n */\n const slotCanBeModified = function (slot) {\n if (AuthService.isAuthorized(['admin', 'manager'])) { return true; }\n const slotStart = moment(slot.start);\n const now = moment();\n return (slot.can_modify && $scope.enableBookingMove && (slotStart.diff(now, 'hours') >= $scope.moveBookingDelay));\n };\n\n /**\n * Determines if the provided booked slot is able to be canceled by the user.\n * @param slot {Object} fullCalendar event object\n */\n const slotCanBeCanceled = function (slot) {\n if (AuthService.isAuthorized(['admin', 'manager'])) { return true; }\n const slotStart = moment(slot.start);\n const now = moment();\n return (slot.can_modify && $scope.enableBookingCancel && (slotStart.diff(now, 'hours') >= $scope.cancelBookingDelay));\n };\n\n /**\n * Callback triggered when the selected slot changed\n */\n const planSelectionChanged = function () {\n if (Auth.isAuthenticated()) {\n if ($scope.selectedPlan !== $scope.plan) {\n $scope.selectedPlan = $scope.plan;\n $scope.schedule.requested_schedule = $scope.plan.monthly_payment;\n } else {\n $scope.selectedPlan = null;\n }\n return updateCartPrice();\n } else {\n return $rootScope.login(null, function () {\n $scope.selectedPlan = $scope.plan;\n return updateCartPrice();\n });\n }\n };\n\n /**\n * Update the total price of the current selection/reservation\n */\n const updateCartPrice = function () {\n if (Object.keys($scope.user).length > 0) {\n const items = [];\n if ($scope.events.reserved && $scope.events.reserved.length > 0) {\n items.push(mkReservation($scope.events.reserved));\n }\n if ($scope.selectedPlan) {\n items.push(mkSubscription($scope.selectedPlan.id));\n }\n\n return Price.compute(mkCartItems(items), function (res) {\n $scope.amountTotal = res.price;\n $scope.schedule.payment_schedule = res.schedule;\n $scope.totalNoCoupon = res.price_without_coupon;\n setSlotsDetails(res.details);\n });\n } else {\n // otherwise we alert, this error musn't occur when the current user is not admin\n growl.warning(_t('app.shared.cart.please_select_a_member_first'));\n $scope.amountTotal = null;\n }\n };\n\n const setSlotsDetails = function (details) {\n angular.forEach($scope.events.reserved, function (slot) {\n angular.forEach(details.slots, function (s) {\n if (moment(s.start_at).isSame(slot.start)) {\n slot.promo = s.promo;\n slot.price = s.price;\n }\n });\n });\n };\n\n /**\n * Create a hash map implementing the Reservation specs\n * @param slots {Array} Array of fullCalendar events: slots selected on the calendar\n * @return {{reservation: Reservation}}\n */\n const mkReservation = function (slots) {\n const reservation = {\n reservable_id: $scope.reservableId,\n reservable_type: $scope.reservableType,\n slots_reservations_attributes: []\n };\n angular.forEach(slots, function (slot) {\n reservation.slots_reservations_attributes.push({\n offered: slot.offered || false,\n slot_id: slot.slot_id\n });\n });\n\n return { reservation };\n };\n\n /**\n * Create a hash map implementing the Subscription specs\n * @param planId {number}\n * @return {{subscription: SubscriptionRequest}}\n */\n const mkSubscription = function (planId) {\n return {\n subscription: {\n plan_id: planId\n }\n };\n };\n\n /**\n * Build the ShoppingCart object, from the current reservation\n * @param items {Array}\n * @param paymentMethod {string}\n * @return {ShoppingCart}\n */\n const mkCartItems = function (items, paymentMethod = '') {\n return {\n customer_id: $scope.user.id,\n items,\n payment_schedule: $scope.schedule.requested_schedule,\n payment_method: paymentMethod,\n coupon_code: (($scope.coupon.applied ? $scope.coupon.applied.code : undefined))\n };\n };\n\n /**\n * Open a modal window that allows the user to process a credit card payment for his current shopping cart.\n */\n const payOnline = function (items) {\n // check that the online payment is enabled\n if ($scope.settings.online_payment_module !== 'true') {\n growl.error(_t('app.shared.cart.online_payment_disabled'));\n } else {\n $scope.toggleOnlinePaymentModal(() => {\n $scope.onlinePayment.cartItems = mkCartItems(items, 'card');\n });\n }\n };\n\n /**\n * Open a modal window that allows the user to process a local payment for his current shopping cart (admin only).\n */\n const payOnSite = function (items) {\n $scope.toggleLocalPaymentModal(() => {\n $scope.localPayment.cartItems = mkCartItems(items);\n });\n };\n\n /**\n * Actions to run after the payment was successful\n * @param paymentDocument {*} may be an Invoice or a PaymentSchedule\n */\n const afterPayment = function (paymentDocument) {\n // we set the cart content as 'paid' to display a summary of the transaction\n $scope.events.paid = $scope.events.reserved;\n $scope.amountPaid = $scope.amountTotal;\n // we call the external callback if present\n if (typeof $scope.afterPayment === 'function') { $scope.afterPayment(paymentDocument); }\n // we reset the coupon, and the cart content, and we unselect the slot\n $scope.coupon.applied = undefined;\n if ($scope.slot) {\n // reservation (+ subscription)\n $scope.slot = undefined;\n $scope.events.reserved = [];\n } else {\n // subscription only\n $scope.events = {};\n }\n $scope.paidPlan = $scope.selectedPlan;\n $scope.selectedPlan = undefined;\n $scope.schedule.requested_schedule = false;\n $scope.schedule.payment_schedule = undefined;\n };\n\n /**\n * Actions to pay slots (or subscription)\n */\n const paySlots = function () {\n const items = [];\n if ($scope.events.reserved && $scope.events.reserved.length > 0) {\n items.push(mkReservation($scope.events.reserved));\n }\n if ($scope.selectedPlan) {\n items.push(mkSubscription($scope.selectedPlan.id));\n }\n\n return Wallet.getWalletByUser({ user_id: $scope.user.id }, function (wallet) {\n const amountToPay = helpers.getAmountToPay($scope.amountTotal, wallet.amount);\n if ((AuthService.isAuthorized(['member']) && (amountToPay > 0 || (amountToPay === 0 && hasOtherDeadlines()))) ||\n ($scope.user.id === $rootScope.currentUser.id && amountToPay > 0)) {\n return payOnline(items);\n } else {\n if (AuthService.isAuthorized(['admin', 'manager'] && $scope.user.id !== $rootScope.currentUser.id) ||\n (amountToPay === 0 && !hasOtherDeadlines())) {\n return payOnSite(items);\n }\n }\n });\n };\n\n /**\n * Check if the later deadlines of the payment schedule exists and are not equal to zero\n * @return {boolean}\n */\n const hasOtherDeadlines = function () {\n if (!$scope.schedule.payment_schedule) return false;\n if ($scope.schedule.payment_schedule.items.length < 2) return false;\n return $scope.schedule.payment_schedule.items[1].amount !== 0;\n };\n\n // !!! MUST BE CALLED AT THE END of the directive\n return initialize();\n }\n });\n }\n]);\n\n/**\n * Controller of the modal showing the reservations the same date at the same time\n */\nApplication.Controllers.controller('ReserveSlotSameTimeController', ['$scope', '$uibModalInstance', 'AuthService', 'sameTimeReservations', 'bookOverlappingSlotsPromise',\n function ($scope, $uibModalInstance, AuthService, sameTimeReservations, bookOverlappingSlotsPromise) {\n $scope.sameTimeReservations = sameTimeReservations;\n $scope.bookSlotAtSameTime = (bookOverlappingSlotsPromise.setting.value === 'true');\n $scope.isAuthorized = AuthService.isAuthorized;\n /**\n * Confirmation callback\n */\n $scope.ok = function () {\n $uibModalInstance.close({});\n };\n /**\n * Cancellation callback\n */\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n }\n]);\n\n/**\n * Controller of the modal showing the slot tags\n */\nApplication.Controllers.controller('ReserveSlotTagsMismatchController', ['$scope', '$uibModalInstance', 'AuthService', 'slotTags', 'userTags', 'userName',\n function ($scope, $uibModalInstance, AuthService, slotTags, userTags, userName) {\n $scope.slotTags = slotTags;\n $scope.userTags = userTags;\n $scope.userName = userName;\n $scope.isAuthorized = AuthService.isAuthorized;\n /**\n * Confirmation callback\n */\n $scope.ok = function () {\n $uibModalInstance.close({});\n };\n /**\n * Cancellation callback\n */\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n }\n]);\n\n/**\n * Controller used to alert admin reserve slot without plan\n */\nApplication.Controllers.controller('ReserveSlotWithoutPlanController', ['$scope', '$uibModalInstance', 'slot', 'slotNotValidError', 'growl', '_t',\n function ($scope, $uibModalInstance, slot, slotNotValidError, growl, _t) {\n $scope.slot = slot;\n $scope.slotNotValidError = slotNotValidError;\n /**\n * Confirmation callback\n */\n $scope.ok = function () {\n $uibModalInstance.close({});\n };\n /**\n * Cancellation callback\n */\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n };\n }\n]);\n","Application.Directives.directive('compile', ['$compile', function ($compile) {\n return function (scope, element, attrs) {\n scope.$watch(\n function (scope) {\n // watch the 'compile' expression for changes\n return scope.$eval(attrs.compile);\n },\n function (value) {\n // when the 'compile' expression changes\n // assign it into the current DOM\n element.html(value);\n\n // compile the new DOM and link it to the current\n // scope.\n // NOTE: we only compile .childNodes so that\n // we don't get into infinite loop compiling ourselves\n $compile(element.contents())(scope);\n }\n );\n };\n}]);\n","/* eslint-disable\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\nApplication.Directives.directive('confirmationNeeded', [() =>\n ({\n priority: 1,\n terminal: true,\n link (scope, element, attrs) {\n const msg = attrs.confirmationNeeded || 'Are you sure?';\n const clickAction = attrs.ngClick;\n return element.bind('click', function () {\n if (attrs.confirmationNeededIf != null) {\n const confirmNeededIf = scope.$eval(attrs.confirmationNeededIf);\n if (confirmNeededIf === true) {\n if (window.confirm(msg)) {\n return scope.$eval(clickAction);\n }\n } else {\n return scope.$eval(clickAction);\n }\n } else {\n if (window.confirm(msg)) {\n return scope.$eval(clickAction);\n }\n }\n });\n }\n })\n\n]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\nApplication.Directives.directive('coupon', ['$rootScope', 'Coupon', '_t', function ($rootScope, Coupon, _t) {\n return ({\n restrict: 'E',\n scope: {\n show: '=',\n coupon: '=',\n total: '=',\n userId: '@'\n },\n templateUrl: '/shared/_coupon.html',\n link ($scope, element, attributes) {\n // Whether code input is shown or not (ie. the link 'I have a coupon' is shown)\n $scope.code =\n { input: false };\n\n // Available status are: 'pending', 'valid', 'invalid'\n $scope.status = 'pending';\n\n // Binding for the code inputed (see the attached template)\n $scope.couponCode = null;\n\n // Code validation messages\n $scope.messages = [];\n\n // Re-compute if the code can be applied when the total of the cart changes\n $scope.$watch('total', function (newValue, oldValue) {\n if (newValue && (newValue !== oldValue) && $scope.couponCode) {\n return $scope.validateCode();\n }\n });\n\n /**\n * Callback to validate the code\n */\n $scope.validateCode = function () {\n $scope.messages = [];\n if ($scope.couponCode === '') {\n $scope.status = 'pending';\n $scope.coupon = null;\n } else {\n Coupon.validate({ code: $scope.couponCode, user_id: $scope.userId, amount: $scope.total }, function (res) {\n $scope.status = 'valid';\n $scope.coupon = res;\n if (res.type === 'percent_off') {\n $scope.messages.push({ type: 'success', message: _t('app.shared.coupon_input.the_coupon_has_been_applied_you_get_PERCENT_discount', { PERCENT: res.percent_off }) });\n } else {\n $scope.messages.push({ type: 'success', message: _t('app.shared.coupon_input.the_coupon_has_been_applied_you_get_AMOUNT_CURRENCY', { AMOUNT: res.amount_off, CURRENCY: $rootScope.currencySymbol }) });\n }\n if (res.validity_per_user === 'once') {\n $scope.messages.push({ type: 'warning', message: _t('app.shared.coupon_input.coupon_validity_once') });\n }\n }\n , function (err) {\n $scope.status = 'invalid';\n $scope.coupon = null;\n return $scope.messages.push({ type: 'danger', message: _t(`app.shared.coupon_input.unable_to_apply_the_coupon_because_${err.data.status}`) });\n });\n }\n };\n\n /**\n * Callback to remove the message at provided index from the displayed list\n */\n $scope.closeMessage = function (index) { $scope.messages.splice(index, 1); };\n }\n });\n}]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\nApplication.Directives.directive('fileread', [() =>\n ({\n scope: {\n fileread: '='\n },\n\n link (scope, element, attributes) {\n return element.bind('change', changeEvent =>\n scope.$apply(() => scope.fileread = changeEvent.target.files[0])\n );\n }\n })\n\n]);\n\n// This `bsHolder` angular directive is a workaround for\n// an incompatability between angular and the holder.js\n// image placeholder library.\n//\n// To use, simply define `bs-holder` on any element\nApplication.Directives.directive('bsHolder', [() =>\n ({\n link (scope, element, attrs) {\n Holder.addTheme('icon', { background: 'white', foreground: '#ebebeb', size: 60, font: 'FontAwesome' })\n .addTheme('icon-xs', { background: 'white', foreground: '#ebebeb', size: 20, font: 'FontAwesome' })\n .addTheme('icon-black-xs', { background: 'black', foreground: 'white', size: 20, font: 'FontAwesome' })\n .addTheme('avatar', { background: '#eeeeee', foreground: '#555555', size: 16, font: 'FontAwesome' })\n .run(element[0]);\n }\n })\n\n]);\n\nApplication.Directives.directive('match', [() =>\n ({\n require: 'ngModel',\n restrict: 'A',\n scope: {\n match: '='\n },\n link (scope, elem, attrs, ctrl) {\n return scope.$watch(() => (ctrl.$pristine && angular.isUndefined(ctrl.$modelValue)) || (scope.match === ctrl.$modelValue)\n , currentValue => ctrl.$setValidity('match', currentValue));\n }\n })\n\n]);\n\nApplication.Directives.directive('publishProject', [() =>\n ({\n restrict: 'A',\n link (scope, elem, attrs, ctrl) {\n return elem.bind('click', function ($event) {\n if ($event) {\n $event.preventDefault();\n $event.stopPropagation();\n }\n\n if (elem.attr('disabled')) { return; }\n const input = angular.element('');\n const form = angular.element('form');\n form.append(input);\n form.triggerHandler('submit');\n return form[0].submit();\n });\n }\n })\n\n]);\n\nApplication.Directives.directive('disableAnimation', ['$animate', ($animate) =>\n ({\n restrict: 'A',\n link (scope, elem, attrs) {\n return attrs.$observe('disableAnimation', value => $animate.enabled(elem, !value));\n }\n })\n]);\n\n/**\n * Isolate a form's scope from its parent : no nested validation\n * @see https://stackoverflow.com/a/37481846/1039377\n */\nApplication.Directives.directive('isolateForm', [() =>\n ({\n restrict: 'A',\n require: '?form',\n link (scope, elm, attrs, ctrl) {\n if (!ctrl) { return; }\n\n const parentForm = ctrl.$$parentForm; // Note this uses private API\n if (!parentForm) {\n return;\n }\n\n // Remove this form from parent controller\n parentForm.$removeControl(ctrl);\n }\n\n })\n\n]);\n","/* eslint-disable\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\nApplication.Directives.directive('fabUserAvatar', [function () {\n return ({\n restrict: 'E',\n scope: {\n userAvatar: '=ngModel',\n avatarClass: '@'\n },\n templateUrl: '/shared/_user_avatar.html'\n });\n}]);\n","Application.Directives.directive('events', ['Event',\n function (Event) {\n return ({\n restrict: 'E',\n templateUrl: '/home/events.html',\n link ($scope, element, attributes) {\n // The closest upcoming events\n $scope.upcomingEvents = null;\n\n /**\n * Test if the provided event run on a single day or not\n * @param event {Object} single event from the $scope.upcomingEvents array\n * @returns {boolean} false if the event runs on more that 1 day\n */\n $scope.isOneDayEvent = function (event) {\n return moment(event.start_date).isSame(event.end_date, 'day');\n };\n\n // constructor\n const initialize = function () {\n Event.upcoming({ limit: 3 }, function (data) {\n $scope.upcomingEvents = data;\n });\n };\n\n // !!! MUST BE CALLED AT THE END of the directive\n return initialize();\n }\n });\n }\n]);\n","Application.Directives.directive('news', ['Setting',\n function (Setting) {\n return ({\n restrict: 'E',\n templateUrl: '/home/news.html',\n link ($scope, element, attributes) {\n // The admin blogpost\n $scope.homeBlogpost = null;\n\n // constructor\n const initialize = function () {\n Setting.get({ name: 'home_blogpost' }, function (data) {\n $scope.homeBlogpost = data.setting.value;\n });\n };\n\n // !!! MUST BE CALLED AT THE END of the directive\n return initialize();\n }\n });\n }\n]);\n","Application.Directives.directive('projects', ['Project',\n function (Project) {\n return ({\n restrict: 'E',\n templateUrl: '/home/projects.html',\n link ($scope, element, attributes) {\n // The last projects published/documented on the platform\n $scope.lastProjects = null;\n\n // The default slide shown in the carousel\n $scope.activeSlide = 0;\n\n // constructor\n const initialize = function () {\n Project.lastPublished(function (data) {\n $scope.lastProjects = data;\n });\n };\n\n // !!! MUST BE CALLED AT THE END of the directive\n return initialize();\n }\n });\n }\n]);\n","/* global twitterFetcher */\n\n/**\n * This directive will show the last tweet.\n * Usage: \n */\nApplication.Directives.directive('twitter', ['Setting',\n function (Setting) {\n return ({\n restrict: 'E',\n templateUrl: '/home/twitter.html',\n link ($scope, element, attributes) {\n // Twitter username\n $scope.twitterName = null;\n\n // constructor\n const initialize = function () {\n Setting.get({ name: 'twitter_name' }, function (data) {\n $scope.twitterName = data.setting.value;\n if ($scope.twitterName) {\n const configProfile = {\n profile: { screenName: $scope.twitterName },\n domId: 'twitter',\n maxTweets: 1,\n enableLinks: true,\n showUser: false,\n showTime: true,\n showImages: false,\n showRetweet: true,\n showInteraction: false,\n lang: Fablab.locale\n };\n twitterFetcher.fetch(configProfile);\n }\n });\n };\n\n // !!! MUST BE CALLED AT THE END of the directive\n return initialize();\n }\n });\n }\n]);\n","Application.Directives.directive('members', ['Member', 'Setting',\n function (Member, Setting) {\n return ({\n restrict: 'E',\n resolve: {\n settingsPromise: ['Setting', function (Setting) {\n return Setting.query({ names: \"['public_registrations']\" }).$promise;\n }]\n },\n templateUrl: '/home/members.html',\n link ($scope, element, attributes) {\n // The last registered members who confirmed their addresses\n $scope.lastMembers = null;\n\n // constructor\n const initialize = function () {\n Member.lastSubscribed({ limit: 4 }, function (data) {\n $scope.lastMembers = data;\n });\n Setting.query({ names: \"['public_registrations']\" }, function (data) {\n // is public registrations allowed?\n $scope.publicRegistrations = (data.public_registrations !== 'false');\n });\n };\n\n // !!! MUST BE CALLED AT THE END of the directive\n return initialize();\n }\n });\n }\n]);\n","Application.Directives.directive('postRender', ['$timeout',\n function ($timeout) {\n return ({\n restrict: 'A',\n terminal: false,\n transclude: false,\n link: function (scope, element, attrs) {\n $timeout(scope[attrs.postRender], 0);\n }\n });\n }\n]);\n","'use strict';\n\n/**\n * This directive will allow to select a member.\n * Please surround it with a ng-if directive to prevent it from being used by a non-admin user.\n * The resulting member will be set into the parent $scope (=> $scope.ctrl.member).\n * The directive takes an optional parameter \"subscription\" as a \"boolean string\" that will filter the user\n * which have a valid running subscription or not.\n * Usage: \n */\nApplication.Directives.directive('selectMember', ['Diacritics', 'Member', function (Diacritics, Member) {\n return ({\n restrict: 'E',\n templateUrl: '/shared/_member_select.html',\n link (scope, element, attributes) {\n scope.autoCompleteName = function (nameLookup) {\n if (!nameLookup) {\n return;\n }\n scope.isLoadingMembers = true;\n const asciiName = Diacritics.remove(nameLookup);\n\n const q = { query: asciiName };\n if (attributes.subscription) {\n q.subscription = attributes.subscription;\n }\n\n Member.search(q, function (users) {\n scope.matchingMembers = users;\n scope.isLoadingMembers = false;\n }\n , function (error) { console.error(error); });\n };\n }\n\n });\n}]);\n","Application.Directives.directive('numberSetting', ['Setting', 'growl', '_t',\n function (Setting, growl, _t) {\n return ({\n restrict: 'E',\n scope: {\n name: '@',\n label: '@',\n settings: '=',\n classes: '@',\n faIcon: '@',\n helperText: '@',\n min: '@',\n step: '@',\n required: '<'\n },\n templateUrl: '/admin/settings/number.html',\n link ($scope, element, attributes) {\n // The setting\n $scope.setting = {\n name: $scope.name,\n value: parseFloat($scope.settings[$scope.name])\n };\n\n /**\n * Callback to save the setting value to the database\n * @param setting {{value:*, name:string}} note that the value will be stringified\n */\n $scope.save = function (setting) {\n let value;\n if (typeof setting.value === 'number') {\n value = setting.value.toString();\n } else {\n ({ value } = setting);\n }\n\n Setting.update(\n { name: setting.name },\n { value },\n function () {\n growl.success(_t('app.admin.settings.customization_of_SETTING_successfully_saved', { SETTING: _t(`app.admin.settings.${setting.name}`) }));\n $scope.settings[$scope.name] = value;\n },\n function (error) {\n if (error.status === 304) return;\n\n if (error.status === 423) {\n growl.error(_t('app.admin.settings.error_SETTING_locked', { SETTING: _t(`app.admin.settings.${setting.name}`) }));\n return;\n }\n\n growl.error(_t('app.admin.settings.an_error_occurred_saving_the_setting'));\n console.log(error);\n }\n );\n };\n }\n });\n }\n]);\n","Application.Directives.directive('selectMultipleSetting', ['Setting', 'growl', '_t', '$uibModal',\n function (Setting, growl, _t, $uibModal) {\n return ({\n restrict: 'E',\n scope: {\n name: '@',\n label: '@',\n settings: '=',\n classes: '@',\n required: '<',\n titleNew: '@',\n descriptionNew: '@',\n beforeAdd: '='\n },\n templateUrl: '/admin/settings/select-multiple.html',\n link ($scope, element, attributes) {\n // The setting\n $scope.setting = {\n name: $scope.name,\n value: $scope.settings[$scope.name]\n };\n\n // the options\n $scope.options = $scope.settings[$scope.name].split(' ').sort();\n\n // the selected options\n $scope.selection = [];\n\n /**\n * Remove the items in the selection from the options and update setting.value\n */\n $scope.removeItem = function () {\n const options = $scope.options.filter(function (opt) {\n return $scope.selection.indexOf(opt) < 0;\n });\n $scope.options = options;\n $scope.setting.value = options.join(' ');\n growl.success(_t('app.admin.settings.COUNT_items_removed', { COUNT: $scope.selection.length }));\n $scope.selection = [];\n };\n\n /**\n * Open a modal dialog asking for the value of a new item to add\n */\n $scope.addItem = function () {\n $uibModal.open({\n templateUrl: '/admin/settings/newSelectOption.html',\n resolve: {\n titleNew: function () { return $scope.titleNew; },\n descriptionNew: function () { return $scope.descriptionNew; }\n },\n controller: ['$scope', '$uibModalInstance', 'titleNew', 'descriptionNew',\n function ($scope, $uibModalInstance, titleNew, descriptionNew) {\n $scope.value = undefined;\n $scope.titleNew = titleNew;\n $scope.descriptionNew = descriptionNew;\n $scope.ok = function () {\n $uibModalInstance.close($scope.value);\n };\n $scope.dismiss = function () {\n $uibModalInstance.dismiss('cancel');\n };\n }]\n }).result.finally(null).then(function (val) {\n const options = Array.from($scope.options);\n if (typeof $scope.beforeAdd === 'function') { val = $scope.beforeAdd(val); }\n options.push(val);\n $scope.options = options;\n $scope.setting.value = options.join(' ');\n growl.success(_t('app.admin.settings.item_added'));\n });\n };\n\n /**\n * Callback to save the setting value to the database\n * @param setting {{value:*, name:string}} note that the value will be stringified\n */\n $scope.save = function (setting) {\n const { value } = setting;\n\n Setting.update(\n { name: setting.name },\n { value },\n function () {\n growl.success(_t('app.admin.settings.customization_of_SETTING_successfully_saved', { SETTING: _t(`app.admin.settings.${setting.name}`) }));\n $scope.settings[$scope.name] = value;\n },\n function (error) {\n if (error.status === 304) return;\n\n if (error.status === 423) {\n growl.error(_t('app.admin.settings.error_SETTING_locked', { SETTING: _t(`app.admin.settings.${setting.name}`) }));\n return;\n }\n\n growl.error(_t('app.admin.settings.an_error_occurred_saving_the_setting'));\n console.log(error);\n }\n );\n };\n }\n });\n }\n]);\n","Application.Directives.directive('selectSetting', ['Setting', 'growl', '_t',\n function (Setting, growl, _t) {\n return ({\n restrict: 'E',\n scope: {\n name: '@',\n label: '@',\n settings: '=',\n classes: '@',\n required: '<',\n option1: '<',\n option2: '<',\n option3: '<',\n option4: '<',\n option5: '<'\n },\n templateUrl: '/admin/settings/select.html',\n link ($scope, element, attributes) {\n // The setting\n $scope.setting = {\n name: $scope.name,\n value: $scope.settings[$scope.name]\n };\n\n /**\n * Callback to save the setting value to the database\n * @param setting {{value:*, name:string}} note that the value will be stringified\n */\n $scope.save = function (setting) {\n const { value } = setting;\n\n Setting.update(\n { name: setting.name },\n { value },\n function () {\n growl.success(_t('app.admin.settings.customization_of_SETTING_successfully_saved', { SETTING: _t(`app.admin.settings.${setting.name}`) }));\n $scope.settings[$scope.name] = value;\n },\n function (error) {\n if (error.status === 304) return;\n\n if (error.status === 423) {\n growl.error(_t('app.admin.settings.error_SETTING_locked', { SETTING: _t(`app.admin.settings.${setting.name}`) }));\n return;\n }\n\n growl.error(_t('app.admin.settings.an_error_occurred_saving_the_setting'));\n console.log(error);\n }\n );\n };\n }\n });\n }\n]);\n","Application.Directives.directive('textSetting', ['Setting', 'growl', '_t',\n function (Setting, growl, _t) {\n return ({\n restrict: 'E',\n scope: {\n name: '@',\n label: '@',\n settings: '=',\n classes: '@',\n faIcon: '@',\n placeholder: '@',\n required: '<',\n type: '@',\n maxLength: '@',\n minLength: '@',\n readOnly: '<'\n },\n templateUrl: '/admin/settings/text.html',\n link ($scope, element, attributes) {\n // if type is not specified, use text as default\n if (typeof $scope.type === 'undefined') {\n $scope.type = 'text';\n }\n // 'required' default to true\n if (typeof $scope.required === 'undefined') {\n $scope.required = true;\n }\n // The setting\n $scope.setting = {\n name: $scope.name,\n value: $scope.settings[$scope.name]\n };\n\n $scope.$watch(`settings.${$scope.name}`, function (newValue, oldValue, scope) {\n if (newValue !== oldValue) {\n $scope.setting.value = newValue;\n }\n });\n\n /**\n * Callback to save the setting value to the database\n * @param setting {{value:*, name:string}} note that the value will be stringified\n */\n $scope.save = function (setting) {\n const { value } = setting;\n\n Setting.update(\n { name: setting.name },\n { value },\n function () {\n growl.success(_t('app.admin.settings.customization_of_SETTING_successfully_saved', { SETTING: _t(`app.admin.settings.${setting.name}`) }));\n $scope.settings[$scope.name] = value;\n },\n function (error) {\n if (error.status === 304) return;\n\n if (error.status === 423) {\n growl.error(_t('app.admin.settings.error_SETTING_locked', { SETTING: _t(`app.admin.settings.${setting.name}`) }));\n return;\n }\n\n growl.error(_t('app.admin.settings.an_error_occurred_saving_the_setting'));\n console.log(error);\n }\n );\n };\n }\n });\n }\n]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\nApplication.Directives.directive('socialLink', [function () {\n return ({\n restrict: 'E',\n scope: {\n network: '@?',\n user: '='\n },\n templateUrl: '/shared/_social_link.html',\n link (scope, element, attributes) {\n if (scope.network === 'dailymotion') {\n scope.image = 'social/dailymotion.png';\n return scope.altText = 'd';\n } else if (scope.network === 'echosciences') {\n scope.image = 'social/echosciences.png';\n return scope.altText = 'E)';\n } else {\n if (scope.network === 'website') {\n return scope.faClass = 'fa-globe';\n } else {\n return scope.faClass = `fa-${scope.network.replace('_', '-')}`;\n }\n }\n }\n });\n}]);\n","/* eslint-disable\n no-return-assign,\n no-undef,\n no-useless-escape,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\nApplication.Directives.directive('url', [function () {\n const URL_REGEXP = /^(https?:\\/\\/)([\\da-z\\.-]+)\\.([-a-z0-9\\.]{2,30})([\\/\\w \\.-]*)*\\/?$/;\n return {\n require: 'ngModel',\n link (scope, element, attributes, ctrl) {\n return ctrl.$validators.url = function (modelValue, viewValue) {\n if (ctrl.$isEmpty(modelValue)) {\n return true;\n }\n if (URL_REGEXP.test(viewValue)) {\n return true;\n }\n\n // otherwise, this is invalid\n return false;\n };\n }\n };\n}\n]);\n\nApplication.Directives.directive('endpoint', [function () {\n const ENDPOINT_REGEXP = /^\\/?([-._~:?#\\[\\]@!$&'()*+,;=%\\w]+\\/?)*$/;\n return {\n require: 'ngModel',\n link (scope, element, attributes, ctrl) {\n return ctrl.$validators.endpoint = function (modelValue, viewValue) {\n if (ctrl.$isEmpty(modelValue)) {\n return true;\n }\n if (ENDPOINT_REGEXP.test(viewValue)) {\n return true;\n }\n\n // otherwise, this is invalid\n return false;\n };\n }\n };\n}\n]);\n","/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS202: Simplify dynamic range loops\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\nApplication.Filters.filter('array', [function () {\n return function (arrayLength) {\n if (arrayLength) {\n arrayLength = Math.ceil(arrayLength);\n const arr = new Array(arrayLength);\n\n for (let i = 0, end = arrayLength, asc = end >= 0; asc ? i < end : i > end; asc ? i++ : i--) {\n arr[i] = i;\n }\n\n return arr;\n }\n };\n}]);\n\n// filter for projects and trainings\nApplication.Filters.filter('machineFilter', [function () {\n return function (elements, selectedMachine) {\n if (!angular.isUndefined(elements) && !angular.isUndefined(selectedMachine) && (elements != null) && (selectedMachine != null)) {\n const filteredElements = [];\n angular.forEach(elements, function (element) {\n if (element.machine_ids.indexOf(selectedMachine) !== -1) {\n return filteredElements.push(element);\n }\n });\n return filteredElements;\n } else {\n return elements;\n }\n };\n}]);\n\nApplication.Filters.filter('projectMemberFilter', ['Auth', function (Auth) {\n return function (projects, selectedMember) {\n if (!angular.isUndefined(projects) && angular.isDefined(selectedMember) && (projects != null) && (selectedMember != null) && (selectedMember !== '')) {\n const filteredProject = [];\n // Mes projets\n if (selectedMember === '0') {\n angular.forEach(projects, function (project) {\n if (project.author_id === Auth._currentUser.id) {\n return filteredProject.push(project);\n }\n });\n // les projets auxquels je collabore\n } else {\n angular.forEach(projects, function (project) {\n if (project.user_ids.indexOf(Auth._currentUser.id) !== -1) {\n return filteredProject.push(project);\n }\n });\n }\n return filteredProject;\n } else {\n return projects;\n }\n };\n}]);\n\nApplication.Filters.filter('themeFilter', [function () {\n return function (projects, selectedTheme) {\n if (!angular.isUndefined(projects) && !angular.isUndefined(selectedTheme) && (projects != null) && (selectedTheme != null)) {\n const filteredProjects = [];\n angular.forEach(projects, function (project) {\n if (project.theme_ids.indexOf(selectedTheme) !== -1) {\n return filteredProjects.push(project);\n }\n });\n return filteredProjects;\n } else {\n return projects;\n }\n };\n}]);\n\nApplication.Filters.filter('componentFilter', [function () {\n return function (projects, selectedComponent) {\n if (!angular.isUndefined(projects) && !angular.isUndefined(selectedComponent) && (projects != null) && (selectedComponent != null)) {\n const filteredProjects = [];\n angular.forEach(projects, function (project) {\n if (project.component_ids.indexOf(selectedComponent) !== -1) {\n return filteredProjects.push(project);\n }\n });\n return filteredProjects;\n } else {\n return projects;\n }\n };\n}]);\n\nApplication.Filters.filter('projectsByAuthor', [function () {\n return function (projects, authorId) {\n if (!angular.isUndefined(projects) && angular.isDefined(authorId) && (projects != null) && (authorId != null) && (authorId !== '')) {\n const filteredProject = [];\n angular.forEach(projects, function (project) {\n if (project.author_id === authorId) {\n return filteredProject.push(project);\n }\n });\n return filteredProject;\n } else {\n return projects;\n }\n };\n}]);\n\nApplication.Filters.filter('projectsCollabored', [function () {\n return function (projects, memberId) {\n if (!angular.isUndefined(projects) && angular.isDefined(memberId) && (projects != null) && (memberId != null) && (memberId !== '')) {\n const filteredProject = [];\n angular.forEach(projects, function (project) {\n if (project.user_ids.indexOf(memberId) !== -1) {\n return filteredProject.push(project);\n }\n });\n return filteredProject;\n } else {\n return projects;\n }\n };\n}]);\n\n// depend on app/frontend/src/javascript/lib/humanize.js\nApplication.Filters.filter('humanize', [function () {\n return (element, param) => Humanize.truncate(element, param, null);\n}]);\n\n/**\n * This filter will convert ASCII carriage-return character to the HTML break-line tag\n */\nApplication.Filters.filter('breakFilter', [function () {\n return function (text) {\n if (text != null) {\n return text.replace(/\\n+/g, '
    ');\n }\n };\n}]);\n\n/**\n * This filter will take a HTML text as input and will return it without the html tags\n */\nApplication.Filters.filter('simpleText', [function () {\n return function (text) {\n if (text != null) {\n // add a line break after specific closing tags\n text = text.replace(/(<\\/p>|<\\/h4>|<\\/h5>|<\\/h6>|<\\/pre>|<\\/blockquote>)/g, '\\n');\n text = text.replace(//g, '\\n');\n return text.replace(/<\\/?\\w+[^>]*>/g, '');\n } else {\n return '';\n }\n };\n}]);\n\nApplication.Filters.filter('toTrusted', ['$sce', function ($sce) {\n return text => $sce.trustAsHtml(text);\n}]);\n\nApplication.Filters.filter('planIntervalFilter', [function () {\n return (interval, intervalCount) => moment.duration(intervalCount, interval).humanize();\n}]);\n\nApplication.Filters.filter('humanReadablePlanName', ['$filter', function ($filter) {\n return function (plan, groups, short) {\n if (plan != null) {\n let result = plan.base_name;\n if (groups != null) {\n for (const group of Array.from(groups)) {\n if (group.id === plan.group_id) {\n if (short != null) {\n result += ` - ${group.slug}`;\n } else {\n result += ` - ${group.name}`;\n }\n }\n }\n }\n result += ` - ${$filter('planIntervalFilter')(plan.interval, plan.interval_count)}`;\n return result;\n }\n };\n}]);\n\nApplication.Filters.filter('canceledReservationsFilter', [function () {\n return function (elements) {\n if (!angular.isUndefined(elements) && (elements != null)) {\n return elements.filter(e => e.canceled_at === null);\n }\n };\n}]);\n\nApplication.Filters.filter('trainingReservationsFilter', [function () {\n return function (elements, selectedScope) {\n if (!angular.isUndefined(elements) && !angular.isUndefined(selectedScope) && (elements != null) && (selectedScope != null)) {\n const filteredElements = [];\n angular.forEach(elements, function (element) {\n switch (selectedScope) {\n case 'future':\n if (new Date(element.start_at) > new Date()) {\n return filteredElements.push(element);\n }\n break;\n case 'passed':\n if ((new Date(element.start_at) <= new Date()) && !element.is_valid) {\n return filteredElements.push(element);\n }\n break;\n case 'valided':\n if ((new Date(element.start_at) <= new Date()) && element.is_valid) {\n return filteredElements.push(element);\n }\n break;\n default:\n return [];\n }\n });\n return filteredElements;\n } else {\n return elements;\n }\n };\n}]);\n\nApplication.Filters.filter('eventsReservationsFilter', [function () {\n return function (elements, selectedScope) {\n if (!angular.isUndefined(elements) && !angular.isUndefined(selectedScope) && (elements != null) && (selectedScope != null) && (selectedScope !== '')) {\n const filteredElements = [];\n angular.forEach(elements, function (element) {\n if (angular.isUndefined(element.start_at)) { element.start_at = element.availability.start_at; }\n if (angular.isUndefined(element.end_at)) { element.end_at = element.availability.end_at; }\n switch (selectedScope) {\n case 'future':\n if (new Date(element.end_at) >= new Date()) {\n return filteredElements.push(element);\n }\n break;\n case 'future_asc':\n if (new Date(element.end_at) >= new Date()) {\n return filteredElements.push(element);\n }\n break;\n case 'passed':\n if (new Date(element.end_at) <= new Date()) {\n return filteredElements.push(element);\n }\n break;\n default:\n return [];\n }\n });\n switch (selectedScope) {\n case 'future_asc':\n return filteredElements.reverse();\n default:\n return filteredElements;\n }\n } else {\n return elements;\n }\n };\n}]);\n\nApplication.Filters.filter('groupFilter', [function () {\n return function (elements, member) {\n if (!angular.isUndefined(elements) && !angular.isUndefined(member) && (elements != null) && (member != null)) {\n const filteredElements = [];\n angular.forEach(elements, function (element) {\n if (member.group_id === element.id) {\n return filteredElements.push(element);\n }\n });\n return filteredElements;\n } else {\n return elements;\n }\n };\n}]);\n\nApplication.Filters.filter('groupByFilter', [function () {\n return _.memoize((elements, field) => _.groupBy(elements, field));\n}]);\n\nApplication.Filters.filter('capitalize', [() =>\n text => `${text.charAt(0).toUpperCase()}${text.slice(1).toLowerCase()}`\n\n]);\n\nApplication.Filters.filter('reverse', [function () {\n return function (items) {\n if (!angular.isArray(items)) {\n return items;\n }\n\n return items.slice().reverse();\n };\n}]);\n\nApplication.Filters.filter('toArray', [function () {\n return function (obj) {\n if (!(obj instanceof Object)) { return obj; }\n return _.map(obj, function (val, key) {\n if (angular.isObject(val)) {\n return Object.defineProperty(val, '$key', { __proto__: null, value: key });\n }\n });\n };\n}]);\n\nApplication.Filters.filter('toIsoDate', [function () {\n return function (date) {\n if (!(date instanceof Date) && !moment.isMoment(date)) { return date; }\n return moment(date).format('YYYY-MM-DD');\n };\n}]);\n\nApplication.Filters.filter('booleanFormat', ['_t', function (_t) {\n return function (boolean) {\n if (((typeof boolean === 'boolean') && boolean) || ((typeof boolean === 'string') && (boolean === 'true'))) {\n return _t('app.shared.buttons.yes');\n } else {\n return _t('app.shared.buttons.no');\n }\n };\n}]);\n\nApplication.Filters.filter('maxCount', ['_t', function (_t) {\n return function (max) {\n if ((typeof max === 'undefined') || (max === null) || ((typeof max === 'number') && (max === 0))) {\n return _t('app.admin.pricing.unlimited');\n } else {\n return max;\n }\n };\n}]);\n\nApplication.Filters.filter('filterDisabled', [function () {\n return function (list, filter) {\n if (angular.isArray(list)) {\n return list.filter(function (e) {\n switch (filter) {\n case 'disabled': return e.disabled;\n case 'enabled': return !e.disabled;\n default: return true;\n }\n });\n } else {\n return list;\n }\n };\n}]);\n\nApplication.Filters.filter('currency', [function ($locale) {\n return function (amount) {\n // if null or undefined pass it through\n return (amount == null)\n ? amount\n : new Intl.NumberFormat(Fablab.intl_locale, { style: 'currency', currency: Fablab.intl_currency }).format(amount);\n };\n}]);\n","import Cookies from 'js-cookie';\n\nexport const cartCookieName = 'fablab_cart_token';\nexport const cartCookieExpire = 7;\n\nexport const getCartToken = () =>\n Cookies.get(cartCookieName);\n\nexport const setCartToken = (cartToken: string) => {\n const cookieOptions = {\n expires: cartCookieExpire\n };\n\n Cookies.set(\n cartCookieName,\n cartToken,\n cookieOptions\n );\n};\n\nexport const removeCartToken = () => {\n Cookies.remove(cartCookieName);\n};\n","import { useState, useEffect } from 'react';\nimport { emitCustomEvent } from 'react-custom-events';\nimport { Order } from '../models/order';\nimport CartAPI from '../api/cart';\nimport { getCartToken, setCartToken } from '../lib/cart-token';\nimport { User } from '../models/user';\n\nexport default function useCart (user?: User) {\n const [cart, setCart] = useState(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n\n useEffect(() => {\n async function createCart () {\n const currentCartToken = getCartToken();\n const data = await CartAPI.create(currentCartToken);\n _setCart(data);\n setLoading(false);\n setCartToken(data.token);\n }\n setLoading(true);\n try {\n createCart();\n } catch (e) {\n setLoading(false);\n setError(e);\n }\n }, []);\n\n const reloadCart = async () => {\n setLoading(true);\n const currentCartToken = getCartToken();\n const data = await CartAPI.create(currentCartToken);\n _setCart(data);\n setLoading(false);\n };\n\n useEffect(() => {\n if (user && cart && (!cart.statistic_profile_id || !cart.operator_profile_id)) {\n reloadCart();\n }\n }, [user]);\n\n const _setCart = (data: Order) => {\n setCart(data);\n emitCustomEvent('CartUpdate', data);\n };\n\n return { loading, cart, error, setCart: _setCart, reloadCart };\n}\n","import _ from 'lodash';\nimport { ApiFilter } from '../models/api';\n\nexport default class ApiLib {\n static filtersToQuery (filters?: ApiFilter, keepNullValues = true): string {\n if (!filters) return '';\n\n return '?' + Object.entries(filters)\n .filter(filter => keepNullValues || !_.isNil(filter[1]))\n .map(filter => `${filter[0]}=${filter[1]}`)\n .join('&');\n }\n}\n","import { Coupon } from '../models/coupon';\n\nexport const computePriceWithCoupon = (price: number, coupon?: Coupon): number => {\n if (!coupon) {\n return price;\n }\n if (coupon.type === 'percent_off') {\n return (Math.round(price * 100) - (Math.round(price * 100) * coupon.percent_off / 100)) / 100;\n } else if (coupon.type === 'amount_off' && price > coupon.amount_off) {\n return (Math.round(price * 100) - Math.round(coupon.amount_off * 100)) / 100;\n }\n return price;\n};\n","'use strict';\n// TODO remove unused?\n(function (angular) {\n const deviseModal = angular.module('DeviseModal', [\n 'Devise',\n 'ui.bootstrap'\n ]);\n deviseModal.run([\n '$uibModal',\n '$http',\n 'Auth',\n '$rootScope',\n function ($uibModal, $http, Auth, $rootScope) {\n let promise = null;\n function reset () {\n promise = null;\n }\n function partial (fn, arg) {\n return function () {\n return fn.call(this, arg);\n };\n }\n $rootScope.$on('devise:unauthorized', function (event, response, deferred) {\n function retryRequestAfterLogin () {\n return promise.then(function () {\n return $http(response.config);\n }).then(deferred.resolve, partial(deferred.reject, response));\n }\n if (!promise) {\n promise = $uibModal.open({\n templateUrl: '/shared/deviseModal.html',\n controller: ['$scope', '$uibModalInstance', function ($scope, $uibModalInstance) {\n const user = $scope.user = {};\n $scope.login = function () {\n $uibModalInstance.close(user);\n };\n $scope.dismiss = function () {\n $uibModalInstance.dismiss('cancel');\n };\n }]\n }).result.finally(reset).then(Auth.login);\n }\n retryRequestAfterLogin();\n });\n }\n ]);\n deviseModal.run([\n '$templateCache',\n function ($templateCache) {\n 'use strict';\n $templateCache.put('deviseModal.html', '
    ');\n }\n ]);\n}(angular));\n","/**\n * A directive to embed a Disqus comments widget on your AngularJS page.\n *\n * For documentation, see the README.md file in this directory\n *\n * Created by Michael on 22/01/14.\n * Copyright Michael Bromley 2014\n * Available under the MIT license.\n */\nangular.module('angularUtils.directives.dirDisqus', [])\n\n .directive('dirDisqus', ['$window', function ($window) {\n return {\n restrict: 'E',\n scope: {\n disqus_shortname: '@disqusShortname',\n disqus_identifier: '@disqusIdentifier',\n disqus_title: '@disqusTitle',\n disqus_url: '@disqusUrl',\n disqus_category_id: '@disqusCategoryId',\n disqus_disable_mobile: '@disqusDisableMobile',\n readyToBind: '@'\n },\n template: '
    comments powered by Disqus',\n link: function (scope) {\n // ensure that the disqus_identifier and disqus_url are both set, otherwise we will run in to identifier conflicts when using URLs with \"#\" in them\n // see http://help.disqus.com/customer/portal/articles/662547-why-are-the-same-comments-showing-up-on-multiple-pages-\n if (typeof scope.disqus_identifier === 'undefined' || typeof scope.disqus_url === 'undefined') {\n throw new Error('Please ensure that the `disqus-identifier` and `disqus-url` attributes are both set.');\n }\n\n scope.$watch('readyToBind', function (isReady) {\n // If the directive has been called without the 'ready-to-bind' attribute, we\n // set the default to \"true\" so that Disqus will be loaded straight away.\n if (!angular.isDefined(isReady)) {\n isReady = 'true';\n }\n if (scope.$eval(isReady)) {\n // put the config variables into separate global vars so that the Disqus script can see them\n $window.disqus_shortname = scope.disqus_shortname;\n $window.disqus_identifier = scope.disqus_identifier;\n $window.disqus_title = scope.disqus_title;\n $window.disqus_url = scope.disqus_url;\n $window.disqus_category_id = scope.disqus_category_id;\n $window.disqus_disable_mobile = scope.disqus_disable_mobile;\n\n // get the remote Disqus script and insert it into the DOM, but only if it not already loaded (as that will cause warnings)\n if (!$window.DISQUS) {\n const dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;\n dsq.src = '//' + scope.disqus_shortname + '.disqus.com/embed.js';\n (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);\n } else {\n $window.DISQUS.reset({\n reload: true,\n config: function () {\n this.page.identifier = scope.disqus_identifier;\n this.page.url = scope.disqus_url;\n this.page.title = scope.disqus_title;\n }\n });\n }\n }\n });\n }\n };\n }]);\n","import { Path } from 'react-hook-form';\nimport { UnpackNestedValue, UseFormSetValue } from 'react-hook-form/dist/types/form';\nimport { FieldPathValue } from 'react-hook-form/dist/types/path';\nimport { FieldValues } from 'react-hook-form/dist/types/fields';\nimport { FileType } from '../models/file';\nimport { Dispatch, SetStateAction } from 'react';\n\nexport default class FileUploadLib {\n public static onRemoveFile (file: FileType, id: string, setFile: Dispatch>, setValue: UseFormSetValue, onFileRemove: () => void) {\n if (file?.id) {\n setValue(\n `${id}._destroy` as Path,\n true as UnpackNestedValue>>\n );\n }\n setValue(\n `${id}.attachment_files` as Path,\n null as UnpackNestedValue>>\n );\n setFile(null);\n if (typeof onFileRemove === 'function') {\n onFileRemove();\n }\n }\n\n public static hasFile (file: FileType): boolean {\n return file?.attachment_name && !file?._destroy;\n }\n}\n","import moment, { unitOfTime } from 'moment';\nimport { IFablab } from '../models/fablab';\nimport { TDateISO } from '../typings/date-iso';\n\ndeclare let Fablab: IFablab;\n\nexport default class FormatLib {\n /**\n * Return the formatted localized date for the given date\n */\n static date = (date: Date|TDateISO): string => {\n return Intl.DateTimeFormat().format(moment(date).toDate());\n };\n\n /**\n * Return the formatted localized time for the given date\n */\n static time = (date: Date|TDateISO): string => {\n return Intl.DateTimeFormat(Fablab.intl_locale, { hour: 'numeric', minute: 'numeric' }).format(moment(date).toDate());\n };\n\n /**\n * Return the formatted localized duration\n */\n static duration = (interval: unitOfTime.DurationConstructor, intervalCount: number): string => {\n return moment.duration(intervalCount, interval).locale(Fablab.moment_locale).humanize();\n };\n\n /**\n * Return the formatted localized amount for the given price (eg. 20.5 => \"20,50 €\")\n */\n static price = (price: number): string => {\n return new Intl.NumberFormat(Fablab.intl_locale, { style: 'currency', currency: Fablab.intl_currency }).format(price);\n };\n\n /**\n * Return currency symbol for currency setting\n */\n static currencySymbol = (): string => {\n return new Intl.NumberFormat('fr', { style: 'currency', currency: Fablab.intl_currency }).formatToParts()[2].value;\n };\n}\n","// this script loads the google tag manager, used by Google Analytics V4\n(function () {\n const GTM = {};\n\n window.dataLayer = window.dataLayer || [];\n function gtag () { window.dataLayer.push(arguments); }\n\n GTM.enableAnalytics = function (trackingId) {\n gtag('js', new Date());\n gtag('config', trackingId);\n\n const node = document.createElement('script');\n const firstScript = document.getElementsByTagName('script')[0];\n node.async = true;\n node.src = `//www.googletagmanager.com/gtag/js?id=${trackingId}`;\n firstScript.parentNode.insertBefore(node, firstScript);\n };\n\n GTM.trackPage = function (url, title) {\n gtag('event', 'page_view', {\n page_location: url,\n page_title: title\n });\n };\n\n GTM.trackLogin = function () {\n gtag('event', 'login');\n };\n\n GTM.trackPurchase = function (transactionId, value) {\n gtag('event', 'purchase', {\n transaction_id: transactionId,\n value,\n currency: Fablab.intl_currency\n });\n };\n\n this.GTM = GTM;\n\n if (typeof module !== 'undefined' && module !== null) {\n module.exports = GTM;\n }\n}).call(this);\n","(function () {\n const objectRef = new function () {}();\n\n const toString = objectRef.toString;\n\n const isNaN = function (value) {\n return Number.isNaN(value);\n };\n\n const isFinite = function (value) {\n return ((typeof window !== 'undefined' && window !== null ? window.isFinite : undefined) || global.isFinite)(value) && !isNaN(parseFloat(value));\n };\n\n const isArray = function (value) {\n return toString.call(value) === '[object Array]';\n };\n\n const timeFormats = [\n {\n name: 'second',\n value: 1e3\n }, {\n name: 'minute',\n value: 6e4\n }, {\n name: 'hour',\n value: 36e5\n }, {\n name: 'day',\n value: 864e5\n }, {\n name: 'week',\n value: 6048e5\n }\n ];\n\n const Humanize = {};\n\n Humanize.intword = function (number, charWidth, decimals) {\n if (decimals == null) {\n decimals = 2;\n }\n /*\n # This method is deprecated. Please use compactInteger instead.\n # intword will be going away in the next major version.\n */\n\n return Humanize.compactInteger(number, decimals);\n };\n\n Humanize.compactInteger = function (input, decimals) {\n let decimalPart, length, output, outputNumber, unsignedNumberString, _i, _len, _length;\n if (decimals == null) {\n decimals = 0;\n }\n decimals = Math.max(decimals, 0);\n const number = parseInt(input, 10);\n const signString = number < 0 ? '-' : '';\n const unsignedNumber = Math.abs(number);\n unsignedNumberString = '' + unsignedNumber;\n const numberLength = unsignedNumberString.length;\n const numberLengths = [13, 10, 7, 4];\n const bigNumPrefixes = ['T', 'B', 'M', 'k'];\n if (unsignedNumber < 1000) {\n if (decimals > 0) {\n unsignedNumberString += '.' + (Array(decimals + 1).join('0'));\n }\n return '' + signString + unsignedNumberString;\n }\n if (numberLength > numberLengths[0] + 3) {\n return number.toExponential(decimals).replace('e+', 'x10^');\n }\n for (_i = 0, _len = numberLengths.length; _i < _len; _i++) {\n _length = numberLengths[_i];\n if (numberLength >= _length) {\n length = _length;\n break;\n }\n }\n const decimalIndex = numberLength - length + 1;\n const unsignedNumberCharacterArray = unsignedNumberString.split('');\n const wholePartArray = unsignedNumberCharacterArray.slice(0, decimalIndex);\n const decimalPartArray = unsignedNumberCharacterArray.slice(decimalIndex, decimalIndex + decimals + 1);\n const wholePart = wholePartArray.join('');\n decimalPart = decimalPartArray.join('');\n if (decimalPart.length < decimals) {\n decimalPart += '' + (Array(decimals - decimalPart.length + 1).join('0'));\n }\n if (decimals === 0) {\n output = '' + signString + wholePart + bigNumPrefixes[numberLengths.indexOf(length)];\n } else {\n outputNumber = (+('' + wholePart + '.' + decimalPart)).toFixed(decimals);\n output = '' + signString + outputNumber + bigNumPrefixes[numberLengths.indexOf(length)];\n }\n return output;\n };\n\n Humanize.intcomma = Humanize.intComma = function (number, decimals) {\n if (decimals == null) {\n decimals = 0;\n }\n return Humanize.formatNumber(number, decimals);\n };\n\n Humanize.filesize = Humanize.fileSize = function (filesize) {\n let sizeStr;\n if (filesize >= 1073741824) {\n sizeStr = Humanize.formatNumber(filesize / 1073741824, 2, '') + ' GB';\n } else if (filesize >= 1048576) {\n sizeStr = Humanize.formatNumber(filesize / 1048576, 2, '') + ' MB';\n } else if (filesize >= 1024) {\n sizeStr = Humanize.formatNumber(filesize / 1024, 0) + ' KB';\n } else {\n sizeStr = Humanize.formatNumber(filesize, 0) + Humanize.pluralize(filesize, ' byte');\n }\n return sizeStr;\n };\n\n Humanize.formatNumber = function (number, precision, thousand, decimal) {\n if (precision == null) {\n precision = 0;\n }\n if (thousand == null) {\n thousand = ',';\n }\n if (decimal == null) {\n decimal = '.';\n }\n const firstComma = function (number, thousand, position) {\n if (position) {\n return number.substr(0, position) + thousand;\n } else {\n return '';\n }\n };\n const commas = function (number, thousand, position) {\n return number.substr(position).replace(/(\\d{3})(?=\\d)/g, '$1' + thousand);\n };\n const decimals = function (number, decimal, usePrecision) {\n if (usePrecision) {\n return decimal + Humanize.toFixed(Math.abs(number), usePrecision).split('.')[1];\n } else {\n return '';\n }\n };\n const usePrecision = Humanize.normalizePrecision(precision);\n const negative = number < 0 ? '-' : '';\n const base = parseInt(Humanize.toFixed(Math.abs(number || 0), usePrecision), 10) + '';\n const mod = base.length > 3 ? base.length % 3 : 0;\n return negative + firstComma(base, thousand, mod) + commas(base, thousand, mod) + decimals(number, decimal, usePrecision);\n };\n\n Humanize.toFixed = function (value, precision) {\n if (precision == null) {\n precision = Humanize.normalizePrecision(precision, 0);\n }\n const power = Math.pow(10, precision);\n return (Math.round(value * power) / power).toFixed(precision);\n };\n\n Humanize.normalizePrecision = function (value, base) {\n value = Math.round(Math.abs(value));\n if (isNaN(value)) {\n return base;\n } else {\n return value;\n }\n };\n\n Humanize.ordinal = function (value) {\n let end;\n const number = parseInt(value, 10);\n if (number === 0) {\n return value;\n }\n const specialCase = number % 100;\n if (specialCase === 11 || specialCase === 12 || specialCase === 13) {\n return '' + number + 'th';\n }\n const leastSignificant = number % 10;\n switch (leastSignificant) {\n case 1:\n end = 'st';\n break;\n case 2:\n end = 'nd';\n break;\n case 3:\n end = 'rd';\n break;\n default:\n end = 'th';\n }\n return '' + number + end;\n };\n\n Humanize.times = function (value, overrides) {\n let number, smallTimes, _ref;\n if (overrides == null) {\n overrides = {};\n }\n if (isFinite(value) && value >= 0) {\n number = parseFloat(value);\n smallTimes = ['never', 'once', 'twice'];\n if (overrides[number] != null) {\n return '' + overrides[number];\n } else {\n return '' + (((_ref = smallTimes[number]) != null ? _ref.toString() : undefined) || number.toString() + ' times');\n }\n }\n };\n\n Humanize.pluralize = function (number, singular, plural) {\n if (!((number != null) && (singular != null))) {\n return;\n }\n if (plural == null) {\n plural = singular + 's';\n }\n if (parseInt(number, 10) === 1) {\n return singular;\n } else {\n return plural;\n }\n };\n\n Humanize.truncate = function (str, length, ending) {\n if (length == null) {\n length = 100;\n }\n if (ending == null) {\n ending = '...';\n }\n if (str.length > length) {\n return str.substring(0, length - ending.length) + ending;\n } else {\n return str;\n }\n };\n\n Humanize.truncatewords = Humanize.truncateWords = function (string, length) {\n let i, result;\n const array = string.split(' ');\n result = '';\n i = 0;\n while (i < length) {\n if (array[i] != null) {\n result += '' + array[i] + ' ';\n }\n i++;\n }\n if (array.length > length) {\n return result + '...';\n }\n };\n\n Humanize.truncatenumber = Humanize.boundedNumber = function (num, bound, ending) {\n let result;\n if (bound == null) {\n bound = 100;\n }\n if (ending == null) {\n ending = '+';\n }\n result = null;\n if (isFinite(num) && isFinite(bound)) {\n if (num > bound) {\n result = bound + ending;\n }\n }\n return (result || num).toString();\n };\n\n Humanize.oxford = function (items, limit, limitStr) {\n let extra, limitIndex;\n const numItems = items.length;\n if (numItems < 2) {\n return '' + items;\n } else if (numItems === 2) {\n return items.join(' and ');\n } else if ((limit != null) && numItems > limit) {\n extra = numItems - limit;\n limitIndex = limit;\n if (limitStr == null) {\n limitStr = ', and ' + extra + ' ' + (Humanize.pluralize(extra, 'other'));\n }\n } else {\n limitIndex = -1;\n limitStr = ', and ' + items[numItems - 1];\n }\n return items.slice(0, limitIndex).join(', ') + limitStr;\n };\n\n Humanize.dictionary = function (object, joiner, separator) {\n let defs, key, result, val;\n if (joiner == null) {\n joiner = ' is ';\n }\n if (separator == null) {\n separator = ', ';\n }\n result = '';\n if ((object != null) && typeof object === 'object' && Object.prototype.toString.call(object) !== '[object Array]') {\n defs = [];\n for (key in object) {\n val = object[key];\n defs.push('' + key + joiner + val);\n }\n result = defs.join(separator);\n }\n return result;\n };\n\n Humanize.frequency = function (list, verb) {\n let str;\n if (!isArray(list)) {\n return;\n }\n const len = list.length;\n const times = Humanize.times(len);\n if (len === 0) {\n str = '' + times + ' ' + verb;\n } else {\n str = '' + verb + ' ' + times;\n }\n return str;\n };\n\n Humanize.pace = function (value, intervalMs, unit) {\n let f, prefix, relativePace, timeUnit, _i, _len;\n if (unit == null) {\n unit = 'time';\n }\n if (value === 0 || intervalMs === 0) {\n return 'No ' + (Humanize.pluralize(unit));\n }\n prefix = 'Approximately';\n timeUnit = null;\n const rate = value / intervalMs;\n for (_i = 0, _len = timeFormats.length; _i < _len; _i++) {\n f = timeFormats[_i];\n relativePace = rate * f.value;\n if (relativePace > 1) {\n timeUnit = f.name;\n break;\n }\n }\n if (!timeUnit) {\n prefix = 'Less than';\n relativePace = 1;\n timeUnit = timeFormats[timeFormats.length - 1].name;\n }\n const roundedPace = Math.round(relativePace);\n unit = Humanize.pluralize(roundedPace, unit);\n return '' + prefix + ' ' + roundedPace + ' ' + unit + ' per ' + timeUnit;\n };\n\n Humanize.nl2br = function (string, replacement) {\n if (replacement == null) {\n replacement = '
    ';\n }\n return string.replace(/\\n/g, replacement);\n };\n\n Humanize.br2nl = function (string, replacement) {\n if (replacement == null) {\n replacement = '\\r\\n';\n }\n return string.replace(//g, replacement);\n };\n\n Humanize.capitalize = function (string, downCaseTail) {\n if (downCaseTail == null) {\n downCaseTail = false;\n }\n return '' + (string.charAt(0).toUpperCase()) + (downCaseTail ? string.slice(1).toLowerCase() : string.slice(1));\n };\n\n Humanize.capitalizeAll = function (string) {\n return string.replace(/(?:^|\\s)\\S/g, function (a) {\n return a.toUpperCase();\n });\n };\n\n Humanize.titlecase = Humanize.titleCase = function (string) {\n const smallWords = /\\b(a|an|and|at|but|by|de|en|for|if|in|of|on|or|the|to|via|vs?\\.?)\\b/i;\n const internalCaps = /\\S+[A-Z]+\\S*/;\n const splitOnWhiteSpaceRegex = /\\s+/;\n const splitOnHyphensRegex = /-/;\n const doTitleCase = function (_string, hyphenated, firstOrLast) {\n let index, word, _i, _len;\n if (hyphenated == null) {\n hyphenated = false;\n }\n if (firstOrLast == null) {\n firstOrLast = true;\n }\n const titleCasedArray = [];\n const stringArray = _string.split(hyphenated ? splitOnHyphensRegex : splitOnWhiteSpaceRegex);\n for (index = _i = 0, _len = stringArray.length; _i < _len; index = ++_i) {\n word = stringArray[index];\n if (word.indexOf('-') !== -1) {\n titleCasedArray.push(doTitleCase(word, true, index === 0 || index === stringArray.length - 1));\n continue;\n }\n if (firstOrLast && (index === 0 || index === stringArray.length - 1)) {\n titleCasedArray.push(internalCaps.test(word) ? word : Humanize.capitalize(word));\n continue;\n }\n if (internalCaps.test(word)) {\n titleCasedArray.push(word);\n } else if (smallWords.test(word)) {\n titleCasedArray.push(word.toLowerCase());\n } else {\n titleCasedArray.push(Humanize.capitalize(word));\n }\n }\n return titleCasedArray.join(hyphenated ? '-' : ' ');\n };\n return doTitleCase(string);\n };\n\n this.Humanize = Humanize;\n\n if (typeof module !== 'undefined' && module !== null) {\n module.exports = Humanize;\n }\n}).call(this);\n","import i18n from 'i18next';\nimport ICU from 'i18next-icu';\nimport HttpApi from 'i18next-http-backend';\nimport { initReactI18next } from 'react-i18next';\nimport { IFablab } from '../models/fablab';\n\ndeclare let Fablab: IFablab;\n\ni18n\n .use(ICU)\n .use(HttpApi)\n .use(initReactI18next)\n .init({\n lng: Fablab.locale,\n fallbackLng: 'en',\n ns: ['admin', 'logged', 'public', 'shared'],\n defaultNS: 'shared',\n backend: {\n loadPath: '/api/translations/{{lng}}/app.{{ns}}'\n },\n interpolation: {\n escapeValue: false\n }\n });\n\nexport default i18n;\n","import { computePriceWithCoupon } from './coupon';\nimport { Order } from '../models/order';\n\nexport default class OrderLib {\n /**\n * Get the order item total\n */\n static itemAmount = (item): number => {\n return item.quantity * Math.round(item.amount * 100) / 100;\n };\n\n /**\n * return true if order has offered item\n */\n static hasOfferedItem = (order: Order): boolean => {\n return order.order_items_attributes\n .filter(i => i.is_offered).length > 0;\n };\n\n /**\n * Get the offered item total\n */\n static offeredAmount = (order: Order): number => {\n return order.order_items_attributes\n .filter(i => i.is_offered)\n .map(i => Math.round(i.amount * 100) * i.quantity)\n .reduce((acc, curr) => acc + curr, 0) / 100;\n };\n\n /**\n * Get the total amount before offered amount\n */\n static totalBeforeOfferedAmount = (order: Order): number => {\n return (Math.round(order.total * 100) + Math.round(this.offeredAmount(order) * 100)) / 100;\n };\n\n /**\n * Get the coupon amount\n */\n static couponAmount = (order: Order): number => {\n return (Math.round(order.total * 100) - Math.round(computePriceWithCoupon(order.total, order.coupon) * 100)) / 100.00;\n };\n\n /**\n * Get the paid total amount\n */\n static paidTotal = (order: Order): number => {\n return computePriceWithCoupon(order.total, order.coupon);\n };\n\n /**\n * Returns a className according to the status\n */\n static statusColor = (order: Order) => {\n switch (order.state) {\n case 'cart':\n return 'cart';\n case 'paid':\n return 'paid';\n case 'payment_failed':\n return 'error';\n case 'ready':\n return 'ready';\n case 'canceled':\n return 'canceled';\n case 'in_progress':\n return 'pending';\n default:\n return 'normal';\n }\n };\n\n /**\n * Returns a status text according to the status\n */\n static statusText = (order: Order) => {\n return order.state;\n };\n}\n","type baseType = string|number|boolean;\ntype ValueOrArray = T | ValueOrArray[];\ntype NestedBaseArray = ValueOrArray;\n\nexport default class ParsingLib {\n /**\n * Try to parse the given value to get the value with the matching type.\n * It supports parsing arrays.\n */\n static parse = (value: string|string[]): NestedBaseArray => {\n let parsedValue: NestedBaseArray = value;\n if (Array.isArray(value)) {\n parsedValue = [];\n for (const item of value) {\n parsedValue.push(ParsingLib.parse(item));\n }\n } else {\n parsedValue = ParsingLib.simpleParse(value);\n }\n return parsedValue;\n };\n\n /**\n * Try to parse the given value to get the value with the matching type.\n * Arrays are not supported.\n */\n static simpleParse = (value: string): baseType => {\n let parsedValue: baseType = value;\n if (ParsingLib.isBoolean(value)) {\n parsedValue = (value === 'true');\n } else if (ParsingLib.isInteger(value)) {\n parsedValue = parseInt(value, 10);\n }\n return parsedValue;\n };\n\n /**\n * Check if the provided string represents an integer\n */\n static isInteger = (value: string): boolean => {\n return (parseInt(value, 10).toString() === value);\n };\n\n /**\n * Check if the provided string represents a boolean value\n */\n static isBoolean = (value: string): boolean => {\n return ['true', 'false'].includes(value);\n };\n}\n","if (typeof Object.assign !== 'function') {\n // Must be writable: true, enumerable: false, configurable: true\n Object.defineProperty(Object, 'assign', {\n value: function assign (target, varArgs) { // .length of function is 2\n 'use strict';\n if (target == null) { // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n const to = Object(target);\n\n for (let index = 1; index < arguments.length; index++) {\n const nextSource = arguments[index];\n\n if (nextSource != null) { // Skip over if undefined or null\n for (const nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n },\n writable: true,\n configurable: true\n });\n}\n\nNumber.isInteger = Number.isInteger || function (value) {\n return typeof value === 'number' &&\n isFinite(value) &&\n Math.floor(value) === value;\n};\n","import { ProductCategory } from '../models/product-category';\nimport {\n initialFilters, Product,\n ProductIndexFilter,\n ProductIndexFilterIds, ProductIndexFilterUrl, ProductResourcesFetching,\n stockMovementInReasons,\n stockMovementOutReasons,\n StockMovementReason\n} from '../models/product';\nimport { Machine } from '../models/machine';\nimport { StateParams } from '@uirouter/angularjs';\nimport ParsingLib from './parsing';\nimport ProductCategoryAPI from '../api/product-category';\nimport MachineAPI from '../api/machine';\nimport { Updater } from 'use-immer';\n\nexport default class ProductLib {\n /**\n * Map product categories by position\n * @param categories unsorted categories, as returned by the API\n */\n static sortCategories = (categories: Array): Array => {\n const sortedCategories = categories\n .filter(c => !c.parent_id)\n .sort((a, b) => a.position - b.position);\n const childrenCategories = categories\n .filter(c => typeof c.parent_id === 'number')\n .sort((a, b) => b.position - a.position);\n childrenCategories.forEach(c => {\n const parentIndex = sortedCategories.findIndex(i => i.id === c.parent_id);\n sortedCategories.splice(parentIndex + 1, 0, c);\n });\n return sortedCategories;\n };\n\n /**\n * Return the translation key associated with the given reason\n */\n static stockMovementReasonTrKey = (reason: StockMovementReason): string => {\n return `app.admin.store.stock_movement_reason.${reason}`;\n };\n\n static stockStatusTrKey = (product: Product): string => {\n if (product.stock.external < (product.quantity_min || 1)) {\n return 'app.public.stock_status.out_of_stock';\n }\n if (product.low_stock_threshold && product.stock.external <= product.low_stock_threshold) {\n return 'app.public.stock_status.limited_stock';\n }\n return 'app.public.stock_status.available';\n };\n\n /**\n * Check if the given stock movement is of type 'in' or 'out'\n */\n static stockMovementType = (reason: StockMovementReason): 'in' | 'out' => {\n if ((stockMovementInReasons as readonly StockMovementReason[]).includes(reason)) return 'in';\n if ((stockMovementOutReasons as readonly StockMovementReason[]).includes(reason)) return 'out';\n\n throw new Error(`Unexpected stock movement reason: ${reason}`);\n };\n\n /**\n * Return the given quantity, prefixed by its addition operator (- or +), if needed\n */\n static absoluteStockMovement = (quantity: number, reason: StockMovementReason): string => {\n if (ProductLib.stockMovementType(reason) === 'in') {\n return `+${quantity}`;\n } else {\n if (quantity < 0) return quantity.toString();\n return `-${quantity}`;\n }\n };\n\n /**\n * Add or remove the given category from the given list;\n * This may cause parent/children categories to be selected or unselected accordingly.\n */\n static categoriesSelectionTree = (allCategories: Array, currentSelection: Array, category: ProductCategory, operation: 'add'|'remove'): Array => {\n let list = [...currentSelection];\n const children = allCategories\n .filter(el => el.parent_id === category.id);\n\n if (operation === 'add') {\n list.push(category);\n if (children.length) {\n // if a parent category is selected, we automatically select all its children\n list = [...Array.from(new Set([...list, ...children]))];\n }\n } else {\n list.splice(list.indexOf(category), 1);\n const parent = allCategories.find(p => p.id === category.parent_id);\n if (category.parent_id && list.includes(parent)) {\n // if a child category is unselected, we unselect its parent\n list.splice(list.indexOf(parent), 1);\n }\n if (children.length) {\n // if a parent category is unselected, we unselect all its children\n children.forEach(child => {\n list.splice(list.indexOf(child), 1);\n });\n }\n }\n return list;\n };\n\n /**\n * Extract the IDS from the filters to pass them to the API\n */\n static indexFiltersToIds = (filters: ProductIndexFilter): ProductIndexFilterIds => {\n return {\n ...filters,\n categories: filters.categories?.map(c => c.id),\n machines: filters.machines?.map(m => m.id)\n };\n };\n\n /**\n * Prepare the filtering data from the filters to pass them to the router URL\n */\n static indexFiltersToRouterParams = (filters: ProductIndexFilter): ProductIndexFilterUrl => {\n let categoryTypeUrl = null;\n let category = null;\n if (filters.categories.length > 0) {\n categoryTypeUrl = filters.categories[0].parent_id === null ? 'c' : 'sc';\n category = filters.categories.map(c => c.slug)[0];\n }\n return {\n ...filters,\n machines: filters.machines?.map(m => m.slug),\n categories: filters.categories?.map(c => c.slug),\n category,\n categoryTypeUrl\n };\n };\n\n /**\n * Parse the provided URL and return a ready-to-use filter object\n */\n static readFiltersFromUrl = (params: StateParams, machines: Array, categories: Array, defaultFilters = initialFilters): ProductIndexFilter => {\n const res: ProductIndexFilter = { ...defaultFilters };\n for (const key in params) {\n if (['#', 'categoryTypeUrl'].includes(key) || !Object.prototype.hasOwnProperty.call(params, key)) continue;\n\n const value = ParsingLib.parse(params[key]) || defaultFilters[key];\n switch (key) {\n case 'category': {\n const category = categories?.find(c => c.slug === value);\n const subCategories = category ? categories?.filter(c => c.parent_id === category.id) : [];\n res.categories = category ? [category, ...subCategories] : [];\n break;\n }\n case 'categories':\n res.categories = [...categories?.filter(c => (value as Array)?.includes(c.slug))];\n break;\n case 'machines':\n res.machines = machines?.filter(m => (value as Array)?.includes(m.slug));\n break;\n default:\n res[key] = value;\n }\n }\n return res;\n };\n\n /**\n * Fetch the initial ressources needed to initialise the store and its filters (categories and machines)\n */\n static fetchInitialResources = (setResources: Updater, onError: (message: string) => void, onProductCategoryFetched?: (data: Array) => void) => {\n ProductCategoryAPI.index().then(data => {\n setResources(draft => {\n return { ...draft, categories: { data: ProductLib.sortCategories(data), ready: true } };\n });\n if (typeof onProductCategoryFetched === 'function') onProductCategoryFetched(ProductLib.sortCategories(data));\n }).catch(error => {\n onError(error);\n });\n MachineAPI.index({ disabled: false }).then(data => {\n setResources(draft => {\n return { ...draft, machines: { data, ready: true } };\n });\n }).catch(onError);\n };\n\n /**\n * Update the given filter in memory with the new provided value\n */\n static updateFilter = (setResources: Updater, key: keyof ProductIndexFilter, value: unknown): void => {\n setResources(draft => {\n return {\n ...draft,\n filters: {\n ...draft.filters,\n data: {\n ...draft.filters.data,\n [key]: value\n }\n }\n };\n });\n };\n}\n","// Inspired by: https://github.com/pHAlkaline/summernote-plugins/tree/master/plugins/nugget\n\n(function (factory) {\n /* global define */\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(['jquery'], factory);\n } else if (typeof module === 'object' && module.exports) {\n // Node/CommonJS\n module.exports = factory(require('jquery'));\n } else {\n // Browser globals\n factory(window.jQuery);\n }\n}(function ($) {\n $.extend($.summernote.options, {\n nugget: {\n list: []\n }\n\n });\n $.extend(true, $.summernote, {\n // add localization texts\n lang: {\n 'en-US': {\n nugget: {\n Nugget: 'Nugget',\n Insert_nugget: 'Insert Nugget'\n\n }\n },\n 'en-GB': {\n nugget: {\n Nugget: 'Nugget',\n Insert_nugget: 'Insert Nugget'\n\n }\n },\n 'pt-PT': {\n nugget: {\n Nugget: 'Pepita',\n Insert_nugget: 'Inserir pepita'\n\n }\n },\n 'it-IT': {\n nugget: {\n Nugget: 'Pepite',\n Insert_nugget: 'Pepite Inserto'\n\n }\n }\n }\n });\n // Extends plugins for adding nuggets.\n // - plugin is external module for customizing.\n $.extend($.summernote.plugins, {\n /**\n * @param {Object} context - context object has status of editor.\n */\n nugget: function (context) {\n // ui has renders to build ui elements.\n // - you can create a button with `ui.button`\n const ui = $.summernote.ui;\n const options = context.options.nugget;\n const contextOptions = context.options;\n const lang = contextOptions.langInfo;\n const defaultOptions = {\n label: lang.nugget.Nugget,\n tooltip: lang.nugget.Insert_nugget\n };\n\n // Assign default values if not supplied\n for (const propertyName in defaultOptions) {\n if (Object.prototype.hasOwnProperty.call(options, propertyName) === false) {\n options[propertyName] = defaultOptions[propertyName];\n }\n }\n\n // add hello button\n context.memo('button.nugget', function () {\n // create button\n\n const button = ui.buttonGroup([\n ui.button({\n className: 'dropdown-toggle',\n contents: '' + options.label + ' ',\n tooltip: options.tooltip,\n data: {\n toggle: 'dropdown'\n }\n }),\n ui.dropdown({\n className: 'dropdown-nugget',\n contents: options.list.map((i) => {\n const li = document.createElement('li');\n const a = document.createElement('a');\n a.innerHTML = i.trim();\n a.setAttribute('href', '#');\n li.appendChild(a);\n return li.outerHTML;\n }),\n click: function (event) {\n event.preventDefault();\n\n const $button = $(event.target);\n const value = $button[0].outerHTML;\n const node = document.createElement('div');\n node.innerHTML = value.trim();\n context.invoke('editor.insertNode', node.firstChild);\n }\n })\n ]);\n\n // create jQuery object from button instance.\n return button.render();\n });\n }\n\n });\n}));\n","import { isNil, isEmpty } from 'lodash';\nimport { User } from '../models/user';\nimport { supportedNetworks, SupportedSocialNetwork } from '../models/social-network';\n\nexport default class UserLib {\n private readonly user: User;\n\n constructor (user: User) {\n this.user = user;\n }\n\n /**\n * Check if the current user has privileged access for resources concerning the provided customer\n */\n isPrivileged = (customer: User): boolean => {\n if (this.user?.role === 'admin' || this.user?.role === 'manager') {\n return (this.user?.id !== customer.id);\n }\n\n return false;\n };\n\n /**\n * Filter social networks from the user's profile\n */\n getUserSocialNetworks = (): { name: string, url: string }[] => {\n if (!this.isUser()) {\n return supportedNetworks.map(network => {\n return { name: network, url: '' };\n });\n }\n\n const userNetworks = [];\n for (const [name, url] of Object.entries(this.user.profile_attributes)) {\n supportedNetworks.includes(name as SupportedSocialNetwork) && userNetworks.push({ name, url });\n }\n return userNetworks;\n };\n\n /**\n * Return the email given by the SSO provider, parsed if needed\n * @return {String} E-mail of the current user\n */\n ssoEmail = (): string => {\n const { email } = this.user;\n if (email) {\n const duplicate = email.match(/^<([^>]+)>.{20}-duplicate$/);\n if (duplicate) {\n return duplicate[1];\n }\n }\n return email;\n };\n\n /**\n * Test if the user's mail is marked as duplicate\n */\n hasDuplicate = (): boolean => {\n const { email } = this.user;\n if (email) {\n return !(email.match(/^<([^>]+)>.{20}-duplicate$/) === null);\n }\n };\n\n /**\n * Check if the current user is not empty\n */\n private isUser = (): boolean => {\n if (isNil(this.user)) return false;\n\n return !(isEmpty(this.user.invoicing_profile_attributes) && isEmpty(this.user.statistic_profile_attributes));\n };\n}\n","import { Wallet } from '../models/wallet';\n\nexport default class WalletLib {\n private wallet: Wallet;\n\n constructor (wallet: Wallet) {\n this.wallet = wallet;\n }\n\n /**\n * Return the price remaining to pay, after we have used the maximum possible amount in the wallet.\n */\n computeRemainingPrice = (price: number): number => {\n if (this.wallet.amount > price) {\n return 0;\n } else {\n return price - this.wallet.amount;\n }\n };\n}\n","export enum CustomAssetName {\n LogoFile = 'logo-file',\n LogoBlackFile = 'logo-black-file',\n CguFile = 'cgu-file',\n CgvFile = 'cgv-file',\n ProfileImageFile = 'profile-image-file',\n FaviconFile = 'favicon-file'\n}\n\nexport interface CustomAsset {\n id: number,\n name: CustomAssetName,\n custom_asset_file_attributes: {\n id: number,\n attachment: string\n attachment_url: string\n }\n}\n","import { TDateISO, TDateISODate } from '../typings/date-iso';\n\nexport enum PaymentScheduleItemState {\n New = 'new',\n Pending = 'pending',\n RequirePaymentMethod = 'requires_payment_method',\n RequireAction = 'requires_action',\n Paid = 'paid',\n Error = 'error',\n GatewayCanceled = 'gateway_canceled'\n}\n\nexport enum PaymentMethod {\n Card = 'card',\n Transfer = 'transfer',\n Check = 'check'\n}\n\nexport interface PaymentScheduleItem {\n id: number,\n amount: number,\n due_date: TDateISO,\n state: PaymentScheduleItemState,\n invoice_id: number,\n payment_method: PaymentMethod,\n client_secret?: string\n}\n\nexport interface PaymentSchedule {\n max_length?: number;\n id: number,\n total?: number,\n reference?: string,\n payment_method: PaymentMethod,\n items?: Array,\n created_at?: TDateISO,\n chained_footprint?: boolean,\n main_object?: {\n type: string,\n id: number\n },\n user?: {\n id: number,\n name: string\n },\n operator?: {\n id: number,\n first_name: string,\n last_name: string,\n },\n gateway?: 'PayZen' | 'Stripe',\n}\n\nexport interface PaymentScheduleIndexRequest {\n query: {\n reference?: string,\n customer?: string,\n date?: TDateISODate,\n page: number,\n size: number\n }\n}\n\nexport interface CashCheckResponse {\n state: PaymentScheduleItemState,\n payment_method: PaymentMethod\n}\n\nexport interface RefreshItemResponse {\n state: 'refreshed'\n}\n\nexport interface PayItemResponse {\n status: 'draft' | 'open' | 'paid' | 'uncollectible' | 'void',\n error?: string\n}\n\nexport interface CancelScheduleResponse {\n canceled_at: TDateISO\n}\n","import { Reservation } from './reservation';\nimport { SubscriptionRequest } from './subscription';\n\nexport interface PaymentConfirmation {\n requires_action?: boolean,\n payment_intent_client_secret?: string,\n type?: 'payment' | 'subscription',\n subscription_id?: string,\n success?: boolean,\n error?: {\n statusText: string\n }\n}\n\nexport interface IntentConfirmation {\n client_secret: string\n}\n\nexport enum PaymentMethod {\n Card = 'card',\n Check = 'check',\n Transfer = 'transfer',\n Other = ''\n}\n\nexport type CartItem = { reservation: Reservation }|\n { subscription: SubscriptionRequest }|\n { prepaid_pack: { id: number } }|\n { free_extension: { end_at: Date } };\n\nexport interface ShoppingCart {\n customer_id: number,\n // WARNING: items ordering matters! The first item in the array will be considered as the main item\n items: Array,\n coupon_code?: string,\n payment_schedule?: boolean,\n payment_method: PaymentMethod\n}\n\nexport interface UpdateCardResponse {\n updated: boolean,\n error?: string\n}\n","import { TDateISO } from '../typings/date-iso';\nimport { ApiFilter, ApiResource, PaginatedIndex } from './api';\nimport { ProductCategory } from './product-category';\nimport { Machine } from './machine';\n\nexport type ProductSortOption = 'name-asc' | 'name-desc' | 'amount-asc' | 'amount-desc' | '';\n\nexport interface ProductIndexFilter {\n is_active?: boolean,\n is_available?: boolean,\n page?: number,\n categories?: ProductCategory[],\n machines?: Machine[],\n keywords?: string[],\n stock_type?: 'internal' | 'external',\n stock_from?: number,\n stock_to?: number,\n sort?: ProductSortOption\n}\n\nexport interface ProductIndexFilterIds extends Omit, 'machines'>, ApiFilter {\n categories?: Array,\n machines?: Array,\n}\n\nexport interface ProductIndexFilterUrl extends Omit, 'machines'> {\n categoryTypeUrl?: 'c' | 'sc',\n category?: string,\n machines?: Array,\n categories?: Array,\n}\n\nexport interface ProductResourcesFetching {\n machines: ApiResource>,\n categories: ApiResource>,\n filters: ApiResource\n}\n\nexport const initialFilters: ProductIndexFilter = {\n categories: [],\n keywords: [],\n machines: [],\n is_active: false,\n is_available: false,\n stock_type: 'external',\n stock_from: 0,\n stock_to: 0,\n page: 1,\n sort: ''\n};\n\nexport const initialResources: ProductResourcesFetching = {\n machines: {\n data: [],\n ready: false\n },\n categories: {\n data: [],\n ready: false\n },\n filters: {\n data: initialFilters,\n ready: false\n }\n};\n\nexport type StockType = 'internal' | 'external' | 'all';\n\nexport const stockMovementInReasons = ['inward_stock', 'returned', 'cancelled', 'inventory_fix', 'other_in'] as const;\nexport const stockMovementOutReasons = ['sold', 'missing', 'damaged', 'other_out'] as const;\nexport const stockMovementAllReasons = [...stockMovementInReasons, ...stockMovementOutReasons] as const;\n\nexport type StockMovementReason = typeof stockMovementAllReasons[number];\n\nexport interface Stock {\n internal?: number,\n external?: number,\n}\n\nexport type ProductsIndex = PaginatedIndex;\n\nexport interface ProductStockMovement {\n id?: number,\n product_id?: number,\n quantity?: number,\n reason?: StockMovementReason,\n stock_type?: StockType,\n remaining_stock?: number,\n date?: TDateISO\n}\n\nexport type StockMovementIndex = PaginatedIndex;\n\nexport interface StockMovementIndexFilter extends ApiFilter {\n reason?: StockMovementReason,\n stock_type?: StockType,\n page?: number,\n}\n\nexport interface Product {\n id?: number,\n name?: string,\n slug?: string,\n sku?: string,\n description?: string,\n is_active?: boolean,\n product_category_id?: number,\n is_active_price?: boolean,\n amount?: number,\n quantity_min?: number,\n stock?: Stock,\n low_stock_alert?: boolean,\n low_stock_threshold?: number,\n machine_ids?: number[],\n created_at?: TDateISO,\n product_files_attributes?: Array<{\n id?: number,\n attachment?: File,\n attachment_files?: FileList,\n attachment_name?: string,\n attachment_url?: string,\n _destroy?: boolean\n }>,\n product_images_attributes?: Array<{\n id?: number,\n attachment?: File,\n attachment_files?: FileList,\n attachment_name?: string,\n attachment_url?: string,\n thumb_attachment_url?: string,\n _destroy?: boolean,\n is_main?: boolean\n }>,\n product_stock_movements_attributes?: Array,\n}\n","import { HistoryValue } from './history-value';\nimport { TDateISO } from '../typings/date-iso';\n\nexport const homePageSettings = [\n 'twitter_name',\n 'home_blogpost',\n 'home_content',\n 'home_css',\n 'upcoming_events_shown'\n] as const;\n\nexport const privacyPolicySettings = [\n 'privacy_draft',\n 'privacy_body',\n 'privacy_dpo'\n] as const;\n\nexport const aboutPageSettings = [\n 'about_title',\n 'about_body',\n 'about_contacts',\n 'link_name'\n] as const;\n\nexport const socialNetworksSettings = [\n 'facebook',\n 'twitter',\n 'viadeo',\n 'linkedin',\n 'instagram',\n 'youtube',\n 'vimeo',\n 'dailymotion',\n 'github',\n 'echosciences',\n 'pinterest',\n 'lastfm',\n 'flickr'\n] as const;\n\nexport const messagesSettings = [\n 'machine_explications_alert',\n 'training_explications_alert',\n 'training_information_message',\n 'subscription_explications_alert',\n 'event_explications_alert',\n 'space_explications_alert'\n] as const;\n\nexport const invoicesSettings = [\n 'invoice_logo',\n 'invoice_reference',\n 'invoice_code-active',\n 'invoice_code-value',\n 'invoice_order-nb',\n 'invoice_VAT-active',\n 'invoice_VAT-rate',\n 'invoice_VAT-rate_Machine',\n 'invoice_VAT-rate_Training',\n 'invoice_VAT-rate_Space',\n 'invoice_VAT-rate_Event',\n 'invoice_VAT-rate_Subscription',\n 'invoice_VAT-rate_Product',\n 'invoice_text',\n 'invoice_legals',\n 'invoice_prefix',\n 'payment_schedule_prefix'\n] as const;\n\nexport const bookingSettings = [\n 'booking_window_start',\n 'booking_window_end',\n 'booking_move_enable',\n 'booking_move_delay',\n 'booking_cancel_enable',\n 'booking_cancel_delay',\n 'reminder_enable',\n 'reminder_delay',\n 'visibility_yearly',\n 'visibility_others',\n 'display_name_enable',\n 'book_overlapping_slots',\n 'slot_duration',\n 'overlapping_categories'\n] as const;\n\nexport const themeSettings = [\n 'main_color',\n 'secondary_color'\n] as const;\n\nexport const titleSettings = [\n 'fablab_name',\n 'name_genre'\n] as const;\n\nexport const accountingSettings = [\n 'accounting_journal_code',\n 'accounting_card_client_code',\n 'accounting_card_client_label',\n 'accounting_wallet_client_code',\n 'accounting_wallet_client_label',\n 'accounting_other_client_code',\n 'accounting_other_client_label',\n 'accounting_wallet_code',\n 'accounting_wallet_label',\n 'accounting_VAT_code',\n 'accounting_VAT_label',\n 'accounting_subscription_code',\n 'accounting_subscription_label',\n 'accounting_Machine_code',\n 'accounting_Machine_label',\n 'accounting_Training_code',\n 'accounting_Training_label',\n 'accounting_Event_code',\n 'accounting_Event_label',\n 'accounting_Space_code',\n 'accounting_Space_label',\n 'accounting_Product_code',\n 'accounting_Product_label'\n] as const;\n\nexport const modulesSettings = [\n 'spaces_module',\n 'plans_module',\n 'wallet_module',\n 'statistics_module',\n 'trainings_module',\n 'machines_module',\n 'online_payment_module',\n 'public_agenda_module',\n 'invoicing_module',\n 'store_module'\n] as const;\n\nexport const stripeSettings = [\n 'stripe_public_key',\n 'stripe_secret_key',\n 'stripe_currency'\n] as const;\n\nexport const payzenSettings = [\n 'payzen_username',\n 'payzen_password',\n 'payzen_endpoint',\n 'payzen_public_key',\n 'payzen_hmac',\n 'payzen_currency'\n] as const;\n\nexport const openLabSettings = [\n 'openlab_app_id',\n 'openlab_app_secret',\n 'openlab_default'\n] as const;\n\nexport const accountSettings = [\n 'phone_required',\n 'confirmation_required',\n 'address_required',\n 'user_change_group',\n 'user_validation_required',\n 'user_validation_required_list'\n] as const;\n\nexport const analyticsSettings = [\n 'tracking_id',\n 'facebook_app_id',\n 'twitter_analytics'\n] as const;\n\nexport const fabHubSettings = [\n 'hub_last_version',\n 'hub_public_key',\n 'fab_analytics',\n 'origin',\n 'uuid'\n] as const;\n\nexport const projectsSettings = [\n 'allowed_cad_extensions',\n 'allowed_cad_mime_types',\n 'disqus_shortname'\n] as const;\n\nexport const prepaidPacksSettings = [\n 'renew_pack_threshold',\n 'pack_only_for_subscription'\n] as const;\n\nexport const registrationSettings = [\n 'public_registrations',\n 'recaptcha_site_key',\n 'recaptcha_secret_key'\n] as const;\n\nexport const adminSettings = [\n 'feature_tour_display',\n 'show_username_in_admin_list'\n] as const;\n\nexport const pricingSettings = [\n 'extended_prices_in_same_day'\n] as const;\n\nexport const poymentSettings = [\n 'payment_gateway'\n] as const;\n\nexport const displaySettings = [\n 'machines_sort_by',\n 'events_in_calendar',\n 'email_from'\n] as const;\n\nexport const storeSettings = [\n 'store_withdrawal_instructions',\n 'store_hidden'\n] as const;\n\nexport const allSettings = [\n ...homePageSettings,\n ...privacyPolicySettings,\n ...aboutPageSettings,\n ...socialNetworksSettings,\n ...messagesSettings,\n ...invoicesSettings,\n ...bookingSettings,\n ...themeSettings,\n ...titleSettings,\n ...accountingSettings,\n ...modulesSettings,\n ...stripeSettings,\n ...payzenSettings,\n ...openLabSettings,\n ...accountSettings,\n ...analyticsSettings,\n ...fabHubSettings,\n ...projectsSettings,\n ...prepaidPacksSettings,\n ...registrationSettings,\n ...adminSettings,\n ...pricingSettings,\n ...poymentSettings,\n ...displaySettings,\n ...storeSettings\n] as const;\n\nexport type SettingName = typeof allSettings[number];\n\nexport type SettingValue = string|boolean|number;\n\nexport interface Setting {\n name: SettingName,\n localized?: string,\n value: string,\n last_update?: TDateISO,\n history?: Array\n}\n\nexport interface SettingError {\n error: string,\n id: number,\n name: SettingName\n}\n\nexport interface SettingBulkResult {\n status: boolean,\n value?: string,\n error?: string,\n localized?: string,\n}\n\nexport type SettingBulkArray = Array<{ name: SettingName, value: SettingValue }>;\n","export interface SocialNetwork {\n name: string,\n url: string\n}\n\nexport const supportedNetworks = [\n 'facebook',\n 'twitter',\n 'viadeo',\n 'linkedin',\n 'instagram',\n 'youtube',\n 'vimeo',\n 'dailymotion',\n 'github',\n 'echosciences',\n 'pinterest',\n 'lastfm',\n 'flickr'\n] as const;\n\nexport type SupportedSocialNetwork = typeof supportedNetworks[number];\n","angular.module('application.router', ['ui.router'])\n .config(['$stateProvider', '$urlRouterProvider', '$locationProvider', function ($stateProvider, $urlRouterProvider, $locationProvider) {\n $locationProvider.hashPrefix('!');\n $urlRouterProvider.otherwise('/');\n\n // abstract root parents states\n // these states controls the access rights to the various routes inherited from them\n $stateProvider\n .state('app', {\n abstract: true,\n views: {\n header: {\n templateUrl: '/shared/header.html.erb',\n controller: 'HeaderController'\n },\n leftnav: {\n templateUrl: '/shared/leftnav.html',\n controller: 'MainNavController'\n },\n cookies: {\n templateUrl: '/shared/cookies.html',\n controller: 'CookiesController'\n },\n main: {}\n },\n resolve: {\n logoFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'logo-file' }).$promise; }],\n logoBlackFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'logo-black-file' }).$promise; }],\n sharedTranslations: ['Translations', function (Translations) { return Translations.query(['app.shared', 'app.public.common']).$promise; }],\n modulesPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['machines_module', 'spaces_module', 'plans_module', 'invoicing_module', 'wallet_module', 'statistics_module', 'trainings_module', 'public_agenda_module', 'store_module']\" }).$promise; }],\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['public_registrations', 'store_hidden']\" }).$promise; }]\n },\n onEnter: ['$rootScope', 'logoFile', 'logoBlackFile', 'modulesPromise', 'CSRF', function ($rootScope, logoFile, logoBlackFile, modulesPromise, CSRF) {\n // Retrieve Anti-CSRF tokens from cookies\n CSRF.setMetaTags();\n // Application logo\n $rootScope.logo = logoFile.custom_asset;\n $rootScope.logoBlack = logoBlackFile.custom_asset;\n $rootScope.modules = {\n machines: (modulesPromise.machines_module === 'true'),\n spaces: (modulesPromise.spaces_module === 'true'),\n plans: (modulesPromise.plans_module === 'true'),\n trainings: (modulesPromise.trainings_module === 'true'),\n store: (modulesPromise.store_module === 'true'),\n invoicing: (modulesPromise.invoicing_module === 'true'),\n wallet: (modulesPromise.wallet_module === 'true'),\n publicAgenda: (modulesPromise.public_agenda_module === 'true'),\n statistics: (modulesPromise.statistics_module === 'true')\n };\n }]\n })\n .state('app.public', {\n abstract: true,\n resolve: {\n publicTranslations: ['Translations', function (Translations) { return Translations.query(['app.public']).$promise; }]\n }\n })\n .state('app.logged', {\n abstract: true,\n data: {\n authorizedRoles: ['member', 'admin', 'manager']\n },\n resolve: {\n currentUser: ['Auth', function (Auth) { return Auth.currentUser(); }],\n loggedTranslations: ['Translations', function (Translations) { return Translations.query(['app.logged']).$promise; }]\n },\n onEnter: ['$state', '$timeout', 'currentUser', '$rootScope', function ($state, $timeout, currentUser, $rootScope) {\n $rootScope.currentUser = currentUser;\n }]\n })\n .state('app.admin', {\n abstract: true,\n data: {\n authorizedRoles: ['admin', 'manager']\n },\n resolve: {\n currentUser: ['Auth', function (Auth) { return Auth.currentUser(); }],\n adminTranslations: ['Translations', function (Translations) { return Translations.query(['app.admin']).$promise; }]\n },\n onEnter: ['$state', '$timeout', 'currentUser', '$rootScope', function ($state, $timeout, currentUser, $rootScope) {\n $rootScope.currentUser = currentUser;\n }]\n })\n\n // main pages\n .state('app.public.about', {\n url: '/about',\n views: {\n 'content@': {\n templateUrl: '/shared/about.html',\n controller: 'AboutController'\n }\n }\n })\n .state('app.public.home', {\n url: '/?reset_password_token',\n views: {\n 'main@': {\n templateUrl: '/home.html',\n controller: 'HomeController'\n }\n },\n resolve: {\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['home_content', 'home_blogpost', 'spaces_module', 'feature_tour_display']\" }).$promise; }]\n }\n })\n .state('app.public.privacy', {\n url: '/privacy-policy',\n views: {\n 'content@': {\n templateUrl: '/shared/privacy.html',\n controller: 'PrivacyController'\n }\n }\n })\n\n // profile completion (SSO import passage point)\n .state('app.logged.profileCompletion', {\n url: '/profile_completion',\n views: {\n 'main@': {\n templateUrl: '/profile/complete.html',\n controller: 'CompleteProfileController'\n }\n },\n resolve: {\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['fablab_name', 'name_genre', 'phone_required', 'address_required']\" }).$promise; }],\n activeProviderPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.active().$promise; }],\n groupsPromise: ['Group', function (Group) { return Group.query().$promise; }],\n cguFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'cgu-file' }).$promise; }],\n memberPromise: ['Member', 'currentUser', function (Member, currentUser) { return Member.get({ id: currentUser.id }).$promise; }]\n }\n })\n\n // dashboard\n .state('app.logged.dashboard', {\n abstract: true,\n url: '/dashboard',\n resolve: {\n memberPromise: ['Member', 'currentUser', function (Member, currentUser) { return Member.get({ id: currentUser.id }).$promise; }],\n trainingsPromise: ['Training', function (Training) { return Training.query().$promise; }],\n proofOfIdentityTypesPromise: ['ProofOfIdentityType', 'currentUser', function (ProofOfIdentityType, currentUser) { return ProofOfIdentityType.query({ group_id: currentUser.group_id }).$promise; }]\n }\n })\n .state('app.logged.dashboard.profile', {\n url: '/profile',\n views: {\n 'main@': {\n templateUrl: '/dashboard/profile.html',\n controller: 'DashboardController'\n }\n }\n })\n .state('app.logged.dashboard.settings', {\n url: '/settings',\n views: {\n 'main@': {\n templateUrl: '/dashboard/settings.html',\n controller: 'EditProfileController'\n }\n },\n resolve: {\n groups: ['Group', function (Group) { return Group.query().$promise; }],\n activeProviderPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.active().$promise; }],\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['phone_required', 'address_required']\" }).$promise; }]\n }\n })\n .state('app.logged.dashboard.proof_of_identity_files', {\n url: '/proof_of_identity_files',\n views: {\n 'main@': {\n templateUrl: '/dashboard/proof_of_identity_files.html',\n controller: 'DashboardController'\n }\n }\n })\n .state('app.logged.dashboard.projects', {\n url: '/projects',\n views: {\n 'main@': {\n templateUrl: '/dashboard/projects.html',\n controller: 'DashboardController'\n }\n }\n })\n .state('app.logged.dashboard.trainings', {\n url: '/trainings',\n views: {\n 'main@': {\n templateUrl: '/dashboard/trainings.html',\n controller: 'DashboardController'\n }\n }\n })\n .state('app.logged.dashboard.reservations', {\n url: '/reservations',\n views: {\n 'main@': {\n templateUrl: '/dashboard/reservations.html',\n controller: 'DashboardController'\n }\n }\n })\n .state('app.logged.dashboard.events', {\n url: '/events',\n views: {\n 'main@': {\n templateUrl: '/dashboard/events.html',\n controller: 'DashboardController'\n }\n }\n })\n .state('app.logged.dashboard.invoices', {\n url: '/invoices',\n views: {\n 'main@': {\n templateUrl: '/dashboard/invoices.html',\n controller: 'DashboardController'\n }\n }\n })\n .state('app.logged.dashboard.payment_schedules', {\n url: '/payment_schedules',\n views: {\n 'main@': {\n templateUrl: '/dashboard/payment_schedules.html',\n controller: 'DashboardController'\n }\n }\n })\n .state('app.logged.dashboard.orders', {\n url: '/orders',\n views: {\n 'main@': {\n templateUrl: '/dashboard/orders.html',\n controller: 'DashboardController'\n }\n }\n })\n .state('app.logged.dashboard.order_show', {\n url: '/orders/:id',\n views: {\n 'main@': {\n templateUrl: '/orders/show.html',\n controller: 'ShowOrdersController'\n }\n }\n })\n .state('app.logged.dashboard.wallet', {\n url: '/wallet',\n abstract: !Fablab.walletModule,\n views: {\n 'main@': {\n templateUrl: '/dashboard/wallet.html',\n controller: 'WalletController'\n }\n },\n resolve: {\n walletPromise: ['Wallet', 'currentUser', function (Wallet, currentUser) { return Wallet.getWalletByUser({ user_id: currentUser.id }).$promise; }],\n transactionsPromise: ['Wallet', 'walletPromise', function (Wallet, walletPromise) { return Wallet.transactions({ id: walletPromise.id }).$promise; }]\n }\n })\n\n // members\n .state('app.logged.members_show', {\n url: '/members/:id',\n views: {\n 'main@': {\n templateUrl: '/members/show.html',\n controller: 'ShowProfileController'\n }\n },\n resolve: {\n memberPromise: ['$transition$', 'Member', function ($transition$, Member) { return Member.get({ id: $transition$.params().id }).$promise; }]\n }\n })\n .state('app.logged.members', {\n url: '/members',\n views: {\n 'main@': {\n templateUrl: '/members/index.html',\n controller: 'MembersController'\n }\n },\n resolve: {\n membersPromise: ['Member', function (Member) { return Member.query({ requested_attributes: '[profile]', page: 1, size: 10 }).$promise; }]\n }\n })\n\n // projects\n .state('app.public.projects_list', {\n url: '/projects?q&page&theme_id&component_id&machine_id&from&whole_network',\n reloadOnSearch: false,\n views: {\n 'main@': {\n templateUrl: '/projects/index.html',\n controller: 'ProjectsController'\n }\n },\n resolve: {\n themesPromise: ['Theme', function (Theme) { return Theme.query().$promise; }],\n componentsPromise: ['Component', function (Component) { return Component.query().$promise; }],\n machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }],\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['openlab_app_id', 'openlab_default']\" }).$promise; }],\n openLabActive: ['Setting', function (Setting) { return Setting.isPresent({ name: 'openlab_app_secret' }).$promise; }]\n }\n })\n .state('app.logged.projects_new', {\n url: '/projects/new',\n views: {\n 'main@': {\n templateUrl: '/projects/new.html',\n controller: 'NewProjectController'\n }\n },\n resolve: {\n allowedExtensions: ['Setting', function (Setting) { return Setting.get({ name: 'allowed_cad_extensions' }).$promise; }]\n }\n })\n .state('app.public.projects_show', {\n url: '/projects/:id',\n views: {\n 'main@': {\n templateUrl: '/projects/show.html',\n controller: 'ShowProjectController'\n }\n },\n resolve: {\n projectPromise: ['$transition$', 'Project', function ($transition$, Project) { return Project.get({ id: $transition$.params().id }).$promise; }],\n shortnamePromise: ['Setting', function (Setting) { return Setting.get({ name: 'disqus_shortname' }).$promise; }]\n }\n })\n .state('app.logged.projects_edit', {\n url: '/projects/:id/edit',\n views: {\n 'main@': {\n templateUrl: '/projects/edit.html',\n controller: 'EditProjectController'\n }\n },\n resolve: {\n projectPromise: ['$transition$', 'Project', function ($transition$, Project) { return Project.get({ id: $transition$.params().id }).$promise; }],\n allowedExtensions: ['Setting', function (Setting) { return Setting.get({ name: 'allowed_cad_extensions' }).$promise; }]\n }\n })\n\n // machines\n .state('app.public.machines_list', {\n url: '/machines',\n abstract: !Fablab.machinesModule,\n views: {\n 'main@': {\n templateUrl: '/machines/index.html',\n controller: 'MachinesController'\n }\n },\n resolve: {\n machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }],\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['feature_tour_display', 'user_validation_required', 'user_validation_required_list']\" }).$promise; }]\n }\n })\n .state('app.admin.machines_new', {\n url: '/machines/new',\n abstract: !Fablab.machinesModule,\n views: {\n 'main@': {\n templateUrl: '/machines/new.html',\n controller: 'NewMachineController'\n }\n }\n })\n .state('app.public.machines_show', {\n url: '/machines/:id',\n abstract: !Fablab.machinesModule,\n views: {\n 'main@': {\n templateUrl: '/machines/show.html',\n controller: 'ShowMachineController'\n }\n },\n resolve: {\n machinePromise: ['Machine', '$transition$', function (Machine, $transition$) { return Machine.get({ id: $transition$.params().id }).$promise; }]\n }\n })\n .state('app.logged.machines_reserve', {\n url: '/machines/:id/reserve',\n abstract: !Fablab.machinesModule,\n views: {\n 'main@': {\n templateUrl: '/machines/reserve.html',\n controller: 'ReserveMachineController'\n }\n },\n resolve: {\n plansPromise: ['Plan', function (Plan) { return Plan.query().$promise; }],\n groupsPromise: ['Group', function (Group) { return Group.query().$promise; }],\n machinePromise: ['Machine', '$transition$', function (Machine, $transition$) { return Machine.get({ id: $transition$.params().id }).$promise; }],\n settingsPromise: ['Setting', function (Setting) {\n return Setting.query({\n names: \"['machine_explications_alert', 'booking_window_start', 'booking_window_end', 'booking_move_enable', \" +\n \"'booking_move_delay', 'booking_cancel_enable', 'booking_cancel_delay', 'subscription_explications_alert', \" +\n \"'online_payment_module', 'payment_gateway', 'overlapping_categories', 'user_validation_required', 'user_validation_required_list']\"\n }).$promise;\n }]\n }\n })\n .state('app.admin.machines_edit', {\n url: '/machines/:id/edit',\n abstract: !Fablab.machinesModule,\n views: {\n 'main@': {\n templateUrl: '/machines/edit.html',\n controller: 'EditMachineController'\n }\n },\n resolve: {\n machinePromise: ['Machine', '$transition$', function (Machine, $transition$) { return Machine.get({ id: $transition$.params().id }).$promise; }]\n }\n })\n\n // spaces\n .state('app.public.spaces_list', {\n url: '/spaces',\n abstract: !Fablab.spacesModule,\n views: {\n 'main@': {\n templateUrl: '/spaces/index.html',\n controller: 'SpacesController'\n }\n },\n resolve: {\n spacesPromise: ['Space', function (Space) { return Space.query().$promise; }],\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['feature_tour_display']\" }).$promise; }]\n }\n })\n .state('app.admin.space_new', {\n url: '/spaces/new',\n abstract: !Fablab.spacesModule,\n views: {\n 'main@': {\n templateUrl: '/spaces/new.html',\n controller: 'NewSpaceController'\n }\n }\n })\n .state('app.public.space_show', {\n url: '/spaces/:id',\n abstract: !Fablab.spacesModule,\n views: {\n 'main@': {\n templateUrl: '/spaces/show.html',\n controller: 'ShowSpaceController'\n }\n },\n resolve: {\n spacePromise: ['Space', '$transition$', function (Space, $transition$) { return Space.get({ id: $transition$.params().id }).$promise; }]\n }\n })\n .state('app.admin.space_edit', {\n url: '/spaces/:id/edit',\n abstract: !Fablab.spacesModule,\n views: {\n 'main@': {\n templateUrl: '/spaces/edit.html',\n controller: 'EditSpaceController'\n }\n },\n resolve: {\n spacePromise: ['Space', '$transition$', function (Space, $transition$) { return Space.get({ id: $transition$.params().id }).$promise; }]\n }\n })\n .state('app.logged.space_reserve', {\n url: '/spaces/:id/reserve',\n abstract: !Fablab.spacesModule,\n views: {\n 'main@': {\n templateUrl: '/spaces/reserve.html',\n controller: 'ReserveSpaceController'\n }\n },\n resolve: {\n spacePromise: ['Space', '$transition$', function (Space, $transition$) { return Space.get({ id: $transition$.params().id }).$promise; }],\n plansPromise: ['Plan', function (Plan) { return Plan.query().$promise; }],\n groupsPromise: ['Group', function (Group) { return Group.query().$promise; }],\n settingsPromise: ['Setting', function (Setting) {\n return Setting.query({\n names: \"['booking_window_start', 'booking_window_end', 'booking_move_enable', 'booking_move_delay', \" +\n \"'booking_cancel_enable', 'booking_cancel_delay', 'subscription_explications_alert', \" +\n \"'space_explications_alert', 'online_payment_module', 'payment_gateway', 'overlapping_categories', \" +\n \"'user_validation_required', 'user_validation_required_list']\"\n }).$promise;\n }]\n }\n })\n\n // trainings\n .state('app.public.trainings_list', {\n url: '/trainings',\n abstract: !Fablab.trainingsModule,\n views: {\n 'main@': {\n templateUrl: '/trainings/index.html',\n controller: 'TrainingsController'\n }\n },\n resolve: {\n trainingsPromise: ['Training', function (Training) { return Training.query({ public_page: true }).$promise; }]\n }\n })\n .state('app.public.training_show', {\n url: '/trainings/:id',\n abstract: !Fablab.trainingsModule,\n views: {\n 'main@': {\n templateUrl: '/trainings/show.html',\n controller: 'ShowTrainingController'\n }\n },\n resolve: {\n trainingPromise: ['Training', '$transition$', function (Training, $transition$) { return Training.get({ id: $transition$.params().id }).$promise; }]\n }\n })\n .state('app.logged.trainings_reserve', {\n url: '/trainings/:id/reserve',\n abstract: !Fablab.trainingsModule,\n views: {\n 'main@': {\n templateUrl: '/trainings/reserve.html',\n controller: 'ReserveTrainingController'\n }\n },\n resolve: {\n explicationAlertPromise: ['Setting', function (Setting) { return Setting.get({ name: 'training_explications_alert' }).$promise; }],\n plansPromise: ['Plan', function (Plan) { return Plan.query().$promise; }],\n groupsPromise: ['Group', function (Group) { return Group.query().$promise; }],\n trainingPromise: ['Training', '$transition$', function (Training, $transition$) {\n if ($transition$.params().id !== 'all') { return Training.get({ id: $transition$.params().id }).$promise; }\n }],\n settingsPromise: ['Setting', function (Setting) {\n return Setting.query({\n names: \"['booking_window_start', 'booking_window_end', 'booking_move_enable', 'booking_move_delay', \" +\n \"'booking_cancel_enable', 'booking_cancel_delay', 'subscription_explications_alert', \" +\n \"'training_explications_alert', 'training_information_message', 'online_payment_module', \" +\n \"'payment_gateway', 'overlapping_categories', 'user_validation_required', 'user_validation_required_list']\"\n }).$promise;\n }]\n }\n })\n // notifications\n .state('app.logged.notifications', {\n url: '/notifications',\n views: {\n 'main@': {\n templateUrl: '/notifications/index.html',\n controller: 'NotificationsController'\n }\n }\n })\n\n // pricing\n .state('app.public.plans', {\n url: '/plans',\n abstract: !Fablab.plansModule,\n views: {\n 'main@': {\n templateUrl: '/plans/index.html',\n controller: 'PlansIndexController'\n }\n },\n resolve: {\n subscriptionExplicationsPromise: ['Setting', function (Setting) { return Setting.get({ name: 'subscription_explications_alert' }).$promise; }],\n groupsPromise: ['Group', function (Group) { return Group.query().$promise; }],\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['online_payment_module', 'payment_gateway', 'overlapping_categories', 'user_validation_required', 'user_validation_required_list']\" }).$promise; }]\n }\n })\n\n // events\n .state('app.public.events_list', {\n url: '/events',\n views: {\n 'main@': {\n templateUrl: '/events/index.html',\n controller: 'EventsController'\n }\n },\n resolve: {\n categoriesPromise: ['Category', function (Category) { return Category.query().$promise; }],\n themesPromise: ['EventTheme', function (EventTheme) { return EventTheme.query().$promise; }],\n ageRangesPromise: ['AgeRange', function (AgeRange) { return AgeRange.query().$promise; }]\n }\n })\n .state('app.public.events_show', {\n url: '/events/:id',\n views: {\n 'main@': {\n templateUrl: '/events/show.html',\n controller: 'ShowEventController'\n }\n },\n resolve: {\n eventPromise: ['Event', '$transition$', function (Event, $transition$) { return Event.get({ id: $transition$.params().id }).$promise; }],\n priceCategoriesPromise: ['PriceCategory', function (PriceCategory) { return PriceCategory.query().$promise; }],\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['booking_move_enable', 'booking_move_delay', 'booking_cancel_enable', 'booking_cancel_delay', 'event_explications_alert', 'online_payment_module', 'user_validation_required', 'user_validation_required_list']\" }).$promise; }]\n }\n })\n\n // global calendar (trainings, machines and events)\n .state('app.public.calendar', {\n url: '/calendar',\n abstract: !Fablab.publicAgendaModule,\n views: {\n 'main@': {\n templateUrl: '/calendar/calendar.html',\n controller: 'CalendarController'\n }\n },\n resolve: {\n bookingWindowStart: ['Setting', function (Setting) { return Setting.get({ name: 'booking_window_start' }).$promise; }],\n bookingWindowEnd: ['Setting', function (Setting) { return Setting.get({ name: 'booking_window_end' }).$promise; }],\n trainingsPromise: ['Training', function (Training) { return Training.query().$promise; }],\n machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }],\n spacesPromise: ['Space', function (Space) { return Space.query().$promise; }],\n iCalendarPromise: ['ICalendar', function (ICalendar) { return ICalendar.query().$promise; }]\n }\n })\n\n // store\n .state('app.public.store', {\n url: '/store/:categoryTypeUrl/:category?{machines:string}{keywords:string}{is_active:string}{is_available:string}{page:string}{sort:string}',\n abstract: !Fablab.storeModule,\n views: {\n 'main@': {\n templateUrl: '/store/index.html',\n controller: 'StoreController'\n }\n },\n params: {\n categoryTypeUrl: { raw: true, type: 'path', value: null, squash: true },\n category: { type: 'path', raw: true, value: null, squash: true },\n machines: { array: true, dynamic: true, type: 'query', raw: true },\n keywords: { dynamic: true, type: 'query' },\n is_active: { dynamic: true, type: 'query', value: 'true', squash: true },\n is_available: { dynamic: true, type: 'query', value: 'false', squash: true },\n page: { dynamic: true, type: 'query', value: '1', squash: true },\n sort: { dynamic: true, type: 'query' },\n authorizedRoles: { dynamic: true, raw: true }\n }\n })\n\n // show product\n .state('app.public.product_show', {\n url: '/store/p/:slug',\n abstract: !Fablab.storeModule,\n views: {\n 'main@': {\n templateUrl: '/products/show.html',\n controller: 'ShowProductController'\n }\n }\n })\n\n // cart\n .state('app.public.store_cart', {\n url: '/store/cart',\n abstract: !Fablab.storeModule,\n views: {\n 'main@': {\n templateUrl: '/cart/index.html',\n controller: 'CartController'\n }\n }\n })\n\n // --- namespace /admin/... ---\n // calendar\n .state('app.admin.calendar', {\n url: '/admin/calendar',\n views: {\n 'main@': {\n templateUrl: '/admin/calendar/calendar.html',\n controller: 'AdminCalendarController'\n }\n },\n resolve: {\n bookingWindowStart: ['Setting', function (Setting) { return Setting.get({ name: 'booking_window_start' }).$promise; }],\n bookingWindowEnd: ['Setting', function (Setting) { return Setting.get({ name: 'booking_window_end' }).$promise; }],\n machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }],\n plansPromise: ['Plan', function (Plan) { return Plan.query().$promise; }],\n groupsPromise: ['Group', function (Group) { return Group.query().$promise; }],\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['slot_duration', 'events_in_calendar', 'feature_tour_display']\" }).$promise; }]\n }\n })\n .state('app.admin.calendar.icalendar', {\n url: '/admin/calendar/icalendar',\n views: {\n 'main@': {\n templateUrl: '/admin/calendar/icalendar.html',\n controller: 'AdminICalendarController'\n }\n },\n resolve: {\n iCalendars: ['ICalendar', function (ICalendar) { return ICalendar.query().$promise; }]\n }\n })\n\n // project's settings\n .state('app.admin.projects', {\n url: '/admin/projects',\n views: {\n 'main@': {\n templateUrl: '/admin/projects/index.html',\n controller: 'AdminProjectsController'\n }\n },\n resolve: {\n componentsPromise: ['Component', function (Component) { return Component.query().$promise; }],\n licencesPromise: ['Licence', function (Licence) { return Licence.query().$promise; }],\n themesPromise: ['Theme', function (Theme) { return Theme.query().$promise; }],\n settingsPromise: ['Setting', function (Setting) {\n return Setting.query({\n names: \"['feature_tour_display', 'disqus_shortname', 'allowed_cad_extensions', \" +\n \"'allowed_cad_mime_types', 'openlab_app_id', 'openlab_app_secret', 'openlab_default']\"\n }).$promise;\n }]\n }\n })\n .state('app.admin.manage_abuses', {\n url: '/admin/abuses',\n views: {\n 'main@': {\n templateUrl: '/admin/abuses/index.html',\n controller: 'AbusesController'\n }\n },\n resolve: {\n abusesPromise: ['Abuse', function (Abuse) { return Abuse.query().$promise; }]\n }\n })\n\n // trainings\n .state('app.admin.trainings', {\n url: '/admin/trainings',\n abstract: !Fablab.trainingsModule,\n views: {\n 'main@': {\n templateUrl: '/admin/trainings/index.html',\n controller: 'TrainingsAdminController'\n }\n },\n resolve: {\n trainingsPromise: ['Training', function (Training) { return Training.query().$promise; }],\n machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }],\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['feature_tour_display', 'machines_module']\" }).$promise; }]\n }\n })\n .state('app.admin.trainings_new', {\n url: '/admin/trainings/new',\n abstract: !Fablab.trainingsModule,\n views: {\n 'main@': {\n templateUrl: '/admin/trainings/new.html',\n controller: 'NewTrainingController'\n }\n },\n resolve: {\n machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }],\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['machines_module']\" }).$promise; }]\n }\n })\n .state('app.admin.trainings_edit', {\n url: '/admin/trainings/:id/edit',\n abstract: !Fablab.trainingsModule,\n views: {\n 'main@': {\n templateUrl: '/admin/trainings/edit.html',\n controller: 'EditTrainingController'\n }\n },\n resolve: {\n trainingPromise: ['Training', '$transition$', function (Training, $transition$) { return Training.get({ id: $transition$.params().id }).$promise; }],\n machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }],\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['machines_module']\" }).$promise; }]\n }\n })\n // events\n .state('app.admin.events', {\n url: '/admin/events',\n views: {\n 'main@': {\n templateUrl: '/admin/events/index.html',\n controller: 'AdminEventsController'\n }\n },\n resolve: {\n eventsPromise: ['Event', function (Event) { return Event.query({ page: 1 }).$promise; }],\n categoriesPromise: ['Category', function (Category) { return Category.query().$promise; }],\n themesPromise: ['EventTheme', function (EventTheme) { return EventTheme.query().$promise; }],\n ageRangesPromise: ['AgeRange', function (AgeRange) { return AgeRange.query().$promise; }],\n priceCategoriesPromise: ['PriceCategory', function (PriceCategory) { return PriceCategory.query().$promise; }],\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['feature_tour_display']\" }).$promise; }]\n }\n })\n .state('app.admin.events_new', {\n url: '/admin/events/new',\n views: {\n 'main@': {\n templateUrl: '/events/new.html',\n controller: 'NewEventController'\n }\n },\n resolve: {\n categoriesPromise: ['Category', function (Category) { return Category.query().$promise; }],\n themesPromise: ['EventTheme', function (EventTheme) { return EventTheme.query().$promise; }],\n ageRangesPromise: ['AgeRange', function (AgeRange) { return AgeRange.query().$promise; }],\n priceCategoriesPromise: ['PriceCategory', function (PriceCategory) { return PriceCategory.query().$promise; }]\n }\n })\n .state('app.admin.events_edit', {\n url: '/admin/events/:id/edit',\n views: {\n 'main@': {\n templateUrl: '/events/edit.html',\n controller: 'EditEventController'\n }\n },\n resolve: {\n eventPromise: ['Event', '$transition$', function (Event, $transition$) { return Event.get({ id: $transition$.params().id }).$promise; }],\n categoriesPromise: ['Category', function (Category) { return Category.query().$promise; }],\n themesPromise: ['EventTheme', function (EventTheme) { return EventTheme.query().$promise; }],\n ageRangesPromise: ['AgeRange', function (AgeRange) { return AgeRange.query().$promise; }],\n priceCategoriesPromise: ['PriceCategory', function (PriceCategory) { return PriceCategory.query().$promise; }]\n }\n })\n .state('app.admin.event_reservations', {\n url: '/admin/events/:id/reservations',\n views: {\n 'main@': {\n templateUrl: '/admin/events/reservations.html',\n controller: 'ShowEventReservationsController'\n }\n },\n resolve: {\n eventPromise: ['Event', '$transition$', function (Event, $transition$) { return Event.get({ id: $transition$.params().id }).$promise; }],\n reservationsPromise: ['Reservation', '$transition$', function (Reservation, $transition$) { return Reservation.query({ reservable_id: $transition$.params().id, reservable_type: 'Event' }).$promise; }]\n }\n })\n\n // pricing\n .state('app.admin.pricing', {\n url: '/admin/pricing',\n views: {\n 'main@': {\n templateUrl: '/admin/pricing/index.html',\n controller: 'EditPricingController'\n }\n },\n resolve: {\n plans: ['Plan', function (Plan) { return Plan.query().$promise; }],\n groups: ['Group', function (Group) { return Group.query().$promise; }],\n trainingsPricingsPromise: ['TrainingsPricing', function (TrainingsPricing) { return TrainingsPricing.query().$promise; }],\n trainingsPromise: ['Training', function (Training) { return Training.query().$promise; }],\n machineCreditsPromise: ['Credit', function (Credit) { return Credit.query({ creditable_type: 'Machine' }).$promise; }],\n machinesPromise: ['Machine', function (Machine) { return Machine.query().$promise; }],\n trainingCreditsPromise: ['Credit', function (Credit) { return Credit.query({ creditable_type: 'Training' }).$promise; }],\n couponsPromise: ['Coupon', function (Coupon) { return Coupon.query({ page: 1, filter: 'all' }).$promise; }],\n spacesPromise: ['Space', function (Space) { return Space.query().$promise; }],\n spacesPricesPromise: ['Price', function (Price) { return Price.query({ priceable_type: 'Space', plan_id: 'null' }).$promise; }],\n spacesCreditsPromise: ['Credit', function (Credit) { return Credit.query({ creditable_type: 'Space' }).$promise; }],\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['feature_tour_display', 'slot_duration', 'user_validation_required', 'user_validation_required_list']\" }).$promise; }],\n planCategories: ['PlanCategory', function (PlanCategory) { return PlanCategory.query().$promise; }]\n }\n })\n\n // plans\n .state('app.admin.plans', {\n abstract: true,\n resolve: {\n prices: ['Pricing', function (Pricing) { return Pricing.query().$promise; }],\n groups: ['Group', function (Group) { return Group.query().$promise; }],\n partners: ['User', function (User) { return User.query({ role: 'partner' }).$promise; }]\n }\n })\n .state('app.admin.plans.new', {\n url: '/admin/plans/new',\n views: {\n 'main@': {\n templateUrl: '/admin/plans/new.html',\n controller: 'NewPlanController'\n }\n },\n resolve: {\n planCategories: ['PlanCategory', function (PlanCategory) { return PlanCategory.query().$promise; }]\n }\n })\n .state('app.admin.plans.edit', {\n url: '/admin/plans/:id/edit',\n views: {\n 'main@': {\n templateUrl: '/admin/plans/edit.html',\n controller: 'EditPlanController'\n }\n },\n resolve: {\n spaces: ['Space', function (Space) { return Space.query().$promise; }],\n machines: ['Machine', function (Machine) { return Machine.query().$promise; }],\n plans: ['Plan', function (Plan) { return Plan.query().$promise; }],\n planPromise: ['Plan', '$transition$', function (Plan, $transition$) { return Plan.get({ id: $transition$.params().id }).$promise; }],\n planCategories: ['PlanCategory', function (PlanCategory) { return PlanCategory.query().$promise; }]\n }\n })\n // plan categories\n .state('app.admin.plan_categories', {\n url: '/admin/plan_categories',\n views: {\n 'main@': {\n templateUrl: '/admin/plans/categories.html',\n controller: 'PlanCategoriesController'\n }\n }\n })\n\n // coupons\n .state('app.admin.coupons_new', {\n url: '/admin/coupons/new',\n views: {\n 'main@': {\n templateUrl: '/admin/coupons/new.html',\n controller: 'NewCouponController'\n }\n }\n })\n .state('app.admin.coupons_edit', {\n url: '/admin/coupons/:id/edit',\n views: {\n 'main@': {\n templateUrl: '/admin/coupons/edit.html',\n controller: 'EditCouponController'\n }\n },\n resolve: {\n couponPromise: ['Coupon', '$transition$', function (Coupon, $transition$) { return Coupon.get({ id: $transition$.params().id }).$promise; }]\n }\n })\n\n // show order\n .state('app.admin.order_show', {\n url: '/admin/store/orders/:id',\n abstract: !Fablab.storeModule,\n views: {\n 'main@': {\n templateUrl: '/admin/orders/show.html',\n controller: 'AdminShowOrdersController'\n }\n }\n })\n\n // invoices\n .state('app.admin.invoices', {\n url: '/admin/invoices',\n views: {\n 'main@': {\n templateUrl: '/admin/invoices/index.html',\n controller: 'InvoicesController'\n }\n },\n resolve: {\n settings: ['Setting', function (Setting) {\n return Setting.query({\n names: \"['invoice_legals', 'invoice_text', 'invoice_VAT-rate', 'invoice_VAT-rate_Machine', 'invoice_VAT-rate_Training', 'invoice_VAT-rate_Space', \" +\n \"'invoice_VAT-rate_Event', 'invoice_VAT-rate_Subscription', 'invoice_VAT-rate_Product', 'invoice_VAT-active', 'invoice_order-nb', 'invoice_code-value', \" +\n \"'invoice_code-active', 'invoice_reference', 'invoice_logo', 'accounting_journal_code', 'accounting_card_client_code', \" +\n \"'accounting_card_client_label', 'accounting_wallet_client_code', 'accounting_wallet_client_label', 'invoicing_module', \" +\n \"'accounting_other_client_code', 'accounting_other_client_label', 'accounting_wallet_code', 'accounting_wallet_label', \" +\n \"'accounting_VAT_code', 'accounting_VAT_label', 'accounting_subscription_code', 'accounting_subscription_label', \" +\n \"'accounting_Machine_code', 'accounting_Machine_label', 'accounting_Training_code', 'accounting_Training_label', \" +\n \"'accounting_Event_code', 'accounting_Event_label', 'accounting_Space_code', 'accounting_Space_label', 'accounting_Product_code', 'accounting_Product_label', \" +\n \"'payment_gateway', 'accounting_Error_code', 'accounting_Error_label', 'payment_schedule_prefix', \" +\n \"'feature_tour_display', 'online_payment_module', 'stripe_public_key', 'stripe_currency', 'invoice_prefix', \" +\n \"'accounting_Pack_code', 'accounting_Pack_label']\"\n }).$promise;\n }],\n stripeSecretKey: ['Setting', function (Setting) { return Setting.isPresent({ name: 'stripe_secret_key' }).$promise; }],\n onlinePaymentStatus: ['Payment', function (Payment) { return Payment.onlinePaymentStatus().$promise; }],\n invoices: ['Invoice', function (Invoice) {\n return Invoice.list({\n query: { number: '', customer: '', date: null, order_by: '-reference', page: 1, size: 20 }\n }).$promise;\n }],\n closedPeriods: ['AccountingPeriod', function (AccountingPeriod) { return AccountingPeriod.query().$promise; }]\n }\n })\n\n // members\n .state('app.admin.members', {\n url: '/admin/members',\n views: {\n 'main@': {\n templateUrl: '/admin/members/index.html',\n controller: 'AdminMembersController'\n },\n 'groups@app.admin.members': {\n templateUrl: '/admin/groups/index.html',\n controller: 'GroupsController'\n },\n 'tags@app.admin.members': {\n templateUrl: '/admin/tags/index.html',\n controller: 'TagsController'\n },\n 'authentification@app.admin.members': {\n templateUrl: '/admin/authentications/index.html',\n controller: 'AuthentificationController'\n }\n },\n resolve: {\n membersPromise: ['Member', function (Member) { return Member.list({ query: { search: '', order_by: 'id', page: 1, size: 20 } }).$promise; }],\n adminsPromise: ['Admin', function (Admin) { return Admin.query().$promise; }],\n partnersPromise: ['User', function (User) { return User.query({ role: 'partner' }).$promise; }],\n managersPromise: ['User', function (User) { return User.query({ role: 'manager' }).$promise; }],\n groupsPromise: ['Group', function (Group) { return Group.query().$promise; }],\n tagsPromise: ['Tag', function (Tag) { return Tag.query().$promise; }],\n authProvidersPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.query().$promise; }],\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['feature_tour_display', 'user_validation_required', 'show_username_in_admin_list']\" }).$promise; }]\n }\n })\n .state('app.admin.members_new', {\n url: '/admin/members/new',\n views: {\n 'main@': {\n templateUrl: '/admin/members/new.html',\n controller: 'NewMemberController'\n }\n },\n resolve: {\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['phone_required', 'address_required']\" }).$promise; }]\n }\n })\n .state('app.admin.members_import', {\n url: '/admin/members/import',\n views: {\n 'main@': {\n templateUrl: '/admin/members/import.html',\n controller: 'ImportMembersController'\n }\n },\n resolve: {\n tags: ['Tag', function (Tag) { return Tag.query().$promise; }]\n }\n })\n .state('app.admin.members_import_result', {\n url: '/admin/members/import/:id/results',\n views: {\n 'main@': {\n templateUrl: '/admin/members/import_result.html',\n controller: 'ImportMembersResultController'\n }\n },\n resolve: {\n importItem: ['Import', '$transition$', function (Import, $transition$) { return Import.get({ id: $transition$.params().id }).$promise; }]\n }\n })\n .state('app.admin.members_edit', {\n url: '/admin/members/:id/edit',\n views: {\n 'main@': {\n templateUrl: '/admin/members/edit.html',\n controller: 'EditMemberController'\n }\n },\n resolve: {\n memberPromise: ['Member', '$transition$', function (Member, $transition$) { return Member.get({ id: $transition$.params().id }).$promise; }],\n activeProviderPromise: ['AuthProvider', function (AuthProvider) { return AuthProvider.active().$promise; }],\n walletPromise: ['Wallet', '$transition$', function (Wallet, $transition$) { return Wallet.getWalletByUser({ user_id: $transition$.params().id }).$promise; }],\n transactionsPromise: ['Wallet', 'walletPromise', function (Wallet, walletPromise) { return Wallet.transactions({ id: walletPromise.id }).$promise; }],\n tagsPromise: ['Tag', function (Tag) { return Tag.query().$promise; }],\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['phone_required', 'address_required', 'user_validation_required']\" }).$promise; }]\n }\n })\n .state('app.admin.admins_new', {\n url: '/admin/admins/new',\n views: {\n 'main@': {\n templateUrl: '/admin/admins/new.html',\n controller: 'NewAdminController'\n }\n },\n resolve: {\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['phone_required', 'address_required']\" }).$promise; }],\n groupsPromise: ['Group', function (Group) { return Group.query({ disabled: false }).$promise; }]\n }\n })\n .state('app.admin.managers_new', {\n url: '/admin/managers/new',\n views: {\n 'main@': {\n templateUrl: '/admin/managers/new.html',\n controller: 'NewManagerController'\n }\n },\n resolve: {\n groupsPromise: ['Group', function (Group) { return Group.query().$promise; }],\n tagsPromise: ['Tag', function (Tag) { return Tag.query().$promise; }]\n }\n })\n\n // authentication providers\n .state('app.admin.authentication_new', {\n url: '/admin/authentications/new',\n views: {\n 'main@': {\n templateUrl: '/admin/authentications/new.html',\n controller: 'NewAuthenticationController'\n }\n }\n })\n .state('app.admin.authentication_edit', {\n url: '/admin/authentications/:id/edit',\n views: {\n 'main@': {\n templateUrl: '/admin/authentications/edit.html',\n controller: 'EditAuthenticationController'\n }\n },\n resolve: {\n providerPromise: ['AuthProvider', '$transition$', function (AuthProvider, $transition$) { return AuthProvider.get({ id: $transition$.params().id }).$promise; }]\n }\n })\n\n // statistics\n .state('app.admin.statistics', {\n url: '/admin/statistics',\n abstract: !Fablab.statisticsModule,\n views: {\n 'main@': {\n templateUrl: '/admin/statistics/index.html',\n controller: 'StatisticsController'\n }\n },\n resolve: {\n membersPromise: ['Member', function (Member) { return Member.mapping().$promise; }],\n statisticsPromise: ['Statistics', function (Statistics) { return Statistics.query().$promise; }],\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['feature_tour_display']\" }).$promise; }]\n }\n })\n .state('app.admin.stats_graphs', {\n url: '/admin/statistics/evolution',\n abstract: !Fablab.statisticsModule,\n views: {\n 'main@': {\n templateUrl: '/admin/statistics/graphs.html',\n controller: 'GraphsController'\n }\n }\n })\n\n // configurations\n .state('app.admin.settings', {\n url: '/admin/settings',\n views: {\n 'main@': {\n templateUrl: '/admin/settings/index.html',\n controller: 'SettingsController'\n }\n },\n resolve: {\n settingsPromise: ['Setting', function (Setting) {\n return Setting.query({\n names: \"['twitter_name', 'about_title', 'about_body', 'tracking_id', 'facebook_app_id', 'email_from', \" +\n \"'privacy_body', 'privacy_dpo', 'about_contacts', 'book_overlapping_slots', 'invoicing_module', \" +\n \"'home_blogpost', 'machine_explications_alert', 'training_explications_alert', 'slot_duration', \" +\n \"'training_information_message', 'subscription_explications_alert', 'event_explications_alert', \" +\n \"'space_explications_alert', 'booking_window_start', 'booking_window_end', 'events_in_calendar', \" +\n \"'booking_move_enable', 'booking_move_delay', 'booking_cancel_enable', 'feature_tour_display', \" +\n \"'booking_cancel_delay', 'main_color', 'secondary_color', 'spaces_module', 'twitter_analytics', \" +\n \"'fablab_name', 'name_genre', 'reminder_enable', 'plans_module', 'confirmation_required', \" +\n \"'reminder_delay', 'visibility_yearly', 'visibility_others', 'wallet_module', 'trainings_module', \" +\n \"'display_name_enable', 'machines_sort_by', 'fab_analytics', 'statistics_module', 'address_required', \" +\n \"'link_name', 'home_content', 'home_css', 'phone_required', 'upcoming_events_shown', 'public_agenda_module',\" +\n \"'renew_pack_threshold', 'pack_only_for_subscription', 'overlapping_categories', 'public_registrations',\" +\n \"'extended_prices_in_same_day', 'recaptcha_site_key', 'recaptcha_secret_key', 'user_validation_required', \" +\n \"'user_validation_required_list', 'machines_module', 'user_change_group', 'show_username_in_admin_list', \" +\n \"'store_module']\"\n }).$promise;\n }],\n privacyDraftsPromise: ['Setting', function (Setting) { return Setting.get({ name: 'privacy_draft', history: true }).$promise; }],\n cguFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'cgu-file' }).$promise; }],\n cgvFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'cgv-file' }).$promise; }],\n faviconFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'favicon-file' }).$promise; }],\n profileImageFile: ['CustomAsset', function (CustomAsset) { return CustomAsset.get({ name: 'profile-image-file' }).$promise; }]\n }\n })\n\n .state('app.admin.store', {\n abstract: true,\n url: '/admin/store'\n })\n\n .state('app.admin.store.settings', {\n url: '/settings',\n abstract: !Fablab.storeModule,\n data: {\n authorizedRoles: ['admin']\n },\n views: {\n 'main@': {\n templateUrl: '/admin/store/index.html',\n controller: 'AdminStoreController'\n }\n }\n })\n\n .state('app.admin.store.products', {\n url: '/products?{categories:string}{machines:string}{keywords:string}{stock_type:string}{stock_from:string}{stock_to:string}{is_active:string}{page:string}{sort:string}',\n abstract: !Fablab.storeModule,\n views: {\n 'main@': {\n templateUrl: '/admin/store/index.html',\n controller: 'AdminStoreController'\n }\n },\n params: {\n categories: { array: true, dynamic: true, type: 'query', raw: true },\n machines: { array: true, dynamic: true, type: 'query', raw: true },\n keywords: { dynamic: true, type: 'query' },\n stock_type: { dynamic: true, type: 'query', value: 'internal', squash: true },\n stock_from: { dynamic: true, type: 'query', value: '0', squash: true },\n stock_to: { dynamic: true, type: 'query', value: '0', squash: true },\n is_active: { dynamic: true, type: 'query', value: 'false', squash: true },\n page: { dynamic: true, type: 'query', value: '1', squash: true },\n sort: { dynamic: true, type: 'query' }\n }\n })\n\n .state('app.admin.store.products_new', {\n url: '/products/new',\n abstract: !Fablab.storeModule,\n views: {\n 'main@': {\n templateUrl: '/admin/store/product_new.html',\n controller: 'AdminStoreProductController'\n }\n }\n })\n\n .state('app.admin.store.products_edit', {\n url: '/products/:id/edit',\n abstract: !Fablab.storeModule,\n views: {\n 'main@': {\n templateUrl: '/admin/store/product_edit.html',\n controller: 'AdminStoreProductController'\n }\n }\n })\n\n .state('app.admin.store.categories', {\n url: '/categories',\n abstract: !Fablab.storeModule,\n views: {\n 'main@': {\n templateUrl: '/admin/store/index.html',\n controller: 'AdminStoreController'\n }\n }\n })\n\n .state('app.admin.store.orders', {\n url: '/orders',\n abstract: !Fablab.storeModule,\n views: {\n 'main@': {\n templateUrl: '/admin/store/index.html',\n controller: 'AdminStoreController'\n }\n }\n })\n\n // OpenAPI Clients\n .state('app.admin.open_api_clients', {\n url: '/open_api_clients',\n views: {\n 'main@': {\n templateUrl: '/admin/open_api_clients/index.html.erb',\n controller: 'OpenAPIClientsController'\n }\n },\n resolve: {\n clientsPromise: ['OpenAPIClient', function (OpenAPIClient) { return OpenAPIClient.query().$promise; }],\n settingsPromise: ['Setting', function (Setting) { return Setting.query({ names: \"['feature_tour_display']\" }).$promise; }]\n }\n });\n }\n\n ]);\n","'use strict';\n\nApplication.Services.factory('_t', ['$translate', function ($translate) {\n return function (key, interpolations) {\n if (interpolations == null) { interpolations = undefined; }\n return $translate.instant(key, interpolations);\n };\n}]);\n","'use strict';\n\nApplication.Services.factory('Abuse', ['$resource', function ($resource) {\n return $resource('/api/abuses/:id',\n { id: '@id' }, {\n query: {\n isArray: false\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('AccountingPeriod', ['$resource', function ($resource) {\n return $resource('/api/accounting_periods/:id',\n { id: '@id' }, {\n lastClosingEnd: {\n method: 'GET',\n url: '/api/accounting_periods/last_closing_end'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Admin', ['$resource', function ($resource) {\n return $resource('/api/admins/:id',\n { id: '@id' }, {\n query: {\n isArray: false\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('AgeRange', ['$resource', function ($resource) {\n return $resource('/api/age_ranges/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('AuthService', ['Session', function (Session) {\n const service = {};\n\n service.isAuthenticated = function () {\n return (Session.currentUser != null) && (Session.currentUser.id != null);\n };\n\n service.isAuthorized = function (authorizedRoles) {\n if (!angular.isArray(authorizedRoles)) {\n authorizedRoles = [authorizedRoles];\n }\n return service.isAuthenticated() && (authorizedRoles.indexOf(Session.currentUser.role) !== -1);\n };\n\n return service;\n}]);\n","'use strict';\n\nApplication.Services.factory('AuthProvider', ['$resource', function ($resource) {\n return $resource('/api/auth_providers/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n },\n mapping_fields: {\n method: 'GET',\n url: '/api/auth_providers/mapping_fields'\n },\n active: {\n method: 'GET',\n url: '/api/auth_providers/active'\n },\n send_code: {\n method: 'POST',\n url: '/api/auth_providers/send_code'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Availability', ['$resource', function ($resource) {\n return $resource('/api/availabilities/:id',\n { id: '@id' }, {\n machine: {\n method: 'GET',\n url: '/api/availabilities/machines/:machineId',\n params: { machineId: '@machineId' },\n isArray: true\n },\n reservations: {\n method: 'GET',\n url: '/api/availabilities/:id/reservations',\n isArray: true\n },\n trainings: {\n method: 'GET',\n url: '/api/availabilities/trainings/:trainingId',\n params: { trainingId: '@trainingId' },\n isArray: true\n },\n spaces: {\n method: 'GET',\n url: '/api/availabilities/spaces/:spaceId',\n params: { spaceId: '@spaceId' },\n isArray: true\n },\n update: {\n method: 'PUT'\n },\n lock: {\n method: 'PUT',\n url: '/api/availabilities/:id/lock'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('CalendarConfig', [() =>\n function (options) {\n // The calendar is divided in slots of 1 hour\n if (options == null) { options = {}; }\n const BASE_SLOT = '01:00:00';\n\n // The calendar will be initialized positioned under 9:00 AM\n const DEFAULT_CALENDAR_POSITION = '09:00:00';\n\n const defaultOptions = {\n timezone: Fablab.timezone,\n locale: Fablab.fullcalendar_locale,\n header: {\n left: 'month agendaWeek today prev,next',\n center: 'title',\n right: ''\n },\n firstDay: Fablab.weekStartingDay,\n scrollTime: DEFAULT_CALENDAR_POSITION,\n slotDuration: BASE_SLOT,\n allDayDefault: false,\n minTime: '00:00:00',\n maxTime: '24:00:00',\n height: 'auto',\n buttonIcons: {\n prev: 'left-single-arrow',\n next: 'right-single-arrow'\n },\n slotLabelFormat: 'H:mm',\n views: {\n agendaWeek: {\n timeFormat: 'H:mm'\n },\n month: {\n timeFormat: 'H(:mm)'\n }\n },\n\n allDaySlot: false,\n defaultView: 'agendaWeek',\n editable: false\n };\n\n return Object.assign({}, defaultOptions, options);\n }\n\n]);\n","'use strict';\n\nApplication.Services.factory('Category', ['$resource', function ($resource) {\n return $resource('/api/categories/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Component', ['$resource', function ($resource) {\n return $resource('/api/components/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Coupon', ['$resource', function ($resource) {\n return $resource('/api/coupons/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n },\n validate: {\n method: 'POST',\n url: '/api/coupons/validate'\n },\n send: {\n method: 'POST',\n url: '/api/coupons/send'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Credit', ['$resource', function ($resource) {\n return $resource('/api/credits/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.service('CSRF', ['$cookies',\n function ($cookies) {\n return ({\n setMetaTags () {\n if (angular.element('meta[name=\"csrf-param\"]').length === 0) {\n angular.element('head').append('');\n angular.element('head').append(``);\n } else {\n angular.element('meta[name=\"csrf-token\"]').replaceWith(``);\n }\n }\n });\n }\n]);\n","'use strict';\n\nApplication.Services.factory('CustomAsset', ['$resource', function ($resource) {\n return $resource('/api/custom_assets/:name',\n { name: '@name' });\n}]);\n","/**\n * Created by sylvain on 20/08/14.\n *\n * Based on http://jsperf.com/diacritics/12\n */\nApplication.Services.service('Diacritics', [\n function () {\n return {\n\n /**\n * Fast diacritics removing function, works on the provided string.\n * Eg. \"éêè çä bönjoür\" will become \"eee ca bonjour\"\n * @param str {string} to ascii-fy\n * @returns {string} without diacritics\n */\n remove: function (str) {\n const defaultDiacriticsRemovalap = [\n { base: 'A', letters: '\\u0041\\u24B6\\uFF21\\u00C0\\u00C1\\u00C2\\u1EA6\\u1EA4\\u1EAA\\u1EA8\\u00C3\\u0100\\u0102\\u1EB0\\u1EAE\\u1EB4\\u1EB2\\u0226\\u01E0\\u00C4\\u01DE\\u1EA2\\u00C5\\u01FA\\u01CD\\u0200\\u0202\\u1EA0\\u1EAC\\u1EB6\\u1E00\\u0104\\u023A\\u2C6F' },\n { base: 'AA', letters: '\\uA732' },\n { base: 'AE', letters: '\\u00C6\\u01FC\\u01E2' },\n { base: 'AO', letters: '\\uA734' },\n { base: 'AU', letters: '\\uA736' },\n { base: 'AV', letters: '\\uA738\\uA73A' },\n { base: 'AY', letters: '\\uA73C' },\n { base: 'B', letters: '\\u0042\\u24B7\\uFF22\\u1E02\\u1E04\\u1E06\\u0243\\u0182\\u0181' },\n { base: 'C', letters: '\\u0043\\u24B8\\uFF23\\u0106\\u0108\\u010A\\u010C\\u00C7\\u1E08\\u0187\\u023B\\uA73E' },\n { base: 'D', letters: '\\u0044\\u24B9\\uFF24\\u1E0A\\u010E\\u1E0C\\u1E10\\u1E12\\u1E0E\\u0110\\u018B\\u018A\\u0189\\uA779' },\n { base: 'DZ', letters: '\\u01F1\\u01C4' },\n { base: 'Dz', letters: '\\u01F2\\u01C5' },\n { base: 'E', letters: '\\u0045\\u24BA\\uFF25\\u00C8\\u00C9\\u00CA\\u1EC0\\u1EBE\\u1EC4\\u1EC2\\u1EBC\\u0112\\u1E14\\u1E16\\u0114\\u0116\\u00CB\\u1EBA\\u011A\\u0204\\u0206\\u1EB8\\u1EC6\\u0228\\u1E1C\\u0118\\u1E18\\u1E1A\\u0190\\u018E' },\n { base: 'F', letters: '\\u0046\\u24BB\\uFF26\\u1E1E\\u0191\\uA77B' },\n { base: 'G', letters: '\\u0047\\u24BC\\uFF27\\u01F4\\u011C\\u1E20\\u011E\\u0120\\u01E6\\u0122\\u01E4\\u0193\\uA7A0\\uA77D\\uA77E' },\n { base: 'H', letters: '\\u0048\\u24BD\\uFF28\\u0124\\u1E22\\u1E26\\u021E\\u1E24\\u1E28\\u1E2A\\u0126\\u2C67\\u2C75\\uA78D' },\n { base: 'I', letters: '\\u0049\\u24BE\\uFF29\\u00CC\\u00CD\\u00CE\\u0128\\u012A\\u012C\\u0130\\u00CF\\u1E2E\\u1EC8\\u01CF\\u0208\\u020A\\u1ECA\\u012E\\u1E2C\\u0197' },\n { base: 'J', letters: '\\u004A\\u24BF\\uFF2A\\u0134\\u0248' },\n { base: 'K', letters: '\\u004B\\u24C0\\uFF2B\\u1E30\\u01E8\\u1E32\\u0136\\u1E34\\u0198\\u2C69\\uA740\\uA742\\uA744\\uA7A2' },\n { base: 'L', letters: '\\u004C\\u24C1\\uFF2C\\u013F\\u0139\\u013D\\u1E36\\u1E38\\u013B\\u1E3C\\u1E3A\\u0141\\u023D\\u2C62\\u2C60\\uA748\\uA746\\uA780' },\n { base: 'LJ', letters: '\\u01C7' },\n { base: 'Lj', letters: '\\u01C8' },\n { base: 'M', letters: '\\u004D\\u24C2\\uFF2D\\u1E3E\\u1E40\\u1E42\\u2C6E\\u019C' },\n { base: 'N', letters: '\\u004E\\u24C3\\uFF2E\\u01F8\\u0143\\u00D1\\u1E44\\u0147\\u1E46\\u0145\\u1E4A\\u1E48\\u0220\\u019D\\uA790\\uA7A4' },\n { base: 'NJ', letters: '\\u01CA' },\n { base: 'Nj', letters: '\\u01CB' },\n { base: 'O', letters: '\\u004F\\u24C4\\uFF2F\\u00D2\\u00D3\\u00D4\\u1ED2\\u1ED0\\u1ED6\\u1ED4\\u00D5\\u1E4C\\u022C\\u1E4E\\u014C\\u1E50\\u1E52\\u014E\\u022E\\u0230\\u00D6\\u022A\\u1ECE\\u0150\\u01D1\\u020C\\u020E\\u01A0\\u1EDC\\u1EDA\\u1EE0\\u1EDE\\u1EE2\\u1ECC\\u1ED8\\u01EA\\u01EC\\u00D8\\u01FE\\u0186\\u019F\\uA74A\\uA74C' },\n { base: 'OI', letters: '\\u01A2' },\n { base: 'OO', letters: '\\uA74E' },\n { base: 'OU', letters: '\\u0222' },\n { base: 'OE', letters: '\\u008C\\u0152' },\n { base: 'oe', letters: '\\u009C\\u0153' },\n { base: 'P', letters: '\\u0050\\u24C5\\uFF30\\u1E54\\u1E56\\u01A4\\u2C63\\uA750\\uA752\\uA754' },\n { base: 'Q', letters: '\\u0051\\u24C6\\uFF31\\uA756\\uA758\\u024A' },\n { base: 'R', letters: '\\u0052\\u24C7\\uFF32\\u0154\\u1E58\\u0158\\u0210\\u0212\\u1E5A\\u1E5C\\u0156\\u1E5E\\u024C\\u2C64\\uA75A\\uA7A6\\uA782' },\n { base: 'S', letters: '\\u0053\\u24C8\\uFF33\\u1E9E\\u015A\\u1E64\\u015C\\u1E60\\u0160\\u1E66\\u1E62\\u1E68\\u0218\\u015E\\u2C7E\\uA7A8\\uA784' },\n { base: 'T', letters: '\\u0054\\u24C9\\uFF34\\u1E6A\\u0164\\u1E6C\\u021A\\u0162\\u1E70\\u1E6E\\u0166\\u01AC\\u01AE\\u023E\\uA786' },\n { base: 'TZ', letters: '\\uA728' },\n { base: 'U', letters: '\\u0055\\u24CA\\uFF35\\u00D9\\u00DA\\u00DB\\u0168\\u1E78\\u016A\\u1E7A\\u016C\\u00DC\\u01DB\\u01D7\\u01D5\\u01D9\\u1EE6\\u016E\\u0170\\u01D3\\u0214\\u0216\\u01AF\\u1EEA\\u1EE8\\u1EEE\\u1EEC\\u1EF0\\u1EE4\\u1E72\\u0172\\u1E76\\u1E74\\u0244' },\n { base: 'V', letters: '\\u0056\\u24CB\\uFF36\\u1E7C\\u1E7E\\u01B2\\uA75E\\u0245' },\n { base: 'VY', letters: '\\uA760' },\n { base: 'W', letters: '\\u0057\\u24CC\\uFF37\\u1E80\\u1E82\\u0174\\u1E86\\u1E84\\u1E88\\u2C72' },\n { base: 'X', letters: '\\u0058\\u24CD\\uFF38\\u1E8A\\u1E8C' },\n { base: 'Y', letters: '\\u0059\\u24CE\\uFF39\\u1EF2\\u00DD\\u0176\\u1EF8\\u0232\\u1E8E\\u0178\\u1EF6\\u1EF4\\u01B3\\u024E\\u1EFE' },\n { base: 'Z', letters: '\\u005A\\u24CF\\uFF3A\\u0179\\u1E90\\u017B\\u017D\\u1E92\\u1E94\\u01B5\\u0224\\u2C7F\\u2C6B\\uA762' },\n { base: 'a', letters: '\\u0061\\u24D0\\uFF41\\u1E9A\\u00E0\\u00E1\\u00E2\\u1EA7\\u1EA5\\u1EAB\\u1EA9\\u00E3\\u0101\\u0103\\u1EB1\\u1EAF\\u1EB5\\u1EB3\\u0227\\u01E1\\u00E4\\u01DF\\u1EA3\\u00E5\\u01FB\\u01CE\\u0201\\u0203\\u1EA1\\u1EAD\\u1EB7\\u1E01\\u0105\\u2C65\\u0250' },\n { base: 'aa', letters: '\\uA733' },\n { base: 'ae', letters: '\\u00E6\\u01FD\\u01E3' },\n { base: 'ao', letters: '\\uA735' },\n { base: 'au', letters: '\\uA737' },\n { base: 'av', letters: '\\uA739\\uA73B' },\n { base: 'ay', letters: '\\uA73D' },\n { base: 'b', letters: '\\u0062\\u24D1\\uFF42\\u1E03\\u1E05\\u1E07\\u0180\\u0183\\u0253' },\n { base: 'c', letters: '\\u0063\\u24D2\\uFF43\\u0107\\u0109\\u010B\\u010D\\u00E7\\u1E09\\u0188\\u023C\\uA73F\\u2184' },\n { base: 'd', letters: '\\u0064\\u24D3\\uFF44\\u1E0B\\u010F\\u1E0D\\u1E11\\u1E13\\u1E0F\\u0111\\u018C\\u0256\\u0257\\uA77A' },\n { base: 'dz', letters: '\\u01F3\\u01C6' },\n { base: 'e', letters: '\\u0065\\u24D4\\uFF45\\u00E8\\u00E9\\u00EA\\u1EC1\\u1EBF\\u1EC5\\u1EC3\\u1EBD\\u0113\\u1E15\\u1E17\\u0115\\u0117\\u00EB\\u1EBB\\u011B\\u0205\\u0207\\u1EB9\\u1EC7\\u0229\\u1E1D\\u0119\\u1E19\\u1E1B\\u0247\\u025B\\u01DD' },\n { base: 'f', letters: '\\u0066\\u24D5\\uFF46\\u1E1F\\u0192\\uA77C' },\n { base: 'g', letters: '\\u0067\\u24D6\\uFF47\\u01F5\\u011D\\u1E21\\u011F\\u0121\\u01E7\\u0123\\u01E5\\u0260\\uA7A1\\u1D79\\uA77F' },\n { base: 'h', letters: '\\u0068\\u24D7\\uFF48\\u0125\\u1E23\\u1E27\\u021F\\u1E25\\u1E29\\u1E2B\\u1E96\\u0127\\u2C68\\u2C76\\u0265' },\n { base: 'hv', letters: '\\u0195' },\n { base: 'i', letters: '\\u0069\\u24D8\\uFF49\\u00EC\\u00ED\\u00EE\\u0129\\u012B\\u012D\\u00EF\\u1E2F\\u1EC9\\u01D0\\u0209\\u020B\\u1ECB\\u012F\\u1E2D\\u0268\\u0131' },\n { base: 'j', letters: '\\u006A\\u24D9\\uFF4A\\u0135\\u01F0\\u0249' },\n { base: 'k', letters: '\\u006B\\u24DA\\uFF4B\\u1E31\\u01E9\\u1E33\\u0137\\u1E35\\u0199\\u2C6A\\uA741\\uA743\\uA745\\uA7A3' },\n { base: 'l', letters: '\\u006C\\u24DB\\uFF4C\\u0140\\u013A\\u013E\\u1E37\\u1E39\\u013C\\u1E3D\\u1E3B\\u017F\\u0142\\u019A\\u026B\\u2C61\\uA749\\uA781\\uA747' },\n { base: 'lj', letters: '\\u01C9' },\n { base: 'm', letters: '\\u006D\\u24DC\\uFF4D\\u1E3F\\u1E41\\u1E43\\u0271\\u026F' },\n { base: 'n', letters: '\\u006E\\u24DD\\uFF4E\\u01F9\\u0144\\u00F1\\u1E45\\u0148\\u1E47\\u0146\\u1E4B\\u1E49\\u019E\\u0272\\u0149\\uA791\\uA7A5' },\n { base: 'nj', letters: '\\u01CC' },\n { base: 'o', letters: '\\u006F\\u24DE\\uFF4F\\u00F2\\u00F3\\u00F4\\u1ED3\\u1ED1\\u1ED7\\u1ED5\\u00F5\\u1E4D\\u022D\\u1E4F\\u014D\\u1E51\\u1E53\\u014F\\u022F\\u0231\\u00F6\\u022B\\u1ECF\\u0151\\u01D2\\u020D\\u020F\\u01A1\\u1EDD\\u1EDB\\u1EE1\\u1EDF\\u1EE3\\u1ECD\\u1ED9\\u01EB\\u01ED\\u00F8\\u01FF\\u0254\\uA74B\\uA74D\\u0275' },\n { base: 'oi', letters: '\\u01A3' },\n { base: 'ou', letters: '\\u0223' },\n { base: 'oo', letters: '\\uA74F' },\n { base: 'p', letters: '\\u0070\\u24DF\\uFF50\\u1E55\\u1E57\\u01A5\\u1D7D\\uA751\\uA753\\uA755' },\n { base: 'q', letters: '\\u0071\\u24E0\\uFF51\\u024B\\uA757\\uA759' },\n { base: 'r', letters: '\\u0072\\u24E1\\uFF52\\u0155\\u1E59\\u0159\\u0211\\u0213\\u1E5B\\u1E5D\\u0157\\u1E5F\\u024D\\u027D\\uA75B\\uA7A7\\uA783' },\n { base: 's', letters: '\\u0073\\u24E2\\uFF53\\u00DF\\u015B\\u1E65\\u015D\\u1E61\\u0161\\u1E67\\u1E63\\u1E69\\u0219\\u015F\\u023F\\uA7A9\\uA785\\u1E9B' },\n { base: 't', letters: '\\u0074\\u24E3\\uFF54\\u1E6B\\u1E97\\u0165\\u1E6D\\u021B\\u0163\\u1E71\\u1E6F\\u0167\\u01AD\\u0288\\u2C66\\uA787' },\n { base: 'tz', letters: '\\uA729' },\n { base: 'u', letters: '\\u0075\\u24E4\\uFF55\\u00F9\\u00FA\\u00FB\\u0169\\u1E79\\u016B\\u1E7B\\u016D\\u00FC\\u01DC\\u01D8\\u01D6\\u01DA\\u1EE7\\u016F\\u0171\\u01D4\\u0215\\u0217\\u01B0\\u1EEB\\u1EE9\\u1EEF\\u1EED\\u1EF1\\u1EE5\\u1E73\\u0173\\u1E77\\u1E75\\u0289' },\n { base: 'v', letters: '\\u0076\\u24E5\\uFF56\\u1E7D\\u1E7F\\u028B\\uA75F\\u028C' },\n { base: 'vy', letters: '\\uA761' },\n { base: 'w', letters: '\\u0077\\u24E6\\uFF57\\u1E81\\u1E83\\u0175\\u1E87\\u1E85\\u1E98\\u1E89\\u2C73' },\n { base: 'x', letters: '\\u0078\\u24E7\\uFF58\\u1E8B\\u1E8D' },\n { base: 'y', letters: '\\u0079\\u24E8\\uFF59\\u1EF3\\u00FD\\u0177\\u1EF9\\u0233\\u1E8F\\u00FF\\u1EF7\\u1E99\\u1EF5\\u01B4\\u024F\\u1EFF' },\n { base: 'z', letters: '\\u007A\\u24E9\\uFF5A\\u017A\\u1E91\\u017C\\u017E\\u1E93\\u1E95\\u01B6\\u0225\\u0240\\u2C6C\\uA763' }\n ];\n\n const diacriticsMap = {};\n for (let i = 0; i < defaultDiacriticsRemovalap.length; i++) {\n const letters = defaultDiacriticsRemovalap[i].letters.split('');\n for (let j = 0; j < letters.length; j++) {\n diacriticsMap[letters[j]] = defaultDiacriticsRemovalap[i].base;\n }\n }\n\n // eslint-disable-next-line no-control-regex\n return str.replace(/[^\\u0000-\\u007E]/g, function (a) {\n return diacriticsMap[a] || a;\n });\n }\n\n };\n }\n]);\n","'use strict';\n\nApplication.Services.factory('dialogs', ['$uibModal', function ($uibModal) {\n return ({\n confirm (options, success, error) {\n const defaultOpts = {\n templateUrl: '/shared/confirm_modal.html',\n size: 'sm',\n resolve: {\n object () {\n return {\n title: 'Titre de confirmation',\n msg: 'Message de confirmation'\n };\n }\n },\n controller: ['$scope', '$uibModalInstance', '$state', 'object', function ($scope, $uibModalInstance, $state, object) {\n $scope.object = object;\n $scope.ok = function (info) { $uibModalInstance.close(info); };\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n }]\n };\n if (angular.isObject(options)) { angular.extend(defaultOpts, options); }\n return $uibModal.open(defaultOpts)\n .result.finally(null).then(function (info) {\n if (angular.isFunction(success)) {\n return success(info);\n }\n }\n , function (reason) {\n if (angular.isFunction(error)) {\n return error(reason);\n }\n });\n }\n });\n}]);\n","Application.Services.service('es', ['esFactory', function (esFactory) {\n return esFactory({ host: window.location.origin });\n}]);\n","'use strict';\n\nApplication.Services.factory('Event', ['$resource', function ($resource) {\n return $resource('/api/events/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n },\n upcoming: {\n method: 'GET',\n url: '/api/events/upcoming/:limit',\n params: { limit: '@limit' },\n isArray: true\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('EventTheme', ['$resource', function ($resource) {\n return $resource('/api/event_themes/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Export', ['$http', function ($http) {\n return ({\n status (query) {\n return $http.post('/api/exports/status', query);\n }\n });\n}]);\n","Application.Services.factory('FabAnalytics', ['$resource', function ($resource) {\n return $resource('/api/analytics',\n {}, {\n data: {\n method: 'GET',\n url: '/api/analytics/data'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Group', ['$resource', function ($resource) {\n return $resource('/api/groups/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Help', ['$rootScope', '$uibModal', '$state', 'AuthService',\n function ($rootScope, $uibModal, $state, AuthService) {\n const TOURS = {\n 'app.public.home': 'welcome',\n 'app.public.machines_list': 'machines',\n 'app.public.spaces_list': 'spaces',\n 'app.admin.trainings': 'trainings',\n 'app.admin.calendar': 'calendar',\n 'app.admin.members': 'members',\n 'app.admin.invoices': 'invoices',\n 'app.admin.pricing': 'pricing',\n 'app.admin.events': 'events',\n 'app.admin.projects': 'projects',\n 'app.admin.statistics': 'statistics',\n 'app.admin.settings': 'settings',\n 'app.admin.open_api_clients': 'open-api'\n };\n\n return function (e) {\n if (!AuthService.isAuthorized(['admin', 'manager'])) return;\n\n if (e.key === 'F1') {\n e.preventDefault();\n // retrieve the tour name, based on the current location\n const tourName = TOURS[$state.current.name];\n\n // if no tour, just open the guide\n if (tourName === undefined) {\n return window.open('http://guide-fr.fab.mn', '_blank');\n }\n\n $uibModal.open({\n animation: true,\n templateUrl: '/shared/help_modal.html',\n resolve: {\n tourName: function () { return tourName; }\n },\n controller: ['$scope', '$uibModalInstance', 'uiTourService', 'tourName', function ($scope, $uibModalInstance, uiTourService, tourName) {\n // start the tour and hide the modal\n $scope.onTour = function () {\n const tour = uiTourService.getTourByName(tourName);\n if (tour) { tour.start(); }\n\n $uibModalInstance.close('tour');\n };\n\n // open the user's guide and hide the modal\n $scope.onGuide = function () {\n $uibModalInstance.close('guide');\n };\n }]\n });\n }\n };\n }]);\n","'use strict';\n\nApplication.Services.factory('helpers', ['AuthService', function (AuthService) {\n return ({\n getAmountToPay (price, walletAmount) {\n if (walletAmount > price) { return 0; } else { return price - walletAmount; }\n },\n\n isUserValidationRequired (settings, type) {\n return settings.user_validation_required === 'true' &&\n settings.user_validation_required_list &&\n settings.user_validation_required_list.split(',').includes(type);\n },\n\n isUserValidated (user) {\n return !!(user?.validated_at);\n },\n\n isUserValidatedByType (user, settings, type) {\n return AuthService.isAuthorized(['admin', 'manager']) || (!this.isUserValidationRequired(settings, type) || (\n this.isUserValidationRequired(settings, type) && this.isUserValidated(user)));\n }\n });\n}]);\n","'use strict';\n\nApplication.Services.factory('Ical', ['$resource', function ($resource) {\n return $resource('/api/ical/externals');\n}]);\n","'use strict';\n\nApplication.Services.factory('ICalendar', ['$resource', function ($resource) {\n return $resource('/api/i_calendar/:id',\n { id: '@id' }, {\n events: {\n method: 'GET',\n url: '/api/i_calendar/:id/events'\n },\n sync: {\n method: 'POST',\n url: '/api/i_calendar/:id/sync',\n params: { id: '@id' }\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Import', ['$resource', function ($resource) {\n return $resource('/api/imports/:id',\n { id: '@id' }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Invoice', ['$resource', function ($resource) {\n return $resource('/api/invoices/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n },\n list: {\n url: '/api/invoices/list',\n method: 'POST',\n isArray: true\n },\n first: {\n url: '/api/invoices/first',\n method: 'GET'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Licence', ['$resource', function ($resource) {\n return $resource('/api/licences/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('LocalPayment', ['$resource', function ($resource) {\n return $resource('/api/local_payment',\n {}, {\n confirm: {\n method: 'POST',\n url: '/api/local_payment/confirm_payment',\n isArray: false\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Machine', ['$resource', function ($resource) {\n return $resource('/api/machines/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Member', ['$resource', 'Setting', function ($resource, Setting) {\n return $resource('/api/members/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n },\n lastSubscribed: {\n method: 'GET',\n url: '/api/last_subscribed/:limit',\n params: { limit: '@limit' },\n isArray: true\n },\n merge: {\n method: 'PUT',\n url: '/api/members/:id/merge'\n },\n list: {\n url: '/api/members/list',\n method: 'POST',\n isArray: true\n },\n search: {\n method: 'GET',\n url: '/api/members/search/:query',\n params: { query: '@query' },\n isArray: true\n },\n mapping: {\n method: 'GET',\n url: '/api/members/mapping'\n },\n completeTour: {\n method: 'PATCH',\n url: '/api/members/:id/complete_tour',\n params: { id: '@id' },\n interceptor: {\n response: function (response) {\n return Setting.query({ names: \"['feature_tour_display']\" }).$promise.then((settings) => {\n if (settings.feature_tour_display === 'session') {\n Fablab.sessionTours.push(response.data.tours[0]);\n return { tours: Fablab.sessionTours };\n }\n return response.data;\n });\n }\n }\n },\n updateRole: {\n method: 'PATCH',\n url: '/api/members/:id/update_role'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Notification', ['$resource', function ($resource) {\n return $resource('/api/notifications/:id',\n { id: '@id' }, {\n query: {\n isArray: false\n },\n update: {\n method: 'PUT'\n },\n polling: {\n url: '/api/notifications/polling',\n method: 'GET'\n },\n last_unread: {\n url: '/api/notifications/last_unread',\n method: 'GET'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('OpenAPIClient', ['$resource', function ($resource) {\n return $resource('/api/open_api_clients/:id',\n { id: '@id' }, {\n resetToken: {\n method: 'PATCH',\n url: '/api/open_api_clients/:id/reset_token'\n },\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('OpenlabProject', ['$resource', function ($resource) {\n return $resource('/api/openlab_projects/:id',\n { id: '@id' }, {\n query: {\n method: 'GET',\n isArray: false\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('paginationService', [function () {\n const helpers = {};\n\n helpers.pageCount = (totalCount, perPage) => Math.ceil(totalCount / perPage);\n\n helpers.hasNextPage = function (currentPage, totalCount, perPage) {\n const _pageCount = helpers.pageCount(totalCount, perPage);\n return (_pageCount !== currentPage) && (_pageCount !== 0);\n };\n\n const Instance = function (resourceService, currentPage, perPage, totalCount, defaultQueryParams, callback, functionName) {\n this.resourceService = resourceService;\n this.currentPage = currentPage;\n this.perPage = perPage;\n this.totalCount = totalCount;\n this.defaultQueryParams = defaultQueryParams;\n this.callback = callback;\n this.functionName = functionName || 'query';\n this.loading = false;\n\n this.pageCount = function () {\n return helpers.pageCount(this.totalCount, this.perPage);\n };\n\n this.hasNextPage = function () {\n return helpers.hasNextPage(this.currentPage, this.totalCount, this.perPage);\n };\n\n this.loadMore = function (queryParams) {\n let k, v;\n this.currentPage += 1;\n this.loading = true;\n\n const _queryParams = { page: this.currentPage, per_page: this.perPage };\n\n if (queryParams) {\n for (k in queryParams) {\n v = queryParams[k];\n _queryParams[k] = v;\n }\n }\n\n for (k in this.defaultQueryParams) {\n v = this.defaultQueryParams[k];\n _queryParams[k] = v;\n }\n\n this.resourceService[this.functionName](_queryParams, dataPromise => {\n this.callback(dataPromise);\n this.loading = false;\n });\n };\n };\n\n return { Instance };\n}\n]);\n","'use strict';\n\nApplication.Services.factory('Payment', ['$resource', function ($resource) {\n return $resource('/api/payments',\n {}, {\n confirm: {\n method: 'POST',\n url: '/api/stripe/confirm_payment',\n isArray: false\n },\n onlinePaymentStatus: {\n method: 'GET',\n url: '/api/stripe/online_payment_status'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Plan', ['$resource', function ($resource) {\n return $resource('/api/plans/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('PlanCategory', ['$resource', function ($resource) {\n return $resource('/api/plan_categories');\n}]);\n","'use strict';\n\nApplication.Services.factory('Price', ['$resource', function ($resource) {\n return $resource('/api/prices/:id',\n {}, {\n query: {\n isArray: true\n },\n update: {\n method: 'PUT'\n },\n compute: {\n method: 'POST',\n url: '/api/prices/compute',\n isArray: false\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('PriceCategory', ['$resource', function ($resource) {\n return $resource('/api/price_categories/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Pricing', ['$resource', function ($resource) {\n return $resource('/api/pricing',\n {}, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('ProfileCustomField', ['$resource', function ($resource) {\n return $resource('/api/profile_custom_fields/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Project', ['$resource', function ($resource) {\n return $resource('/api/projects/:id',\n { id: '@id' }, {\n lastPublished: {\n method: 'GET',\n url: '/api/projects/last_published',\n isArray: true\n },\n search: {\n method: 'GET',\n url: '/api/projects/search',\n isArray: false\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('ProofOfIdentityType', ['$resource', function ($resource) {\n return $resource('/api/proof_of_identity_types/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Reservation', ['$resource', function ($resource) {\n return $resource('/api/reservations/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.service('Session', [function () {\n this.create = function (user) {\n this.currentUser = user;\n };\n\n this.destroy = function () {\n this.currentUser = null;\n };\n\n return this;\n}]);\n","'use strict';\n\nApplication.Services.factory('Setting', ['$resource', function ($resource) {\n return $resource('/api/settings/:name',\n { name: '@name' }, {\n update: {\n method: 'PUT',\n transformRequest: (data) => {\n return angular.toJson({ setting: data });\n }\n },\n bulkUpdate: {\n url: '/api/settings/bulk_update',\n method: 'PATCH'\n },\n query: {\n isArray: false\n },\n reset: {\n url: '/api/settings/reset/:name',\n params: { name: '@name' },\n method: 'PUT'\n },\n isPresent: {\n url: '/api/settings/is_present/:name',\n params: { name: '@name' },\n method: 'GET'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('SlotsReservation', ['$resource', function ($resource) {\n return $resource('/api/slots_reservations/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n },\n cancel: {\n method: 'PUT',\n url: '/api/slots_reservations/:id/cancel'\n }\n }\n );\n}]);\n","'use strict';\n\n// list the social networks supported in the user's profiles\nApplication.Services.factory('SocialNetworks', [function () {\n return ['facebook', 'twitter', 'viadeo', 'linkedin', 'instagram', 'youtube', 'vimeo', 'dailymotion', 'github', 'echosciences', 'website', 'pinterest', 'lastfm', 'flickr'];\n}]);\n","'use strict';\n\nApplication.Services.factory('Space', ['$resource', function ($resource) {\n return $resource('/api/spaces/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Statistics', ['$resource', function ($resource) {\n return $resource('/api/statistics');\n}]);\n","'use strict';\n\nApplication.Services.factory('Subscription', ['$resource', function ($resource) {\n return $resource('/api/subscriptions/:id',\n { id: '@id' }, {\n payment_details: {\n url: '/api/subscriptions/:id/payment_details',\n method: 'GET'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Tag', ['$resource', function ($resource) {\n return $resource('/api/tags/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Theme', ['$resource', function ($resource) {\n return $resource('/api/themes/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Training', ['$resource', function ($resource) {\n return $resource('/api/trainings/:id',\n { id: '@id' }, {\n update: {\n method: 'PUT'\n },\n availabilities: {\n method: 'GET',\n url: '/api/trainings/:id/availabilities'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('TrainingsPricing', ['$resource', function ($resource) {\n return $resource('/api/trainings_pricings/:id',\n {}, {\n update: {\n method: 'PUT'\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Translations', ['$translatePartialLoader', '$translate', function ($translatePartialLoader, $translate) {\n return ({\n query (stateName) {\n if (angular.isArray((stateName))) {\n angular.forEach(stateName, state => $translatePartialLoader.addPart(state));\n } else {\n $translatePartialLoader.addPart(stateName);\n }\n return $translate.refresh();\n }\n });\n}]);\n","'use strict';\n\nApplication.Services.factory('User', ['$resource', function ($resource) {\n return $resource('/api/users/:id',\n { id: '@id' }, {\n query: {\n isArray: false\n }\n }\n );\n}]);\n","'use strict';\n\nApplication.Services.factory('Version', ['$resource', function ($resource) {\n return $resource('/api/version/:origin',\n {}, {\n get: {\n method: 'POST'\n }\n });\n}]);\n","'use strict';\n\nApplication.Services.factory('Wallet', ['$resource', function ($resource) {\n return $resource('/api/wallet',\n {}, {\n getWalletByUser: {\n method: 'GET',\n url: '/api/wallet/by_user/:user_id',\n isArray: false\n },\n transactions: {\n method: 'GET',\n url: '/api/wallet/:id/transactions',\n isArray: true\n },\n credit: {\n method: 'PUT',\n url: '/api/wallet/:id/credit',\n isArray: false\n }\n }\n );\n}]);\n","import 'core-js/stable';\nimport 'regenerator-runtime/runtime';\n\nimport 'jquery';\nimport {} from 'jquery-ujs';\nimport 'bootstrap-sass';\nimport 'src/javascript/lib/polyfill';\nimport 'angular';\n\nimport 'angular-i18n/angular-locale_fr-fr.js';\n\nimport 'angular-cookies';\nimport 'angular-resource';\nimport 'angular-sanitize';\nimport 'angular-touch';\nimport '@uirouter/angularjs';\nimport 'angular-ui-bootstrap';\nimport 'ui-select';\nimport 'moment';\n\nimport 'moment/locale/fr.js';\n\nimport 'moment-timezone';\nimport 'angular-ui-calendar';\nimport 'fullcalendar';\n\nimport 'fullcalendar/dist/locale/fr.js';\n\nimport 'angular-moment';\nimport 'ngUpload';\nimport 'jasny-bootstrap/js/fileinput';\nimport 'holderjs';\nimport 'AngularDevise';\nimport 'src/javascript/lib/devise-modal';\nimport 'angular-growl-v2';\nimport 'angular-xeditable';\nimport 'checklist-model/checklist-model';\nimport 'angular-unsavedchanges/lib/unsavedChanges';\nimport 'angular-loading-bar/src/loading-bar';\nimport 'angular-scroll/angular-scroll';\nimport 'src/javascript/lib/dirDisqus';\nimport 'src/javascript/lib/humanize';\nimport 'underscore/underscore';\nimport 'elasticsearch-browser/elasticsearch.angular';\nimport 'd3/d3';\nimport 'nvd3/build/nv.d3.js';\nimport 'twitter-fetcher';\nimport 'medium-editor/dist/js/medium-editor';\nimport 'angular-medium-editor/dist/angular-medium-editor';\nimport 'bootstrap-switch/dist/js/bootstrap-switch';\nimport 'angular-bootstrap-switch/dist/angular-bootstrap-switch';\nimport 'angular-base64-upload/dist/angular-base64-upload.min';\nimport 'summernote';\n\nimport 'summernote/lang/summernote-fr-FR.js';\n\nimport 'angular-summernote/dist/angular-summernote';\nimport 'src/javascript/lib/summernote-ext-nugget';\nimport '@claviska/jquery-minicolors/jquery.minicolors.js';\nimport 'angular-minicolors/angular-minicolors.js';\nimport 'angular-translate/dist/angular-translate';\nimport 'angular-translate-loader-partial/angular-translate-loader-partial';\nimport 'messageformat/messageformat';\nimport 'angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat';\nimport 'ng-fittext/dist/ng-FitText.min';\nimport 'angular-aside/dist/js/angular-aside';\nimport 'ng-caps-lock/ng-caps-lock';\nimport 'angular-recaptcha';\nimport 'codemirror/lib/codemirror';\nimport 'codemirror/addon/edit/matchbrackets';\nimport 'codemirror/mode/css/css';\nimport 'codemirror/mode/sass/sass';\nimport 'angular-ui-codemirror/src/ui-codemirror';\nimport 'angular-hotkeys/build/hotkeys';\nimport 'hone/dist/hone';\nimport 'tether/dist/js/tether';\nimport 'angular-bind-html-compile/angular-bind-html-compile';\nimport 'angular-ui-tour/app/angular-ui-tour';\nimport '@fortawesome/fontawesome-free';\nimport '@fortawesome/fontawesome-free/js/v4-shims';\n\nrequire('src/javascript/app.js');\nrequire('src/javascript/router.js');\nrequire('src/javascript/plugins.js.erb');\n\nfunction importAll (r) { r.keys().forEach(r); }\n\n// we do not include markdown files (*.md)\nimportAll(require.context('src/javascript/components/', true, /^.+\\.(?!md).+/));\nimportAll(require.context('src/javascript/controllers/', true, /.*/));\nimportAll(require.context('src/javascript/services/', true, /.*/));\nimportAll(require.context('src/javascript/directives/', true, /.*/));\nimportAll(require.context('src/javascript/filters/', true, /.*/));\nimportAll(require.context('src/javascript/typings/', true, /.*/));\n\nimportAll(require.context('images', true));\nimportAll(require.context('templates', true));\n","/* eslint-disable\n camelcase,\n handle-callback-err,\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n\nApplication.Controllers.controller('EventsController', ['$scope', '$state', 'Event', 'categoriesPromise', 'themesPromise', 'ageRangesPromise',\n function ($scope, $state, Event, categoriesPromise, themesPromise, ageRangesPromise) {\n /* PUBLIC SCOPE */\n\n // The events displayed on the page\n $scope.events = [];\n\n // The currently displayed page number\n $scope.page = 1;\n\n // List of categories for the events\n $scope.categories = categoriesPromise;\n\n // List of events themes\n $scope.themes = themesPromise;\n\n // List of age ranges\n $scope.ageRanges = ageRangesPromise;\n\n // Hide or show the 'load more' button\n $scope.noMoreResults = false;\n\n // Active filters for the events list\n $scope.filters = {\n category_id: null,\n theme_id: null,\n age_range_id: null\n };\n\n $scope.monthNames = [\"janvier\", \"février\", \"mars\", \"avril\", \"mai\", \"juin\", \"juillet\", \"août\", \"septembre\", \"octobre\", \"novembre\", \"décembre\"];\n\n /**\n * Adds a resultset of events to the bottom of the page, grouped by month\n */\n $scope.loadMoreEvents = function () {\n $scope.page += 1;\n return Event.query(Object.assign({ page: $scope.page }, $scope.filters), function (data) {\n $scope.events = $scope.events.concat(data);\n groupEvents($scope.events);\n\n if (!data[0] || (data[0].nb_total_events <= $scope.events.length)) {\n return $scope.noMoreResults = true;\n }\n });\n };\n\n /**\n * Callback to redirect the user to the specified event page\n * @param event {{id:number}}\n */\n $scope.showEvent = function (event) { $state.go('app.public.events_show', { id: event.id }); };\n\n /**\n * Callback to refresh the events list according to the filters set\n */\n $scope.filterEvents = function () {\n // reinitialize results datasets\n $scope.page = 1;\n $scope.eventsGroupByMonth = {};\n $scope.featuredEevent = null;\n $scope.events = [];\n $scope.monthOrder = [];\n $scope.noMoreResults = false;\n\n // run a search query\n return Event.query(Object.assign({ page: $scope.page }, $scope.filters), function (data) {\n $scope.events = data;\n groupEvents(data);\n\n if (!data[0] || (data[0].nb_total_events <= $scope.events.length)) {\n return $scope.noMoreResults = true;\n }\n });\n };\n\n /**\n * Test if the provided event occurs on a single day or on many days\n * @param event {{start_date:Date, end_date:Date}} Event object as retreived from the API\n * @return {boolean} false if the event occurs on many days\n */\n $scope.onSingleDay = function (event) { moment(event.start_date).isSame(event.end_date, 'day'); };\n\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n $scope.filterEvents();\n };\n\n /**\n * Group the provided events by month/year and concat them with existing results\n * Then compute the ordered list of months for the complete resultset.\n * Affect the resulting events groups in $scope.eventsGroupByMonth and the ordered month keys in $scope.monthOrder.\n * @param events {Array} Events retrieved from the API\n */\n const groupEvents = function (events) {\n if (events.length > 0) {\n const eventsGroupedByMonth = _.groupBy(events, function (obj) {\n return _.map(['month_id', 'year'], function (key) {\n return obj[key];\n });\n });\n $scope.eventsGroupByMonth = Object.assign($scope.eventsGroupByMonth, eventsGroupedByMonth);\n $scope.monthOrder = Object.keys($scope.eventsGroupByMonth);\n $scope.featuredEevent = _.minBy(events.filter(e => moment(e.start_date).isAfter()), e => e.start_date);\n }\n };\n\n // # !!! MUST BE CALLED AT THE END of the controller\n initialize();\n }\n]);\n\nApplication.Controllers.controller('ShowEventController', ['$scope', '$state', '$rootScope', 'Event', '$uibModal', 'Member', 'Reservation', 'Price', 'CustomAsset', 'SlotsReservation', 'eventPromise', 'growl', '_t', 'Wallet', 'AuthService', 'helpers', 'dialogs', 'priceCategoriesPromise', 'settingsPromise', 'LocalPayment',\n function ($scope, $state,$rootScope, Event, $uibModal, Member, Reservation, Price, CustomAsset, SlotsReservation, eventPromise, growl, _t, Wallet, AuthService, helpers, dialogs, priceCategoriesPromise, settingsPromise, LocalPayment) {\n /* PUBLIC SCOPE */\n\n // reservations for the currently shown event\n $scope.reservations = [];\n\n // current date & time\n $scope.now = moment();\n\n // user to deal with\n $scope.ctrl =\n { member: {} };\n\n // parameters for a new reservation\n $scope.reserve = {\n nbPlaces: {\n normal: []\n },\n nbReservePlaces: 0,\n tickets: {},\n toReserve: false,\n amountTotal: 0,\n totalNoCoupon: 0,\n totalSeats: 0\n };\n\n // Discount coupon to apply to the basket, if any\n $scope.coupon =\n { applied: null };\n\n // Get the details for the current event (event's id is recovered from the current URL)\n $scope.event = eventPromise;\n\n // the application global settings\n $scope.settings = settingsPromise;\n\n // List of price categories for the events\n $scope.priceCategories = priceCategoriesPromise;\n\n // Global config: is the user authorized to change his bookings slots?\n $scope.enableBookingMove = (settingsPromise.booking_move_enable === 'true');\n\n // Global config: delay in hours before a booking while changing the booking slot is forbidden\n $scope.moveBookingDelay = parseInt(settingsPromise.booking_move_delay);\n\n // Global config: is the user authorized to cancel his booking slots?\n $scope.enableBookingCancel = settingsPromise.booking_cancel_enable === 'true';\n\n // Global config: delay in hours from now when restrictions occurs about cancelling reservations\n $scope.cancelBookingDelay = parseInt(settingsPromise.booking_cancel_delay);\n\n // Message displayed to the end user about rules that applies to events reservations\n $scope.eventExplicationsAlert = settingsPromise.event_explications_alert;\n\n // Global config: is the user validation required ?\n $scope.enableUserValidationRequired = settingsPromise.user_validation_required === 'true';\n\n // online payments (by card)\n $scope.onlinePayment = {\n showModal: false,\n cartItems: undefined\n };\n\n /**\n * Callback to delete the provided event (admins only)\n */\n $scope.deleteEvent = function () {\n // open a confirmation dialog\n const modalInstance = $uibModal.open({\n animation: true,\n templateUrl: '/events/deleteRecurrent.html',\n size: 'md',\n controller: 'DeleteRecurrentEventController',\n resolve: {\n eventPromise: ['Event', function (Event) { return Event.get({ id: $scope.event.id }).$promise; }]\n }\n });\n // once the dialog was closed, do things depending on the result\n modalInstance.result.then(function (res) {\n if (res.status === 'success') {\n $state.go('app.public.events_list');\n }\n });\n };\n\n /**\n * Callback to call when the number of tickets to book changes in the current booking\n */\n $scope.changeNbPlaces = function () {\n // compute the total remaining places\n let remain = $scope.event.nb_free_places - $scope.reserve.nbReservePlaces;\n for (let ticket in $scope.reserve.tickets) {\n remain -= $scope.reserve.tickets[ticket];\n }\n // we store the total number of seats booked, this is used to know if the 'pay' button must be shown\n $scope.reserve.totalSeats = $scope.event.nb_free_places - remain;\n\n // update the available seats for full price tickets\n const fullPriceRemains = $scope.reserve.nbReservePlaces + remain;\n $scope.reserve.nbPlaces.normal = __range__(0, fullPriceRemains, true);\n\n // update the available seats for other prices tickets\n for (let key in $scope.reserve.nbPlaces) {\n if (key !== 'normal') {\n const priceRemain = $scope.reserve.tickets[key] + remain;\n $scope.reserve.nbPlaces[key] = __range__(0, priceRemain, true);\n }\n }\n\n // recompute the total price\n return $scope.computeEventAmount();\n };\n\n /**\n * Callback to reset the current reservation parameters\n * @param e {Object} see https://docs.angularjs.org/guide/expression#-event-\n */\n $scope.cancelReserve = function (e) {\n e.preventDefault();\n return resetEventReserve();\n };\n\n $scope.isUserValidatedByType = () => {\n return helpers.isUserValidatedByType($scope.ctrl.member, $scope.settings, 'event');\n };\n\n $scope.isShowReserveEventButton = () => {\n return $scope.event.nb_free_places > 0 &&\n !$scope.reserve.toReserve &&\n $scope.now.isBefore($scope.event.end_date) &&\n helpers.isUserValidatedByType($scope.ctrl.member, $scope.settings, 'event');\n };\n\n /**\n * Callback to allow the user to set the details for his reservation\n */\n $scope.reserveEvent = function () {\n if ($scope.event.nb_total_places > 0) {\n $scope.reserveSuccess = false;\n if (!$scope.isAuthenticated()) {\n $scope.login(null, function (user) {\n if (user.role !== 'admin' || user.role !== 'manager') {\n $scope.ctrl.member = user;\n }\n const sameTimeReservations = findReservationsAtSameTime();\n if (sameTimeReservations.length > 0) {\n showReserveSlotSameTimeModal(sameTimeReservations, function(res) {\n $scope.reserve.toReserve = !$scope.reserve.toReserve;\n });\n } else {\n $scope.reserve.toReserve = !$scope.reserve.toReserve;\n }\n });\n } else {\n if (AuthService.isAuthorized(['admin', 'manager'])) {\n $scope.reserve.toReserve = !$scope.reserve.toReserve;\n } else {\n Member.get({ id: $scope.currentUser.id }, function (member) {\n $scope.ctrl.member = member;\n const sameTimeReservations = findReservationsAtSameTime();\n if (sameTimeReservations.length > 0) {\n showReserveSlotSameTimeModal(sameTimeReservations, function(res) {\n $scope.reserve.toReserve = !$scope.reserve.toReserve;\n });\n } else {\n $scope.reserve.toReserve = !$scope.reserve.toReserve;\n }\n });\n }\n }\n }\n };\n\n /**\n * Callback to deal with the reservations of the user selected in the dropdown list instead of the current user's\n * reservations. (admins only)\n */\n $scope.updateMember = function () {\n resetEventReserve();\n $scope.reserveSuccess = false;\n if ($scope.ctrl.member) {\n Member.get({ id: $scope.ctrl.member.id }, function (member) {\n $scope.ctrl.member = member;\n getReservations($scope.event.id, 'Event', $scope.ctrl.member.id);\n });\n }\n };\n\n /**\n * Callback to trigger the payment process of the current reservation\n */\n $scope.payEvent = function () {\n // first, we check that a user was selected\n if (Object.keys($scope.ctrl.member).length > 0) {\n const reservation = mkReservation($scope.reserve, $scope.event);\n\n return Wallet.getWalletByUser({ user_id: $scope.ctrl.member.id }, function (wallet) {\n const amountToPay = helpers.getAmountToPay($scope.reserve.amountTotal, wallet.amount);\n if ((AuthService.isAuthorized(['member']) && amountToPay > 0)\n || (AuthService.isAuthorized('manager') && $scope.ctrl.member.id === $rootScope.currentUser.id && amountToPay > 0)) {\n if (settingsPromise.online_payment_module !== 'true') {\n growl.error(_t('app.public.events_show.online_payment_disabled'));\n } else {\n return payOnline(reservation);\n }\n } else {\n if (AuthService.isAuthorized('admin')\n || (AuthService.isAuthorized('manager') && $scope.ctrl.member.id !== $rootScope.currentUser.id)\n || amountToPay === 0) {\n return payOnSite(reservation);\n }\n }\n });\n } else {\n // otherwise we alert, this error musn't occur when the current user is not admin\n return growl.error(_t('app.public.events_show.please_select_a_member_first'));\n }\n };\n\n /**\n * Callback to validate the booking of a free event\n */\n $scope.validReserveEvent = function () {\n const reservation = mkReservation($scope.reserve, $scope.event)\n const cartItems = mkCartItems(reservation, $scope.coupon.applied);\n // set the attempting marker\n $scope.attempting = true;\n // save the reservation to the API\n return LocalPayment.confirm(cartItems, function (reservation) {\n // reservation successful\n afterPayment(reservation);\n return $scope.attempting = false;\n }\n , function (response) {\n // reservation failed\n growl.error(response && response.data && response.data.card && response.data.card[0] || 'server error');\n // unset the attempting marker\n $scope.attempting = false;\n })\n };\n\n /**\n * Callback to cancel a reservation\n * @param reservation {Reservation}\n */\n $scope.cancelReservation = function(reservation) {\n dialogs.confirm({\n resolve: {\n object: function() {\n return {\n title: _t('app.public.events_show.cancel_the_reservation'),\n msg: _t('app.public.events_show.do_you_really_want_to_cancel_this_reservation_this_apply_to_all_booked_tickets')\n };\n }\n }\n }, function() { // cancel confirmed\n SlotsReservation.cancel({\n id: reservation.slots_reservations_attributes[0].id\n }, function() { // successfully canceled\n let index;\n growl.success(_t('app.public.events_show.reservation_was_successfully_cancelled'));\n index = $scope.reservations.indexOf(reservation);\n $scope.event.nb_free_places = $scope.event.nb_free_places + reservation.total_booked_seats;\n $scope.reservations[index].slots_reservations_attributes[0].canceled_at = new Date();\n }, function(error) {\n growl.warning(_t('app.public.events_show.cancellation_failed'));\n });\n });\n };\n\n /**\n * Test if the provided reservation has been cancelled\n * @param reservation {Reservation}\n * @returns {boolean}\n */\n $scope.isCancelled = function(reservation) {\n return !!(reservation.slots_reservations_attributes[0].canceled_at);\n }\n\n /**\n * Callback to alter an already booked reservation date. A modal window will be opened to allow the user to choose\n * a new date for his reservation (if any available)\n * @param reservation {Reservation}\n */\n $scope.modifyReservation = function (reservation) {\n const index = $scope.reservations.indexOf(reservation);\n return $uibModal.open({\n templateUrl: '/events/modify_event_reservation_modal.html',\n resolve: {\n event () { return $scope.event; },\n reservation () { return reservation; }\n },\n controller: ['$scope', '$uibModalInstance', 'event', 'reservation', 'Reservation', function ($scope, $uibModalInstance, event, reservation, Reservation) {\n // we copy the controller's resolved parameters into the scope\n $scope.event = event;\n $scope.reservation = angular.copy(reservation);\n\n // set the reservable_id to the first available event\n for (evt of Array.from(event.recurrence_events)) {\n if (evt.nb_free_places > reservation.total_booked_seats) {\n $scope.reservation.reservable_id = evt.id;\n break;\n }\n }\n\n // Callback to validate the new reservation's date\n $scope.ok = function () {\n let eventToPlace = null;\n angular.forEach(event.recurrence_events, function (e) {\n if (e.id === parseInt($scope.reservation.reservable_id, 10)) {\n return eventToPlace = e;\n }\n });\n $scope.reservation.slots_reservations_attributes[0].slot_id = eventToPlace.slot_id;\n $scope.attempting = true;\n Reservation.update({ id: reservation.id }, { reservation: $scope.reservation }, function (reservation) {\n $uibModalInstance.close(reservation);\n $scope.attempting = true;\n }\n , function (response) {\n $scope.alerts = [];\n angular.forEach(response, function (v, k) {\n angular.forEach(v, function (err) {\n $scope.alerts.push({ msg: k + ': ' + err, type: 'danger' });\n });\n });\n $scope.attempting = false;\n });\n };\n\n // Callback to cancel the modification\n $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n }\n ] })\n .result['finally'](null).then(function (reservation) {\n // remove the reservation from the user's reservations list for this event (occurrence)\n $scope.reservations.splice(index, 1);\n // add the number of places transfered (to the new date) to the total of free places for this event\n $scope.event.nb_free_places = $scope.event.nb_free_places + reservation.total_booked_seats;\n // remove the number of places transfered from the total of free places of the receiving occurrance\n angular.forEach($scope.event.recurrence_events, function (e) {\n if (e.id === parseInt(reservation.reservable.id, 10)) {\n return e.nb_free_places = e.nb_free_places - reservation.total_booked_seats;\n }\n });\n });\n };\n\n /**\n * Checks if the provided reservation is able to be moved (date change)\n * @param reservation {Reservation}\n */\n $scope.reservationCanModify = function (reservation) {\n if (AuthService.isAuthorized(['admin', 'manager'])) return true;\n\n const slotStart = moment(reservation.slots_reservations_attributes[0].slot_attributes.start_at);\n const now = moment();\n\n let isAble = false;\n angular.forEach($scope.event.recurrence_events, function (e) {\n if (e.nb_free_places >= reservation.total_booked_seats) { return isAble = true; }\n });\n return (isAble && $scope.enableBookingMove && (slotStart.diff(now, 'hours') >= $scope.moveBookingDelay));\n };\n\n /**\n * Checks if the provided reservation is able to be cancelled\n * @param reservation {Reservation}\n */\n $scope.reservationCanCancel = function(reservation) {\n if (AuthService.isAuthorized(['admin', 'manager'])) return true;\n\n const slotStart = moment(reservation.slots_reservations_attributes[0].slot_attributes.start_at);\n const now = moment();\n return $scope.enableBookingCancel && slotStart.diff(now, \"hours\") >= $scope.cancelBookingDelay;\n };\n\n /**\n * Compute the total amount for the current reservation according to the previously set parameters\n * and assign the result in $scope.reserve.amountTotal\n */\n $scope.computeEventAmount = function () {\n // first we check that a user was selected\n if (Object.keys($scope.ctrl.member).length > 0) {\n const r = mkReservation($scope.reserve, $scope.event);\n return Price.compute(mkCartItems(r, $scope.coupon.applied), function (res) {\n $scope.reserve.amountTotal = res.price;\n return $scope.reserve.totalNoCoupon = res.price_without_coupon;\n });\n } else {\n return $scope.reserve.amountTotal = null;\n }\n };\n\n /**\n * Return the URL allowing to share the current project on the Facebook social network\n */\n $scope.shareOnFacebook = function () { return `https://www.facebook.com/share.php?u=${$state.href('app.public.events_show', { id: $scope.event.id }, { absolute: true }).replace('#', '%23')}`; };\n\n /**\n * Return the URL allowing to share the current project on the Twitter social network\n */\n $scope.shareOnTwitter = function () { return `https://twitter.com/intent/tweet?url=${encodeURIComponent($state.href('app.public.events_show', { id: $scope.event.id }, { absolute: true }))}&text=${encodeURIComponent($scope.event.title)}`; };\n\n /**\n * Return the textual description of the conditions applyable to the given price's category\n * @param category_id {number} ID of the price's category\n */\n $scope.getPriceCategoryConditions = function (category_id) {\n for (let cat of Array.from($scope.priceCategories)) {\n if (cat.id === category_id) {\n return cat.conditions;\n }\n }\n };\n\n /**\n * This will open/close the online payment modal\n */\n $scope.toggleOnlinePaymentModal = (beforeApply) => {\n setTimeout(() => {\n $scope.onlinePayment.showModal = !$scope.onlinePayment.showModal;\n if (typeof beforeApply === 'function') {\n beforeApply();\n }\n $scope.$apply();\n }, 50);\n };\n\n /**\n * Invoked atfer a successful card payment\n * @param invoice {*} the invoice\n */\n $scope.afterOnlinePaymentSuccess = (invoice) => {\n $scope.toggleOnlinePaymentModal();\n afterPayment(invoice);\n };\n\n /**\n * Invoked when something wrong occurred during the payment dialog initialization\n * @param message {string}\n */\n $scope.onOnlinePaymentError = (message) => {\n growl.error(message);\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n // set the controlled user as the current user if the current user is not an admin\n if ($scope.currentUser) {\n if ($scope.currentUser.role !== 'admin') {\n $scope.ctrl.member = $scope.currentUser;\n }\n }\n\n // initialize the \"reserve\" object with the event's data\n resetEventReserve();\n\n // get the current user's reservations into $scope.reservations\n if ($scope.currentUser) {\n getReservations($scope.event.id, 'Event', $scope.currentUser.id);\n }\n\n // watch when a coupon is applied to re-compute the total price\n $scope.$watch('coupon.applied', function (newValue, oldValue) {\n if ((newValue !== null) || (oldValue !== null)) {\n return $scope.computeEventAmount();\n }\n });\n };\n\n /**\n * Retrieve the reservations for the couple event / user\n * @param reservable_id {number} the current event id\n * @param reservable_type {string} 'Event'\n * @param user_id {number} the user's id (current or managed)\n */\n const getReservations = function (reservable_id, reservable_type, user_id) {\n Reservation.query({\n reservable_id,\n reservable_type,\n user_id\n }).$promise.then(function (reservations) { $scope.reservations = reservations; });\n };\n\n /**\n * Create a hash map implementing the Reservation specs\n * @param reserve {Object} Reservation parameters (places...)\n * @param event {Object} Current event\n * @return {{reservation: Reservation}}\n */\n const mkReservation = function (reserve, event) {\n const reservation = {\n reservable_id: event.id,\n reservable_type: 'Event',\n slots_reservations_attributes: [],\n nb_reserve_places: reserve.nbReservePlaces,\n tickets_attributes: []\n };\n\n reservation.slots_reservations_attributes.push({\n offered: event.offered || false,\n slot_id: event.availability.slot_id\n });\n\n for (let evt_px_cat of Array.from(event.prices)) {\n const booked = reserve.tickets[evt_px_cat.id];\n if (booked > 0) {\n reservation.tickets_attributes.push({\n event_price_category_id: evt_px_cat.id,\n booked\n });\n }\n }\n\n return { reservation };\n };\n\n /**\n * Format the parameters expected by /api/prices/compute or /api/reservations and return the resulting object\n * @param reservation {Object} as returned by mkReservation()\n * @param coupon {Object} Coupon as returned from the API\n * @param paymentMethod {string} 'card' | ''\n * @return {ShoppingCart}\n */\n const mkCartItems = function (reservation, coupon, paymentMethod = '') {\n return {\n customer_id: $scope.ctrl.member.id,\n items: [reservation],\n coupon_code: ((coupon ? coupon.code : undefined)),\n payment_method: paymentMethod,\n };\n };\n\n /**\n * Set the current reservation to the default values. This implies the reservation form to be hidden.\n */\n const resetEventReserve = function () {\n if ($scope.event) {\n $scope.reserve = {\n nbPlaces: {\n normal: __range__(0, $scope.event.nb_free_places, true)\n },\n nbReservePlaces: 0,\n tickets: {},\n toReserve: false,\n amountTotal: 0,\n totalSeats: 0\n };\n\n for (let evt_px_cat of Array.from($scope.event.prices)) {\n $scope.reserve.nbPlaces[evt_px_cat.id] = __range__(0, $scope.event.nb_free_places, true);\n $scope.reserve.tickets[evt_px_cat.id] = 0;\n }\n\n return $scope.event.offered = false;\n }\n };\n\n /**\n * Open a modal window which trigger the stripe payment process\n * @param reservation {Object} to book\n */\n const payOnline = function (reservation) {\n // check that the online payment is enabled\n if (settingsPromise.online_payment_module !== 'true') {\n growl.error(_t('app.shared.cart.online_payment_disabled'));\n } else {\n $scope.toggleOnlinePaymentModal(() => {\n $scope.onlinePayment.cartItems = mkCartItems(reservation, $scope.coupon.applied, 'card');\n });\n }\n };\n\n /**\n * Open a modal window which trigger the local payment process\n * @param reservation {Object} to book\n */\n const payOnSite = function (reservation) {\n $uibModal.open({\n templateUrl: '/shared/valid_reservation_modal.html',\n size: 'sm',\n resolve: {\n reservation () {\n return reservation;\n },\n price () {\n return Price.compute(mkCartItems(reservation, $scope.coupon.applied)).$promise;\n },\n wallet () {\n return Wallet.getWalletByUser({ user_id: $scope.ctrl.member.id }).$promise;\n },\n coupon () {\n return $scope.coupon.applied;\n },\n cartItems () {\n return mkCartItems(reservation, $scope.coupon.applied);\n },\n event () {\n return $scope.event;\n }\n },\n controller: ['$scope', '$uibModalInstance', '$state', 'reservation', 'price', 'Auth', 'LocalPayment', 'wallet', 'helpers', '$filter', 'coupon', 'cartItems', 'event',\n function ($scope, $uibModalInstance, $state, reservation, price, Auth, LocalPayment, wallet, helpers, $filter, coupon, cartItems, event) {\n // User's wallet amount\n $scope.wallet = wallet;\n\n // Price\n $scope.price = price.price;\n\n // Cart items\n $scope.cartItems = cartItems;\n\n // price to pay\n $scope.amount = helpers.getAmountToPay(price.price, wallet.amount);\n\n // Reservation\n $scope.reservation = reservation;\n\n // the event\n $scope.bookedEvent = event;\n\n // Used in wallet info template to interpolate some translations\n $scope.numberFilter = $filter('number');\n\n // Button label\n if ($scope.amount > 0) {\n $scope.validButtonName = _t('app.public.events_show.confirm_payment_of_html', { ROLE: $scope.currentUser.role, AMOUNT: $filter('currency')($scope.amount) });\n } else {\n if ((price.price > 0) && ($scope.walletAmount === 0)) {\n $scope.validButtonName = _t('app.public.events_show.confirm_payment_of_html', { ROLE: $scope.currentUser.role, AMOUNT: $filter('currency')(price.price) });\n } else {\n $scope.validButtonName = _t('app.shared.buttons.confirm');\n }\n }\n\n // Callback to validate the payment\n $scope.ok = function () {\n $scope.attempting = true;\n return LocalPayment.confirm(cartItems, function (reservation) {\n $uibModalInstance.close(reservation);\n return $scope.attempting = true;\n }\n , function (response) {\n $scope.alerts = [];\n angular.forEach(response, function (v, k) {\n angular.forEach(v, function (err) {\n $scope.alerts.push({\n msg: k + ': ' + err,\n type: 'danger'\n });\n });\n });\n return $scope.attempting = false;\n });\n };\n\n // Callback to cancel the payment\n return $scope.cancel = function () { $uibModalInstance.dismiss('cancel'); };\n }\n ] })\n .result['finally'](null).then(function (reservation) { afterPayment(reservation); });\n };\n\n /**\n * What to do after the payment was successful\n * @param invoice {Object} the invoice for the booked reservation\n */\n const afterPayment = function (invoice) {\n Reservation.get({ id: invoice.main_object.id }, function (reservation) {\n $scope.event.nb_free_places = $scope.event.nb_free_places - reservation.total_booked_seats;\n $scope.reservations.push(reservation);\n });\n resetEventReserve();\n $scope.reserveSuccess = true;\n $scope.coupon.applied = null;\n if ($scope.currentUser.role === 'admin') {\n return $scope.ctrl.member = null;\n }\n };\n\n /**\n * Find user's reservations, the same date at the same time, with event\n */\n const findReservationsAtSameTime = function () {\n let sameTimeReservations = [\n 'training_reservations',\n 'machine_reservations',\n 'space_reservations',\n 'events_reservations'\n ].map(function(k) {\n return _.filter($scope.ctrl.member[k], function(r) {\n if (r.reservable_type === 'Event' && r.reservable.id === $scope.event.id) {\n return false;\n }\n return moment($scope.event.start_time).isSame(r.start_at) ||\n (moment($scope.event.end_time).isAfter(r.start_at) && moment($scope.event.end_time).isBefore(r.end_at)) ||\n (moment($scope.event.start_time).isAfter(r.start_at) && moment($scope.event.start_time).isBefore(r.end_at)) ||\n (moment($scope.event.start_time).isBefore(r.start_at) && moment($scope.event.end_time).isAfter(r.end_at));\n });\n });\n return _.union.apply(null, sameTimeReservations);\n };\n\n /**\n * A modal for show reservations the same date at the same time\n *\n * @param sameTimeReservations {Array} reservations the same date at the same time\n * @param callback {function} callback will invoke when user confirm\n */\n const showReserveSlotSameTimeModal = function(sameTimeReservations, callback) {\n const modalInstance = $uibModal.open({\n animation: true,\n templateUrl: '/shared/_reserve_slot_same_time.html',\n size: 'md',\n controller: 'ReserveSlotSameTimeController',\n resolve: {\n sameTimeReservations: function() { return sameTimeReservations; },\n bookOverlappingSlotsPromise: ['Setting', function (Setting) { return Setting.get({ name: 'book_overlapping_slots' }).$promise; }]\n }\n });\n modalInstance.result.then(callback);\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n\nfunction __range__ (left, right, inclusive) {\n let range = [];\n let ascending = left < right;\n let end = !inclusive ? right : ascending ? right + 1 : right - 1;\n for (let i = left; ascending ? i < end : i > end; ascending ? i++ : i--) {\n range.push(i);\n }\n return range;\n}\n\n\n/**\n * Controller used in the event deletion modal window\n */\nApplication.Controllers.controller('DeleteRecurrentEventController', ['$scope', '$uibModalInstance', 'Event', 'eventPromise', 'growl', '_t',\n function ($scope, $uibModalInstance, Event, eventPromise, growl, _t) {\n\n // is the current event (to be deleted) recurrent?\n $scope.isRecurrent = eventPromise.recurrence_events.length > 0;\n\n // with recurrent slots: how many slots should we delete?\n $scope.deleteMode = 'single';\n\n /**\n * Confirmation callback\n */\n $scope.ok = function () {\n const { id, start_at, end_at } = eventPromise;\n // the admin has confirmed, delete the slot\n Event.delete(\n { id, mode: $scope.deleteMode },\n function (res) {\n // delete success\n if (res.deleted > 1) {\n growl.success(_t(\n 'app.public.events_show.events_deleted',\n {COUNT: res.deleted - 1}\n ));\n } else {\n growl.success(_t(\n 'app.public.events_show.event_successfully_deleted'\n ));\n }\n $uibModalInstance.close({\n status: 'success',\n events: res.details.map(function (d) { return d.event.id })\n });\n },\n function (res) {\n // not everything was deleted\n const { data } = res;\n if (data.total > 1) {\n growl.warning(_t(\n 'app.public.events_show.events_not_deleted',\n {TOTAL: data.total, COUNT: data.total - data.deleted}\n ));\n } else {\n growl.error(_t(\n 'app.public.events_show.unable_to_delete_the_event'\n ));\n }\n $uibModalInstance.close({\n status: 'failed',\n availabilities: data.details.filter(function (d) { return d.status }).map(function (d) { return d.event.id })\n });\n });\n }\n\n /**\n * Cancellation callback\n */\n $scope.cancel = function () {\n $uibModalInstance.dismiss('cancel');\n }\n }\n]);\n","/* eslint-disable\n handle-callback-err,\n no-return-assign,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\n/* COMMON CODE */\n\n/**\n * Provides a set of common callback methods to the $scope parameter. These methods are used\n * in the various machines' admin controllers.\n *\n * Provides :\n * - $scope.submited(content)\n * - $scope.cancel()\n * - $scope.fileinputClass(v)\n * - $scope.addFile()\n * - $scope.deleteFile(file)\n *\n * Requires :\n * - $scope.machine.machine_files_attributes = []\n * - $state (Ui-Router) [ 'app.public.machines_list' ]\n */\nclass MachinesController {\n constructor ($scope, $state) {\n /**\n * For use with ngUpload (https://github.com/twilson63/ngUpload).\n * Intended to be the callback when the upload is done: any raised error will be stacked in the\n * $scope.alerts array. If everything goes fine, the user is redirected to the machines list.\n * @param content {Object} JSON - The upload's result\n */\n $scope.submited = function (content) {\n if ((content.id == null)) {\n $scope.alerts = [];\n angular.forEach(content, function (v, k) {\n angular.forEach(v, function (err) {\n $scope.alerts.push({\n msg: k + ': ' + err,\n type: 'danger'\n });\n });\n });\n } else {\n return $state.go('app.public.machines_list');\n }\n };\n\n /**\n * Changes the current user's view, redirecting him to the machines list\n */\n $scope.cancel = function () { $state.go('app.public.machines_list'); };\n\n /**\n * For use with 'ng-class', returns the CSS class name for the uploads previews.\n * The preview may show a placeholder or the content of the file depending on the upload state.\n * @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules)\n */\n $scope.fileinputClass = function (v) {\n if (v) {\n return 'fileinput-exists';\n } else {\n return 'fileinput-new';\n }\n };\n\n /**\n * This will create a single new empty entry into the machine attachements list.\n */\n $scope.addFile = function () { $scope.machine.machine_files_attributes.push({}); };\n\n /**\n * This will remove the given file from the machine attachements list. If the file was previously uploaded\n * to the server, it will be marked for deletion on the server. Otherwise, it will be simply truncated from\n * the attachements array.\n * @param file {Object} the file to delete\n */\n $scope.deleteFile = function (file) {\n const index = $scope.machine.machine_files_attributes.indexOf(file);\n if (file.id != null) {\n return file._destroy = true;\n } else {\n return $scope.machine.machine_files_attributes.splice(index, 1);\n }\n };\n }\n}\n\n/**\n * Controller used in the public listing page, allowing everyone to see the list of machines\n */\nApplication.Controllers.controller('MachinesController', ['$scope', '$state', '_t', 'AuthService', 'Machine', '$uibModal', 'settingsPromise', 'Member', 'uiTourService', 'machinesPromise', 'growl', 'helpers',\n function ($scope, $state, _t, AuthService, Machine, $uibModal, settingsPromise, Member, uiTourService, machinesPromise, growl, helpers) {\n /* PUBLIC SCOPE */\n\n // the application global settings\n $scope.settings = settingsPromise;\n\n /**\n * Redirect the user to the machine details page\n */\n $scope.showMachine = function (machine) { $state.go('app.public.machines_show', { id: machine.slug }); };\n\n /**\n * Shows an error message forwarded from a child component\n */\n $scope.onError = function (message) {\n growl.error(message);\n }\n\n /**\n * Shows a success message forwarded from a child react components\n */\n $scope.onSuccess = function (message) {\n growl.success(message)\n }\n\n /**\n * Open the modal dialog to log the user and resolves the returned promise when the logging process\n * was successfully completed.\n */\n $scope.onLoginRequest = function (e) {\n return new Promise((resolve, _reject) => {\n $scope.login(e, resolve);\n });\n }\n\n /**\n * Redirect the user to the training reservation page\n */\n $scope.onEnrollRequest = function (trainingId) {\n $state.go('app.logged.trainings_reserve', { id: trainingId });\n }\n\n /**\n * Callback to book a reservation for the current machine\n */\n $scope.reserveMachine = function (machine) {\n $state.go('app.logged.machines_reserve', { id: machine.slug });\n }\n\n $scope.canProposePacks = function () {\n return AuthService.isAuthorized(['admin', 'manager']) || !helpers.isUserValidationRequired($scope.settings, 'pack') || (helpers.isUserValidationRequired($scope.settings, 'pack') && helpers.isUserValidated($scope.currentUser));\n };\n\n /**\n * Setup the feature-tour for the machines page. (admins only)\n * This is intended as a contextual help (when pressing F1)\n */\n $scope.setupMachinesTour = function () {\n // setup the tour for admins only\n if (AuthService.isAuthorized(['admin', 'manager'])) {\n // get the tour defined by the ui-tour directive\n const uitour = uiTourService.getTourByName('machines');\n if (AuthService.isAuthorized('admin')) {\n uitour.createStep({\n selector: 'body',\n stepId: 'welcome',\n order: 0,\n title: _t('app.public.tour.machines.welcome.title'),\n content: _t('app.public.tour.machines.welcome.content'),\n placement: 'bottom',\n orphan: true\n });\n if (machinesPromise.length > 0) {\n uitour.createStep({\n selector: '.machines-list .show-button',\n stepId: 'view',\n order: 1,\n title: _t('app.public.tour.machines.view.title'),\n content: _t('app.public.tour.machines.view.content'),\n placement: 'top'\n });\n }\n } else {\n uitour.createStep({\n selector: 'body',\n stepId: 'welcome_manager',\n order: 0,\n title: _t('app.public.tour.machines.welcome_manager.title'),\n content: _t('app.public.tour.machines.welcome_manager.content'),\n placement: 'bottom',\n orphan: true\n });\n }\n if (machinesPromise.length > 0) {\n uitour.createStep({\n selector: '.machines-list .reserve-button',\n stepId: 'reserve',\n order: 2,\n title: _t('app.public.tour.machines.reserve.title'),\n content: _t('app.public.tour.machines.reserve.content'),\n placement: 'top'\n });\n }\n uitour.createStep({\n selector: 'body',\n stepId: 'conclusion',\n order: 3,\n title: _t('app.public.tour.conclusion.title'),\n content: _t('app.public.tour.conclusion.content'),\n placement: 'bottom',\n orphan: true\n });\n // on tour end, save the status in database\n uitour.on('ended', function () {\n if (uitour.getStatus() === uitour.Status.ON && $scope.currentUser.profile_attributes.tours.indexOf('machines') < 0) {\n Member.completeTour({ id: $scope.currentUser.id }, { tour: 'machines' }, function (res) {\n $scope.currentUser.profile_attributes.tours = res.tours;\n });\n }\n });\n // if the user has never seen the tour, show him now\n if (settingsPromise.feature_tour_display !== 'manual' && $scope.currentUser.profile_attributes.tours.indexOf('machines') < 0) {\n uitour.start();\n }\n }\n }\n }\n]);\n\n/**\n * Controller used in the machine creation page (admin)\n */\nApplication.Controllers.controller('NewMachineController', ['$scope', '$state', 'CSRF', function ($scope, $state, CSRF) {\n CSRF.setMetaTags();\n\n // API URL where the form will be posted\n $scope.actionUrl = '/api/machines/';\n\n // Form action on the above URL\n $scope.method = 'post';\n\n // default machine parameters\n $scope.machine =\n { machine_files_attributes: [] };\n\n // Using the MachinesController\n return new MachinesController($scope, $state);\n}\n]);\n\n/**\n * Controller used in the machine edition page (admin)\n */\nApplication.Controllers.controller('EditMachineController', ['$scope', '$state', '$transition$', 'machinePromise', 'CSRF',\n function ($scope, $state, $transition$, machinePromise, CSRF) {\n /* PUBLIC SCOPE */\n\n // API URL where the form will be posted\n $scope.actionUrl = `/api/machines/${$transition$.params().id}`;\n\n // Form action on the above URL\n $scope.method = 'put';\n\n // Retrieve the details for the machine id in the URL, if an error occurs redirect the user to the machines list\n $scope.machine = cleanMachine(machinePromise);\n\n /**\n * Shows an error message forwarded from a child component\n */\n $scope.onError = function (message) {\n growl.error(message);\n }\n\n /**\n * Shows a success message forwarded from a child react components\n */\n $scope.onSuccess = function (message) {\n growl.success(message)\n }\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n CSRF.setMetaTags();\n\n // Using the MachinesController\n return new MachinesController($scope, $state);\n };\n\n // prepare the machine for the react-hook-form\n function cleanMachine (machine) {\n delete machine.$promise;\n delete machine.$resolved;\n return machine;\n }\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n\n/**\n * Controller used in the machine details page (public)\n */\nApplication.Controllers.controller('ShowMachineController', ['$scope', '$state', '$uibModal', '_t', 'Machine', 'growl', 'machinePromise', 'dialogs',\n function ($scope, $state, $uibModal, _t, Machine, growl, machinePromise, dialogs) {\n // Retrieve the details for the machine id in the URL, if an error occurs redirect the user to the machines list\n $scope.machine = machinePromise;\n\n /**\n * Callback to delete the current machine (admins only)\n */\n $scope.delete = function (machine) {\n // check the permissions\n if ($scope.currentUser.role !== 'admin') {\n console.error(_t('app.public.machines_show.unauthorized_operation'));\n } else {\n dialogs.confirm({\n resolve: {\n object () {\n return {\n title: _t('app.public.machines_show.confirmation_required'),\n msg: _t('app.public.machines_show.do_you_really_want_to_delete_this_machine')\n };\n }\n }\n }\n , function () { // deletion confirmed\n // delete the machine then redirect to the machines listing\n machine.$delete(\n function () { $state.go('app.public.machines_list'); },\n function (error) { growl.warning(_t('app.public.machines_show.the_machine_cant_be_deleted_because_it_is_already_reserved_by_some_users')); console.error(error); }\n );\n });\n }\n };\n\n /**\n * Shows an error message forwarded from a child component\n */\n $scope.onError = function (message) {\n growl.error(message);\n }\n\n /**\n * Shows a success message forwarded from a child react components\n */\n $scope.onSuccess = function (message) {\n growl.success(message)\n }\n\n\n /**\n * Open the modal dialog to log the user and resolves the returned promise when the logging process\n * was successfully completed.\n */\n $scope.onLoginRequest = function (e) {\n return new Promise((resolve, _reject) => {\n $scope.login(e, resolve);\n });\n }\n\n /**\n * Redirect the user to the training reservation page\n */\n $scope.onEnrollRequest = function (trainingId) {\n $state.go('app.logged.trainings_reserve', { id: trainingId });\n }\n\n /**\n * Callback to book a reservation for the current machine\n */\n $scope.reserveMachine = function (machine) {\n $state.go('app.logged.machines_reserve', { id: machine.slug });\n }\n }\n]);\n\n/**\n * Controller used in the machine reservation page (for logged users who have completed the training and admins).\n * This controller workflow is pretty similar to the trainings reservation controller.\n */\n\nApplication.Controllers.controller('ReserveMachineController', ['$scope', '$transition$', '_t', 'moment', 'Auth', '$timeout', 'Member', 'Availability', 'plansPromise', 'groupsPromise', 'machinePromise', 'settingsPromise', 'uiCalendarConfig', 'CalendarConfig', 'Reservation', 'growl', 'helpers', 'AuthService',\n function ($scope, $transition$, _t, moment, Auth, $timeout, Member, Availability, plansPromise, groupsPromise, machinePromise, settingsPromise, uiCalendarConfig, CalendarConfig, Reservation, growl, helpers, AuthService) {\n /* PRIVATE STATIC CONSTANTS */\n\n // Slot free to be booked\n const FREE_SLOT_BORDER_COLOR = '#e4cd78';\n\n // Slot already booked by another user\n const UNAVAILABLE_SLOT_BORDER_COLOR = '#1d98ec';\n\n // Slot already booked by the current user\n const BOOKED_SLOT_BORDER_COLOR = '#b2e774';\n\n /* PUBLIC SCOPE */\n\n // bind the machine availabilities with full-Calendar events\n $scope.eventSources = [];\n\n // indicates the state of the current view : calendar or plans information\n $scope.plansAreShown = false;\n\n // will store the user's plan if he chose to buy one\n $scope.selectedPlan = null;\n\n // the moment when the plan selection changed for the last time, used to trigger changes in the cart\n $scope.planSelectionTime = null;\n\n // mapping of fullCalendar events.\n $scope.events = {\n reserved: [], // Slots that the user wants to book\n modifiable: null, // Slot that the user wants to change\n placable: null, // Destination slot for the change\n paid: [], // Slots that were just booked by the user (transaction ok)\n moved: null // Slots that were just moved by the user (change done) -> {newSlot:* oldSlot: *}\n };\n\n // the moment when the slot selection changed for the last time, used to trigger changes in the cart\n $scope.selectionTime = null;\n\n // the last clicked event in the calendar\n $scope.selectedEvent = null;\n\n // the application global settings\n $scope.settings = settingsPromise;\n\n // all plans, used in \n $scope.plans = plansPromise;\n\n // all groups, used in \n $scope.groups = groupsPromise;\n\n // the user to deal with, ie. the current user for non-admins\n $scope.ctrl =\n { member: {} };\n\n // current machine to reserve\n $scope.machine = machinePromise;\n\n // will be set to a Promise and resolved after the payment is sone\n $scope.afterPaymentPromise = null;\n\n // fullCalendar (v2) configuration\n $scope.calendarConfig = CalendarConfig({\n minTime: moment.duration(moment(settingsPromise.booking_window_start).format('HH:mm:ss')),\n maxTime: moment.duration(moment(settingsPromise.booking_window_end).format('HH:mm:ss')),\n eventClick (event, jsEvent, view) {\n return calendarEventClickCb(event, jsEvent, view);\n },\n eventRender (event, element, view) {\n return eventRenderCb(event, element);\n }\n });\n\n // Global config: message to the end user concerning the subscriptions rules\n $scope.subscriptionExplicationsAlert = settingsPromise.subscription_explications_alert;\n\n // Global config: message to the end user concerning the machine bookings\n $scope.machineExplicationsAlert = settingsPromise.machine_explications_alert;\n\n // Global config: is the user validation required ?\n $scope.enableUserValidationRequired = settingsPromise.user_validation_required === 'true';\n\n /**\n * Change the last selected slot's appearance to looks like 'added to cart'\n */\n $scope.markSlotAsAdded = function () {\n $scope.selectedEvent.backgroundColor = FREE_SLOT_BORDER_COLOR;\n $scope.selectedEvent.oldTitle = $scope.selectedEvent.title;\n $scope.selectedEvent.title = _t('app.logged.machines_reserve.i_reserve');\n updateEvents($scope.selectedEvent);\n };\n\n /**\n * Change the last selected slot's appearance to looks like 'never added to cart'\n */\n $scope.markSlotAsRemoved = function (slot) {\n slot.backgroundColor = 'white';\n slot.borderColor = FREE_SLOT_BORDER_COLOR;\n slot.title = slot.oldTitle;\n updateEvents(slot);\n };\n\n /**\n * Callback when a slot was successfully cancelled. Reset the slot style as 'ready to book'\n */\n $scope.slotCancelled = function () { refreshCalendar() };\n\n /**\n * Change the last selected slot's appearance to looks like 'currently looking for a new destination to exchange'\n */\n $scope.markSlotAsModifying = function () {\n $scope.selectedEvent.backgroundColor = '#eee';\n $scope.selectedEvent.oldTitle = $scope.selectedEvent.title;\n $scope.selectedEvent.title = _t('app.logged.machines_reserve.i_change');\n updateEvents($scope.selectedEvent);\n };\n\n /**\n * Change the last selected slot's appearance to looks like 'the slot being exchanged will take this place'\n */\n $scope.changeModifyMachineSlot = function () {\n if ($scope.events.placable) {\n $scope.events.placable.backgroundColor = 'white';\n $scope.events.placable.title = '';\n updateEvents($scope.events.placable);\n }\n if (!$scope.events.placable || ($scope.events.placable._id !== $scope.selectedEvent._id)) {\n $scope.selectedEvent.backgroundColor = '#bbb';\n $scope.selectedEvent.title = _t('app.logged.machines_reserve.i_shift');\n updateEvents($scope.selectedEvent);\n }\n return true;\n };\n\n /**\n * When modifying an already booked reservation, callback when the modification was successfully done.\n */\n $scope.modifyMachineSlot = function () {\n refreshCalendar();\n };\n\n /**\n * Cancel the current booking modification, resetting the whole process\n */\n $scope.cancelModifyMachineSlot = function () {\n if ($scope.events.placable) {\n $scope.events.placable.backgroundColor = 'white';\n $scope.events.placable.title = '';\n }\n $scope.events.modifiable.title = $scope.events.modifiable.oldTitle;\n $scope.events.modifiable.backgroundColor = 'white';\n\n updateEvents($scope.events.placable, $scope.events.modifiable);\n };\n\n /**\n * Callback to deal with the reservations of the user selected in the dropdown list instead of the current user's\n * reservations. (admins only)\n */\n $scope.updateMember = function () {\n $scope.plansAreShown = false;\n $scope.selectedPlan = null;\n Member.get({ id: $scope.ctrl.member.id }, function (member) {\n $scope.ctrl.member = member;\n refreshCalendar();\n });\n };\n\n /**\n * Changes the user current view from the plan subscription screen to the machine reservation agenda\n * @param e {Object} see https://docs.angularjs.org/guide/expression#-event-\n */\n $scope.doNotSubscribePlan = function (e) {\n e.preventDefault();\n $scope.plansAreShown = false;\n $scope.selectPlan($scope.selectedPlan);\n return $scope.planSelectionTime = new Date();\n };\n\n /**\n * Switch the user's view from the reservation agenda to the plan subscription\n */\n $scope.showPlans = function () { $scope.plansAreShown = true; };\n\n /**\n * Add the provided plan to the current shopping cart\n * @param plan {Object} the plan to subscribe\n */\n $scope.selectPlan = function (plan) {\n setTimeout(() => {\n // toggle selected plan\n if ($scope.selectedPlan !== plan) {\n $scope.selectedPlan = plan;\n } else {\n $scope.selectedPlan = null;\n }\n $scope.planSelectionTime = new Date();\n $scope.$apply();\n }, 50);\n };\n\n $scope.canSelectPlan = function () {\n return helpers.isUserValidatedByType($scope.ctrl.member, $scope.settings, 'subscription');\n };\n\n /**\n * Check if the provided plan is currently selected\n * @param plan {Object} Resource plan\n */\n $scope.isSelected = function (plan) {\n return $scope.selectedPlan === plan;\n };\n\n /**\n * Once the reservation is booked (payment process successfully completed), change the event style\n * in fullCalendar, update the user's subscription and free-credits if needed\n * @param paymentDocument {Invoice|PaymentSchedule}\n */\n $scope.afterPayment = function (paymentDocument) {\n Reservation.get({ id: paymentDocument.main_object.id }, function (reservation) {\n if ($scope.selectedPlan) {\n $scope.ctrl.member.subscribed_plan = angular.copy($scope.selectedPlan);\n if ($scope.ctrl.member.id === Auth._currentUser.id) {\n Auth._currentUser.subscribed_plan = angular.copy($scope.selectedPlan);\n }\n $scope.plansAreShown = false;\n $scope.selectedPlan = null;\n }\n $scope.ctrl.member.training_credits = angular.copy(reservation.user.training_credits);\n $scope.ctrl.member.machine_credits = angular.copy(reservation.user.machine_credits);\n if ($scope.ctrl.member.id === Auth._currentUser.id) {\n Auth._currentUser.training_credits = angular.copy(reservation.user.training_credits);\n Auth._currentUser.machine_credits = angular.copy(reservation.user.machine_credits);\n }\n\n refreshCalendar();\n\n // trigger the refresh of react components\n setTimeout(() => {\n $scope.afterPaymentPromise = new Promise(resolve => {\n resolve();\n });\n $scope.$apply();\n }, 50);\n });\n };\n\n /**\n * To use as callback in Array.prototype.filter to get only enabled plans\n */\n $scope.filterDisabledPlans = function (plan) { return !plan.disabled; };\n\n /**\n * Callback triggered after a successful prepaid-pack purchase\n */\n $scope.onSuccess = function (message) {\n\n growl.success(message);\n };\n\n /**\n * Callback triggered by react components\n */\n $scope.onError = function (message) {\n growl.error(message);\n };\n\n $scope.isShowPacks = function () {\n return !helpers.isUserValidationRequired($scope.settings, 'pack') || (helpers.isUserValidationRequired($scope.settings, 'pack') && helpers.isUserValidated($scope.ctrl.member));\n };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n $scope.eventSources.push({\n url: `/api/availabilities/machines/${$transition$.params().id}`,\n textColor: 'black'\n });\n\n if ($scope.currentUser.role !== 'admin') {\n $scope.ctrl.member = $scope.currentUser;\n return Member.get({ id: $scope.currentUser.id }, function (member) { $scope.ctrl.member = member; });\n }\n };\n\n /**\n * Triggered when the user click on a reservation slot in the agenda.\n * Defines the behavior to adopt depending on the slot status (already booked, free, ready to be reserved ...),\n * the user's subscription (current or about to be took) and the time (the user cannot modify a booked reservation\n * if it's too late).\n */\n const calendarEventClickCb = function (event, jsEvent, view) {\n if (!AuthService.isAuthorized(['admin', 'manager']) && (helpers.isUserValidationRequired($scope.settings, 'machine') && !helpers.isUserValidated($scope.ctrl.member))) {\n return;\n }\n $scope.selectedEvent = event;\n $scope.selectionTime = new Date();\n };\n\n /**\n * Refetch all events from the API and re-populate the calendar with the resulting slots\n */\n const refreshCalendar = function () {\n const view = uiCalendarConfig.calendars.calendar.fullCalendar('getView');\n return Availability.machine({\n machineId: $scope.machine.id,\n member_id: $scope.ctrl.member.id,\n start: view.start,\n end: view.end,\n timezone: Fablab.timezone\n }, function (slots) {\n uiCalendarConfig.calendars.calendar.fullCalendar('removeEvents');\n return $scope.eventSources.splice(0, 1, {\n events: slots,\n textColor: 'black'\n }\n );\n });\n }\n\n /**\n * Triggered when fullCalendar tries to graphically render an event block.\n * Append the event tag into the block, just after the event title.\n * @see http://fullcalendar.io/docs/event_rendering/eventRender/\n */\n const eventRenderCb = function (event, element) {\n if (($scope.currentUser.role === 'admin') && (event.tags.length > 0)) {\n let html = '';\n for (let tag of Array.from(event.tags)) {\n html += `${tag.name}`;\n }\n element.find('.fc-time').append(html);\n }\n };\n\n /**\n * Update the calendar's display to render the new attributes of the events\n * @param events Object[] events to update in full-calendar\n */\n const updateEvents = function (...events) {\n const realEvents = events.filter(e => !_.isNil(e));\n uiCalendarConfig.calendars.calendar.fullCalendar('updateEvents', realEvents);\n };\n\n /**\n * Asynchronously fetch the events from the API and refresh the calendar's view with these new events\n */\n const refetchCalendar = function () {\n uiCalendarConfig.calendars.calendar.fullCalendar('refetchEvents');\n setTimeout(() => {\n uiCalendarConfig.calendars.calendar.fullCalendar('rerenderEvents');\n }, 200);\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n","/* eslint-disable\n handle-callback-err,\n no-return-assign,\n no-self-compare,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * DS207: Consider shorter variations of null checks\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n\n/* COMMON CODE */\n\n/**\n * Provides a set of common callback methods to the $scope parameter. These methods are used\n * in the various spaces' admin controllers.\n *\n * Provides :\n * - $scope.submited(content)\n * - $scope.cancel()\n * - $scope.fileinputClass(v)\n * - $scope.addFile()\n * - $scope.deleteFile(file)\n *\n * Requires :\n * - $scope.space.space_files_attributes = []\n * - $state (Ui-Router) [ 'app.public.spaces_list' ]\n*/\nclass SpacesController {\n constructor ($scope, $state) {\n /*\n * For use with ngUpload (https://github.com/twilson63/ngUpload).\n * Intended to be the callback when the upload is done: any raised error will be stacked in the\n * $scope.alerts array. If everything goes fine, the user is redirected to the spaces list.\n * @param content {Object} JSON - The upload's result\n */\n $scope.submited = function (content) {\n if ((content.id == null)) {\n $scope.alerts = [];\n angular.forEach(content, function (v, k) {\n angular.forEach(v, function (err) {\n $scope.alerts.push({\n msg: k + ': ' + err,\n type: 'danger'\n });\n });\n });\n } else {\n $state.go('app.public.spaces_list');\n }\n };\n\n /**\n * Changes the current user's view, redirecting him to the spaces list\n */\n $scope.cancel = function () { $state.go('app.public.spaces_list'); };\n\n /**\n * For use with 'ng-class', returns the CSS class name for the uploads previews.\n * The preview may show a placeholder or the content of the file depending on the upload state.\n * @param v {*} any attribute, will be tested for truthiness (see JS evaluation rules)\n */\n $scope.fileinputClass = function (v) {\n if (v) {\n return 'fileinput-exists';\n } else {\n return 'fileinput-new';\n }\n };\n\n /**\n * This will create a single new empty entry into the space attachments list.\n */\n $scope.addFile = function () { $scope.space.space_files_attributes.push({}); };\n\n /**\n * This will remove the given file from the space attachments list. If the file was previously uploaded\n * to the server, it will be marked for deletion on the server. Otherwise, it will be simply truncated from\n * the attachments array.\n * @param file {Object} the file to delete\n */\n $scope.deleteFile = function (file) {\n const index = $scope.space.space_files_attributes.indexOf(file);\n if (file.id != null) {\n return file._destroy = true;\n } else {\n return $scope.space.space_files_attributes.splice(index, 1);\n }\n };\n }\n}\n\n/**\n * Controller used in the public listing page, allowing everyone to see the list of spaces\n */\nApplication.Controllers.controller('SpacesController', ['$scope', '$state', 'spacesPromise', 'AuthService', '_t', 'Member', 'uiTourService', 'settingsPromise',\n function ($scope, $state, spacesPromise, AuthService, _t, Member, uiTourService, settingsPromise) {\n /* PUBLIC SCOPE */\n\n // Retrieve the list of spaces\n $scope.spaces = spacesPromise;\n\n /**\n * Redirect the user to the space details page\n */\n $scope.showSpace = function (space) { $state.go('app.public.space_show', { id: space.slug }); };\n\n /**\n * Callback to book a reservation for the current space\n */\n $scope.reserveSpace = function (space) { $state.go('app.logged.space_reserve', { id: space.slug }); };\n\n // Default: we show only enabled spaces\n $scope.spaceFiltering = 'enabled';\n\n // Available options for filtering spaces by status\n $scope.filterDisabled = [\n 'enabled',\n 'disabled',\n 'all'\n ];\n\n /**\n * Setup the feature-tour for the spaces page. (admins only)\n * This is intended as a contextual help (when pressing F1)\n */\n $scope.setupSpacesTour = function () {\n // setup the tour for admins only\n if (AuthService.isAuthorized(['admin', 'manager'])) {\n // get the tour defined by the ui-tour directive\n const uitour = uiTourService.getTourByName('spaces');\n if (AuthService.isAuthorized('admin')) {\n uitour.createStep({\n selector: 'body',\n stepId: 'welcome',\n order: 0,\n title: _t('app.public.tour.spaces.welcome.title'),\n content: _t('app.public.tour.spaces.welcome.content'),\n placement: 'bottom',\n orphan: true\n });\n if ($scope.spaces.length > 0) {\n uitour.createStep({\n selector: '.spaces-list .show-button',\n stepId: 'view',\n order: 1,\n title: _t('app.public.tour.spaces.view.title'),\n content: _t('app.public.tour.spaces.view.content'),\n placement: 'top'\n });\n }\n } else {\n uitour.createStep({\n selector: 'body',\n stepId: 'welcome_manager',\n order: 0,\n title: _t('app.public.tour.spaces.welcome_manager.title'),\n content: _t('app.public.tour.spaces.welcome_manager.content'),\n placement: 'bottom',\n orphan: true\n });\n }\n if ($scope.spaces.length > 0) {\n uitour.createStep({\n selector: '.spaces-list .reserve-button',\n stepId: 'reserve',\n order: 2,\n title: _t('app.public.tour.spaces.reserve.title'),\n content: _t('app.public.tour.spaces.reserve.content'),\n placement: 'top'\n });\n }\n uitour.createStep({\n selector: 'body',\n stepId: 'conclusion',\n order: 3,\n title: _t('app.public.tour.conclusion.title'),\n content: _t('app.public.tour.conclusion.content'),\n placement: 'bottom',\n orphan: true\n });\n // on tour end, save the status in database\n uitour.on('ended', function () {\n if (uitour.getStatus() === uitour.Status.ON && $scope.currentUser.profile_attributes.tours.indexOf('spaces') < 0) {\n Member.completeTour({ id: $scope.currentUser.id }, { tour: 'spaces' }, function (res) {\n $scope.currentUser.profile_attributes.tours = res.tours;\n });\n }\n });\n // if the user has never seen the tour, show him now\n if (settingsPromise.feature_tour_display !== 'manual' && $scope.currentUser.profile_attributes.tours.indexOf('spaces') < 0) {\n uitour.start();\n }\n }\n }\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {}\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n]);\n\n/**\n * Controller used in the space creation page (admin)\n */\nApplication.Controllers.controller('NewSpaceController', ['$scope', '$state', 'CSRF', function ($scope, $state, CSRF) {\n CSRF.setMetaTags();\n\n // API URL where the form will be posted\n $scope.actionUrl = '/api/spaces/';\n\n // Form action on the above URL\n $scope.method = 'post';\n\n // default space parameters\n $scope.space =\n { space_files_attributes: [] };\n\n // Using the SpacesController\n return new SpacesController($scope, $state);\n}]);\n\n/**\n * Controller used in the space edition page (admin)\n */\nApplication.Controllers.controller('EditSpaceController', ['$scope', '$state', '$transition$', 'spacePromise', 'CSRF',\n function ($scope, $state, $transition$, spacePromise, CSRF) {\n CSRF.setMetaTags();\n\n // API URL where the form will be posted\n $scope.actionUrl = `/api/spaces/${$transition$.params().id}`;\n\n // Form action on the above URL\n $scope.method = 'put';\n\n // space to modify\n $scope.space = spacePromise;\n\n // Using the SpacesController\n return new SpacesController($scope, $state);\n }]);\n\nApplication.Controllers.controller('ShowSpaceController', ['$scope', '$state', 'spacePromise', '_t', 'dialogs', 'growl',\n function ($scope, $state, spacePromise, _t, dialogs, growl) {\n // Details of the space witch id/slug is provided in the URL\n $scope.space = spacePromise;\n\n /**\n * Callback to book a reservation for the current space\n * @param event {Object} see https://docs.angularjs.org/guide/expression#-event-\n */\n $scope.reserveSpace = function (event) {\n event.preventDefault();\n return $state.go('app.logged.space_reserve', { id: $scope.space.slug });\n };\n\n /**\n * Callback to book a reservation for the current space\n * @param event {Object} see https://docs.angularjs.org/guide/expression#-event-\n */\n $scope.deleteSpace = function (event) {\n event.preventDefault();\n // check the permissions\n if ($scope.currentUser.role !== 'admin') {\n return console.error(_t('app.public.space_show.unauthorized_operation'));\n } else {\n return dialogs.confirm({\n resolve: {\n object () {\n return {\n title: _t('app.public.space_show.confirmation_required'),\n msg: _t('app.public.space_show.do_you_really_want_to_delete_this_space')\n };\n }\n }\n }\n , function () { // deletion confirmed\n // delete the machine then redirect to the machines listing\n $scope.space.$delete(\n function () {\n $state.go('app.public.spaces_list');\n },\n function (error) {\n growl.warning(_t('app.public.space_show.the_space_cant_be_deleted_because_it_is_already_reserved_by_some_users'));\n console.error(error);\n }\n );\n });\n }\n };\n }]);\n\n/**\n * Controller used in the spaces reservation agenda page.\n * This controller is very similar to the machine reservation controller with one major difference: here, there is many places\n * per slots.\n */\n\nApplication.Controllers.controller('ReserveSpaceController', ['$scope', '$transition$', 'Auth', '$timeout', 'Availability', 'Member', 'plansPromise', 'groupsPromise', 'settingsPromise', 'spacePromise', '_t', 'uiCalendarConfig', 'CalendarConfig', 'Reservation', 'helpers', 'AuthService',\n function ($scope, $transition$, Auth, $timeout, Availability, Member, plansPromise, groupsPromise, settingsPromise, spacePromise, _t, uiCalendarConfig, CalendarConfig, Reservation, helpers, AuthService) {\n /* PRIVATE STATIC CONSTANTS */\n\n // Color of the selected event backgound\n const SELECTED_EVENT_BG_COLOR = '#ffdd00';\n\n // Slot free to be booked\n const FREE_SLOT_BORDER_COLOR = '#3fc7ff';\n\n // Slot with reservation from current user\n const RESERVED_SLOT_BORDER_COLOR = '#b2e774';\n\n /* PUBLIC SCOPE */\n\n // bind the spaces availabilities with full-Calendar events\n $scope.eventSources = [];\n\n // the user to deal with, ie. the current user for non-admins\n $scope.ctrl =\n { member: {} };\n\n // all plans, used in \n $scope.plans = plansPromise;\n\n // all groups, used in \n $scope.groups = groupsPromise;\n\n // mapping of fullCalendar events.\n $scope.events = {\n reserved: [], // Slots that the user wants to book\n modifiable: null, // Slot that the user wants to change\n placable: null, // Destination slot for the change\n paid: [], // Slots that were just booked by the user (transaction ok)\n moved: null // Slots that were just moved by the user (change done) -> {newSlot:* oldSlot: *}\n };\n\n // the moment when the slot selection changed for the last time, used to trigger changes in the cart\n $scope.selectionTime = null;\n\n // the last clicked event in the calendar\n $scope.selectedEvent = null;\n\n // indicates the state of the current view : calendar or plans information\n $scope.plansAreShown = false;\n\n // will store the user's plan if he chose to buy one\n $scope.selectedPlan = null;\n\n // the moment when the plan selection changed for the last time, used to trigger changes in the cart\n $scope.planSelectionTime = null;\n\n // Selected space\n $scope.space = spacePromise;\n\n // fullCalendar (v2) configuration\n $scope.calendarConfig = CalendarConfig({\n minTime: moment.duration(moment(settingsPromise.booking_window_start).format('HH:mm:ss')),\n maxTime: moment.duration(moment(settingsPromise.booking_window_end).format('HH:mm:ss')),\n eventClick (event, jsEvent, view) {\n return calendarEventClickCb(event, jsEvent, view);\n },\n eventRender (event, element, view) {\n return eventRenderCb(event, element, view);\n }\n });\n\n // Application global settings\n $scope.settings = settingsPromise;\n\n // Global config: message to the end user concerning the subscriptions rules\n $scope.subscriptionExplicationsAlert = settingsPromise.subscription_explications_alert;\n\n // Global config: message to the end user concerning the space reservation\n $scope.spaceExplicationsAlert = settingsPromise.space_explications_alert;\n\n // Global config: is the user validation required ?\n $scope.enableUserValidationRequired = settingsPromise.user_validation_required === 'true';\n\n /**\n * Change the last selected slot's appearance to looks like 'added to cart'\n */\n $scope.markSlotAsAdded = function () {\n $scope.selectedEvent.backgroundColor = SELECTED_EVENT_BG_COLOR;\n $scope.selectedEvent.oldTitle = $scope.selectedEvent.title;\n updateEvents($scope.selectedEvent);\n };\n\n /**\n * Change the last selected slot's appearance to looks like 'never added to cart'\n */\n $scope.markSlotAsRemoved = function (slot) {\n slot.backgroundColor = 'white';\n slot.title = slot.oldTitle;\n slot.borderColor = FREE_SLOT_BORDER_COLOR;\n updateEvents(slot);\n };\n\n /**\n * Callback when a slot was successfully cancelled. Reset the slot style as 'ready to book'\n */\n $scope.slotCancelled = function () { refreshCalendar(); };\n\n /**\n * Change the last selected slot's appearance to looks like 'currently looking for a new destination to exchange'\n */\n $scope.markSlotAsModifying = function () {\n $scope.selectedEvent.backgroundColor = '#eee';\n $scope.selectedEvent.oldTitle = $scope.selectedEvent.title;\n $scope.selectedEvent.title = _t('app.logged.space_reserve.i_change');\n updateEvents($scope.selectedEvent);\n };\n\n /**\n * Change the last selected slot's appearance to looks like 'the slot being exchanged will take this place'\n */\n $scope.changeModifySpaceSlot = function () {\n if ($scope.events.placable) {\n $scope.events.placable.backgroundColor = 'white';\n $scope.events.placable.title = '';\n updateEvents($scope.events.placable);\n }\n if (!$scope.events.placable || ($scope.events.placable._id !== $scope.selectedEvent._id)) {\n $scope.selectedEvent.backgroundColor = '#bbb';\n $scope.selectedEvent.title = _t('app.logged.space_reserve.i_shift');\n updateEvents($scope.selectedEvent);\n }\n return true;\n };\n\n /**\n * When modifying an already booked reservation, callback when the modification was successfully done.\n */\n $scope.modifySpaceSlot = function () {\n refreshCalendar();\n };\n\n /**\n * Cancel the current booking modification, reseting the whole process\n */\n $scope.cancelModifySpaceSlot = function () {\n if ($scope.events.placable) {\n $scope.events.placable.backgroundColor = 'white';\n $scope.events.placable.title = '';\n }\n $scope.events.modifiable.title = _t('app.logged.space_reserve.i_ve_reserved');\n $scope.events.modifiable.backgroundColor = 'white';\n\n updateEvents($scope.events.placable, $scope.events.modifiable);\n };\n\n /**\n * Callback to deal with the reservations of the user selected in the dropdown list instead of the current user's\n * reservations. (admins only)\n */\n $scope.updateMember = function () {\n if ($scope.ctrl.member) {\n Member.get({ id: $scope.ctrl.member.id }, function (member) {\n $scope.ctrl.member = member;\n refreshCalendar();\n });\n }\n // as the events are re-fetched for the new user, we must re-init the cart\n $scope.events.reserved = [];\n $scope.selectedPlan = null;\n return $scope.plansAreShown = false;\n };\n\n /**\n * Add the provided plan to the current shopping cart\n * @param plan {Object} the plan to subscribe\n */\n $scope.selectPlan = function (plan) {\n setTimeout(() => {\n // toggle selected plan\n if ($scope.selectedPlan !== plan) {\n $scope.selectedPlan = plan;\n } else {\n $scope.selectedPlan = null;\n }\n $scope.planSelectionTime = new Date();\n $scope.$apply();\n }, 50);\n };\n\n $scope.canSelectPlan = function () {\n return helpers.isUserValidatedByType($scope.ctrl.member, $scope.settings, 'subscription');\n };\n\n /**\n * Check if the provided plan is currently selected\n * @param plan {Object} Resource plan\n */\n $scope.isSelected = function (plan) {\n return $scope.selectedPlan === plan;\n };\n\n /**\n * Changes the user current view from the plan subscription screen to the machine reservation agenda\n * @param e {Object} see https://docs.angularjs.org/guide/expression#-event-\n */\n $scope.doNotSubscribePlan = function (e) {\n e.preventDefault();\n $scope.plansAreShown = false;\n $scope.selectedPlan = null;\n return $scope.planSelectionTime = new Date();\n };\n\n /**\n * Switch the user's view from the reservation agenda to the plan subscription\n */\n $scope.showPlans = function () { $scope.plansAreShown = true; };\n\n /**\n * Once the reservation is booked (payment process successfully completed), change the event style\n * in fullCalendar, update the user's subscription and free-credits if needed\n * @param paymentDocument {Invoice|PaymentSchedule}\n */\n $scope.afterPayment = function (paymentDocument) {\n Reservation.get({ id: paymentDocument.main_object.id }, function (reservation) {\n if ($scope.selectedPlan) {\n $scope.ctrl.member.subscribed_plan = angular.copy($scope.selectedPlan);\n if ($scope.ctrl.member.id === Auth._currentUser.id) {\n Auth._currentUser.subscribed_plan = angular.copy($scope.selectedPlan);\n }\n $scope.plansAreShown = false;\n $scope.selectedPlan = null;\n }\n $scope.ctrl.member.training_credits = angular.copy(reservation.user.training_credits);\n $scope.ctrl.member.machine_credits = angular.copy(reservation.user.machine_credits);\n if ($scope.ctrl.member.id === Auth._currentUser.id) {\n Auth._currentUser.training_credits = angular.copy(reservation.user.training_credits);\n Auth._currentUser.machine_credits = angular.copy(reservation.user.machine_credits);\n }\n\n refreshCalendar();\n });\n };\n\n /**\n * To use as callback in Array.prototype.filter to get only enabled plans\n */\n $scope.filterDisabledPlans = function (plan) { return !plan.disabled; };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n if ($scope.currentUser.role !== 'admin') {\n $scope.ctrl.member = $scope.currentUser;\n Member.get({ id: $scope.currentUser.id }, function (member) { $scope.ctrl.member = member; });\n }\n // we load the availabilities from a callback function of the $scope.eventSources, instead of resolving a promise\n // in the router because this allows to refetchEvents from fullCalendar API.\n $scope.eventSources.push({\n url: `/api/availabilities/spaces/${$transition$.params().id}`,\n textColor: 'black'\n });\n };\n\n /**\n * Triggered when the user clicks on a reservation slot in the agenda.\n * Defines the behavior to adopt depending on the slot status (already booked, free, ready to be reserved ...),\n * the user's subscription (current or about to be took), and the time (the user cannot modify a booked reservation\n * if it's too late).\n * @see http://fullcalendar.io/docs/mouse/eventClick/\n */\n const calendarEventClickCb = function (event, jsEvent, view) {\n if (!AuthService.isAuthorized(['admin', 'manager']) && (helpers.isUserValidationRequired($scope.settings, 'space') && !helpers.isUserValidated($scope.ctrl.member))) {\n return;\n }\n $scope.selectedEvent = event;\n $scope.selectionTime = new Date();\n };\n\n /**\n * Refetch all events from the API and re-populate the calendar with the resulting slots\n */\n const refreshCalendar = function () {\n const view = uiCalendarConfig.calendars.calendar.fullCalendar('getView');\n return Availability.spaces({\n spaceId: $scope.space.id,\n member_id: $scope.ctrl.member.id,\n start: view.start,\n end: view.end,\n timezone: Fablab.timezone\n }, function (spaces) {\n uiCalendarConfig.calendars.calendar.fullCalendar('removeEvents');\n return $scope.eventSources.splice(0, 1, {\n events: spaces,\n textColor: 'black'\n }\n );\n });\n };\n\n /**\n * Triggered when fullCalendar tries to graphically render an event block.\n * Append the event tag into the block, just after the event title.\n * @see http://fullcalendar.io/docs/event_rendering/eventRender/\n */\n const eventRenderCb = function (event, element, view) {\n if (($scope.currentUser.role === 'admin') && (event.tags.length > 0)) {\n let html = '';\n for (let tag of Array.from(event.tags)) {\n html += `${tag.name}`;\n }\n element.find('.fc-time').append(html);\n }\n };\n\n /**\n * Update the calendar's display to render the new attributes of the events\n * @param events Object[] events to update in full-calendar\n */\n const updateEvents = function (...events) {\n const realEvents = events.filter(e => !_.isNil(e));\n uiCalendarConfig.calendars.calendar.fullCalendar('updateEvents', realEvents);\n };\n\n\n /**\n * Asynchronously fetch the events from the API and refresh the calendar's view with these new events\n */\n const refetchCalendar = function () {\n uiCalendarConfig.calendars.calendar.fullCalendar('refetchEvents');\n setTimeout(() => {\n uiCalendarConfig.calendars.calendar.fullCalendar('rerenderEvents');\n }, 200);\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n\n]);\n","/* eslint-disable\n handle-callback-err,\n no-return-assign,\n no-self-compare,\n no-undef,\n*/\n// TODO: This file was created by bulk-decaffeinate.\n// Fix any style issues and re-enable lint.\n/*\n * decaffeinate suggestions:\n * DS101: Remove unnecessary use of Array.from\n * DS102: Remove unnecessary code created because of implicit returns\n * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md\n */\n'use strict';\n\n/**\n * Public listing of the trainings\n */\nApplication.Controllers.controller('TrainingsController', ['$scope', '$state', 'trainingsPromise',\n function ($scope, $state, trainingsPromise) {\n // List of trainings\n $scope.trainings = trainingsPromise;\n\n /**\n * Callback for the 'reserve' button\n */\n $scope.reserveTraining = function (training, event) { $state.go('app.logged.trainings_reserve', { id: training.slug }); };\n\n /**\n * Callback for the 'show' button\n */\n $scope.showTraining = function (training) { $state.go('app.public.training_show', { id: training.slug }); };\n }]);\n\n/**\n * Public view of a specific training\n */\nApplication.Controllers.controller('ShowTrainingController', ['$scope', '$state', 'trainingPromise', 'growl', '_t', 'dialogs',\n function ($scope, $state, trainingPromise, growl, _t, dialogs) {\n // Current training\n $scope.training = trainingPromise;\n\n /**\n * Callback to delete the current training (admins only)\n */\n $scope.delete = function (training) {\n // check the permissions\n if ($scope.currentUser.role !== 'admin') {\n growl.error(_t('app.public.training_show.unauthorized_operation'));\n } else {\n dialogs.confirm(\n {\n resolve: {\n object () {\n return {\n title: _t('app.public.training_show.confirmation_required'),\n msg: _t('app.public.training_show.do_you_really_want_to_delete_this_training')\n };\n }\n }\n },\n function () { // deletion confirmed\n // delete the training then redirect to the trainings listing\n training.$delete(\n function () { $state.go('app.public.trainings_list'); },\n function (error) {\n growl.warning(_t('app.public.training_show.the_training_cant_be_deleted_because_it_is_already_reserved_by_some_users'));\n console.error(error);\n }\n );\n }\n );\n }\n };\n\n /**\n * Callback for the 'reserve' button\n */\n $scope.reserveTraining = function (training, event) { $state.go('app.logged.trainings_reserve', { id: training.id }); };\n\n /**\n * Revert view to the full list of trainings (\"<-\" button)\n */\n $scope.cancel = function (event) { $state.go('app.public.trainings_list'); };\n }]);\n\n/**\n * Controller used in the training reservation agenda page.\n * This controller is very similar to the machine reservation controller with one major difference: here, ONLY ONE\n * training can be reserved during the reservation process (the shopping cart may contains only one training and a subscription).\n */\n\nApplication.Controllers.controller('ReserveTrainingController', ['$scope', '$transition$', 'Auth', 'AuthService', '$timeout', 'Availability', 'Member', 'plansPromise', 'groupsPromise', 'settingsPromise', 'trainingPromise', '_t', 'uiCalendarConfig', 'CalendarConfig', 'Reservation', 'helpers',\n function ($scope, $transition$, Auth, AuthService, $timeout, Availability, Member, plansPromise, groupsPromise, settingsPromise, trainingPromise, _t, uiCalendarConfig, CalendarConfig, Reservation, helpers) {\n /* PRIVATE STATIC CONSTANTS */\n\n // Color of the selected event backgound\n const SELECTED_EVENT_BG_COLOR = '#ffdd00';\n\n // Slot free to be booked\n const FREE_SLOT_BORDER_COLOR = '#bd7ae9';\n\n /* PUBLIC SCOPE */\n\n // bind the trainings availabilities with full-Calendar events\n $scope.eventSources = [];\n\n // the user to deal with, ie. the current user for non-admins\n $scope.ctrl =\n { member: {} };\n\n // all plans, used in \n $scope.plans = plansPromise;\n\n // all groups, used in \n $scope.groups = groupsPromise;\n\n // mapping of fullCalendar events.\n $scope.events = {\n reserved: [], // Slots that the user wants to book\n modifiable: null, // Slot that the user wants to change\n placable: null, // Destination slot for the change\n paid: [], // Slots that were just booked by the user (transaction ok)\n moved: null // Slots that were just moved by the user (change done) -> {newSlot:* oldSlot: *}\n };\n\n // the moment when the slot selection changed for the last time, used to trigger changes in the cart\n $scope.selectionTime = null;\n\n // the last clicked event in the calender\n $scope.selectedEvent = null;\n\n // indicates the state of the current view : calendar or plans information\n $scope.plansAreShown = false;\n\n // will store the user's plan if he choosed to buy one\n $scope.selectedPlan = null;\n\n // the moment when the plan selection changed for the last time, used to trigger changes in the cart\n $scope.planSelectionTime = null;\n\n // Selected training\n $scope.training = trainingPromise;\n\n // 'all' OR training's slug\n $scope.mode = $transition$.params().id;\n\n // fullCalendar (v2) configuration\n $scope.calendarConfig = CalendarConfig({\n minTime: moment.duration(moment(settingsPromise.booking_window_start).format('HH:mm:ss')),\n maxTime: moment.duration(moment(settingsPromise.booking_window_end).format('HH:mm:ss')),\n eventClick (event, jsEvent, view) {\n return calendarEventClickCb(event, jsEvent, view);\n },\n eventRender (event, element, view) {\n return eventRenderCb(event, element, view);\n }\n });\n\n // Application global settings\n $scope.settings = settingsPromise;\n\n // Global config: message to the end user concerning the subscriptions rules\n $scope.subscriptionExplicationsAlert = settingsPromise.subscription_explications_alert;\n\n // Global config: message to the end user concerning the training reservation\n $scope.trainingExplicationsAlert = settingsPromise.training_explications_alert;\n\n // Global config: message to the end user giving advice about the training reservation\n $scope.trainingInformationMessage = settingsPromise.training_information_message;\n\n // Global config: is the user validation required ?\n $scope.enableUserValidationRequired = settingsPromise.user_validation_required === 'true';\n\n /**\n * Change the last selected slot's appearance to looks like 'added to cart'\n */\n $scope.markSlotAsAdded = function () {\n $scope.selectedEvent.backgroundColor = SELECTED_EVENT_BG_COLOR;\n updateEvents($scope.selectedEvent);\n };\n\n /**\n * Change the last selected slot's appearance to looks like 'never added to cart'\n */\n $scope.markSlotAsRemoved = function (slot) {\n slot.backgroundColor = 'white';\n slot.title = slot.training.name;\n slot.borderColor = FREE_SLOT_BORDER_COLOR;\n updateEvents(slot);\n };\n\n /**\n * Callback when a slot was successfully cancelled. Reset the slot style as 'ready to book'\n */\n $scope.slotCancelled = function () { refreshCalendar() };\n\n /**\n * Change the last selected slot's appearence to looks like 'currently looking for a new destination to exchange'\n */\n $scope.markSlotAsModifying = function () {\n $scope.selectedEvent.backgroundColor = '#eee';\n $scope.selectedEvent.title = $scope.selectedEvent.training.name + ' - ' + _t('app.logged.trainings_reserve.i_change');\n updateEvents($scope.selectedEvent);\n };\n\n /**\n * Change the last selected slot's appearence to looks like 'the slot being exchanged will take this place'\n */\n $scope.changeModifyTrainingSlot = function () {\n if ($scope.selectedEvent.training.id !== $scope.events.modifiable.training.id) return false;\n\n if ($scope.events.placable) {\n $scope.events.placable.backgroundColor = 'white';\n $scope.events.placable.title = $scope.events.placable.training.name;\n updateEvents($scope.events.placable);\n }\n if (!$scope.events.placable || ($scope.events.placable._id !== $scope.selectedEvent._id)) {\n $scope.selectedEvent.backgroundColor = '#bbb';\n $scope.selectedEvent.title = $scope.selectedEvent.training.name + ' - ' + _t('app.logged.trainings_reserve.i_shift');\n updateEvents($scope.selectedEvent);\n }\n return true;\n };\n\n /**\n * When modifying an already booked reservation, callback when the modification was successfully done.\n */\n $scope.modifyTrainingSlot = function () {\n refreshCalendar();\n };\n\n /**\n * Cancel the current booking modification, reseting the whole process\n */\n $scope.cancelModifyTrainingSlot = function () {\n if ($scope.events.placable) {\n $scope.events.placable.backgroundColor = 'white';\n $scope.events.placable.title = $scope.events.placable.training.name;\n }\n $scope.events.modifiable.title = $scope.currentUser.role !== 'admin' ? $scope.events.modifiable.training.name + ' - ' + _t('app.logged.trainings_reserve.i_ve_reserved') : $scope.events.modifiable.training.name;\n $scope.events.modifiable.backgroundColor = 'white';\n\n updateEvents($scope.events.placable, $scope.events.modifiable);\n };\n\n /**\n * Callback to deal with the reservations of the user selected in the dropdown list instead of the current user's\n * reservations. (admins only)\n */\n $scope.updateMember = function () {\n if ($scope.ctrl.member) {\n Member.get({ id: $scope.ctrl.member.id }, function (member) {\n $scope.ctrl.member = member;\n refreshCalendar();\n });\n }\n // as the events are re-fetched for the new user, we must re-init the cart\n $scope.events.reserved = [];\n $scope.selectedPlan = null;\n $scope.plansAreShown = false;\n };\n\n /**\n * Add the provided plan to the current shopping cart\n * @param plan {Object} the plan to subscribe\n */\n $scope.selectPlan = function (plan) {\n setTimeout(() => {\n // toggle selected plan\n if ($scope.selectedPlan !== plan) {\n $scope.selectedPlan = plan;\n } else {\n $scope.selectedPlan = null;\n }\n $scope.planSelectionTime = new Date();\n $scope.$apply();\n }, 50);\n };\n\n $scope.canSelectPlan = function () {\n return helpers.isUserValidatedByType($scope.ctrl.member, $scope.settings, 'subscription');\n };\n\n /**\n * Check if the provided plan is currently selected\n * @param plan {Object} Resource plan\n */\n $scope.isSelected = function (plan) {\n return $scope.selectedPlan === plan;\n };\n\n /**\n * Changes the user current view from the plan subsription screen to the machine reservation agenda\n * @param e {Object} see https://docs.angularjs.org/guide/expression#-event-\n */\n $scope.doNotSubscribePlan = function (e) {\n e.preventDefault();\n $scope.plansAreShown = false;\n $scope.selectedPlan = null;\n return $scope.planSelectionTime = new Date();\n };\n\n /**\n * Switch the user's view from the reservation agenda to the plan subscription\n */\n $scope.showPlans = function () { $scope.plansAreShown = true; };\n\n /**\n * Once the reservation is booked (payment process successfully completed), change the event style\n * in fullCalendar, update the user's subscription and free-credits if needed\n * @param paymentDocument {Invoice|PaymentSchedule}\n */\n $scope.afterPayment = function (paymentDocument) {\n Reservation.get({ id: paymentDocument.main_object.id }, function (reservation) {\n if ($scope.selectedPlan) {\n $scope.ctrl.member.subscribed_plan = angular.copy($scope.selectedPlan);\n if ($scope.ctrl.member.id === Auth._currentUser.id) {\n Auth._currentUser.subscribed_plan = angular.copy($scope.selectedPlan);\n }\n $scope.plansAreShown = false;\n $scope.selectedPlan = null;\n }\n $scope.ctrl.member.training_credits = angular.copy(reservation.user.training_credits);\n $scope.ctrl.member.machine_credits = angular.copy(reservation.user.machine_credits);\n if ($scope.ctrl.member.id === Auth._currentUser.id) {\n Auth._currentUser.training_credits = angular.copy(reservation.user.training_credits);\n Auth._currentUser.machine_credits = angular.copy(reservation.user.machine_credits);\n }\n\n refreshCalendar();\n });\n };\n\n /**\n * To use as callback in Array.prototype.filter to get only enabled plans\n */\n $scope.filterDisabledPlans = function (plan) { return !plan.disabled; };\n\n /* PRIVATE SCOPE */\n\n /**\n * Kind of constructor: these actions will be realized first when the controller is loaded\n */\n const initialize = function () {\n if ($scope.currentUser.role !== 'admin') {\n $scope.ctrl.member = $scope.currentUser;\n Member.get({ id: $scope.currentUser.id }, function (member) { $scope.ctrl.member = member; });\n }\n // we load the availabilities from a callback function of the $scope.eventSources, instead of resolving a promise\n // in the router because this allows to refetchEvents from fullCalendar API.\n $scope.eventSources.push({\n url: `/api/availabilities/trainings/${$transition$.params().id}`,\n textColor: 'black'\n });\n };\n\n /**\n * Triggered when the user clicks on a reservation slot in the agenda.\n * Defines the behavior to adopt depending on the slot status (already booked, free, ready to be reserved ...),\n * the user's subscription (current or about to be took) and the time (the user cannot modify a booked reservation\n * if it's too late).\n * @see http://fullcalendar.io/docs/mouse/eventClick/\n */\n const calendarEventClickCb = function (event, jsEvent, view) {\n if (!AuthService.isAuthorized(['admin', 'manager']) && (helpers.isUserValidationRequired($scope.settings, 'training') && !helpers.isUserValidated($scope.ctrl.member))) {\n return;\n }\n $scope.selectedEvent = event;\n if ($transition$.params().id === 'all') {\n $scope.training = event.training;\n }\n return $scope.selectionTime = new Date();\n };\n\n /**\n * Refetch all events from the API and re-populate the calendar with the resulting slots\n */\n const refreshCalendar = function () {\n const view = uiCalendarConfig.calendars.calendar.fullCalendar('getView');\n const id = $transition$.params().id === 'all' ? $transition$.params().id : $scope.training.id;\n Availability.trainings({\n trainingId: id,\n member_id: $scope.ctrl.member.id,\n start: view.start,\n end: view.end,\n timezone: Fablab.timezone\n }, function (trainings) {\n uiCalendarConfig.calendars.calendar.fullCalendar('removeEvents');\n $scope.eventSources.splice(0, 1, {\n events: trainings,\n textColor: 'black'\n });\n });\n }\n\n /**\n * Triggered when fullCalendar tries to graphicaly render an event block.\n * Append the event tag into the block, just after the event title.\n * @see http://fullcalendar.io/docs/event_rendering/eventRender/\n */\n const eventRenderCb = function (event, element, view) {\n if (($scope.currentUser.role === 'admin') && (event.tags.length > 0)) {\n let html = '';\n for (let tag of Array.from(event.tags)) {\n html += `${tag.name}`;\n }\n element.find('.fc-time').append(html);\n }\n };\n\n /**\n * After payment, update the id of the newly reserved slot with the id returned by the server.\n * This will allow the user to modify the reservation he just booked.\n * @param slot {Object}\n * @param reservation {Object}\n */\n const updateTrainingSlotId = function (slot, reservation) {\n angular.forEach(reservation.slots, function (s) {\n if (slot.start.isSame(s.start_at)) {\n return slot.slot_id = s.id;\n }\n });\n };\n\n /**\n * Update the calendar's display to render the new attributes of the events\n * @param events Object[] events to update in full-calendar\n */\n const updateEvents = function (...events) {\n const realEvents = events.filter(e => !_.isNil(e));\n uiCalendarConfig.calendars.calendar.fullCalendar('updateEvents', realEvents);\n };\n\n\n /**\n * Asynchronously fetch the events from the API and refresh the calendar's view with these new events\n */\n const refetchCalendar = function () {\n uiCalendarConfig.calendars.calendar.fullCalendar('refetchEvents');\n setTimeout(() => {\n uiCalendarConfig.calendars.calendar.fullCalendar('rerenderEvents');\n }, 200);\n };\n\n // !!! MUST BE CALLED AT THE END of the controller\n return initialize();\n }\n\n]);\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// Module\nvar code = \"

    {{ 'app.admin.open_api_clients.open_api_clients' }}

    {{ 'app.admin.open_api_clients.name' | translate }} {{ 'app.admin.open_api_clients.calls_count' | translate }} {{ 'app.admin.open_api_clients.token' | translate }} {{ 'app.admin.open_api_clients.created_at' | translate }}
    {{ client.name }} {{ client.calls_count }} {{ client.token }} {{ client.created_at | amDateFormat: 'LL' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/open_api_clients/index.html.erb';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/header.html.erb';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    4\\\">
    {{user.username}}
    {{user.name}} {{ 'app.shared.public_profile.private_profile' | translate }}
    {{ 'app.shared.public_profile.last_activity_html' }}
    {{ 'app.shared.public_profile.email_address' }}
    {{user.email}}
    {{ 'app.shared.public_profile.interests' }}
    {{ 'app.shared.public_profile.CAD_softwares_mastered' }}

    {{ 'app.shared.public_profile.trainings' }}

      0 || user.trainings.length > 0\\\">
    • {{r.reservable.name}} - {{ 'app.shared.public_profile.to_come' }}
    • {{t.name}} - {{ 'app.shared.public_profile.approved' }}
    {{ 'app.shared.public_profile.no_trainings' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/publicProfile.html.erb';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.manage_abuses.abuses_list' }}

    {{ 'app.admin.manage_abuses.no_reports' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/abuses/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.admins_new.add_an_administrator' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/admins/new.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.authentication_edit.provider' | translate }} {{provider.name}}

    {{ 'app.shared.buttons.cancel' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/authentications/edit.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.members.authentication_form.name' }} {{ 'app.admin.members.authentication_form.strategy_name' }} {{ 'app.admin.members.authentication_form.type' }} {{ 'app.admin.members.authentication_form.state' }}
    {{ provider.name }} {{ provider.strategy_name }} {{ getType(provider.providable_type) }} {{ getState(provider.status) }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/authentications/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.authentication_new.add_a_new_authentication_provider' }}

    {{ 'app.shared.buttons.cancel' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/authentications/new.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.calendar.calendar_management' }}

    {{ 'app.admin.calendar.legend' }}

    {{ 'app.admin.calendar.trainings' }}
    {{ 'app.admin.calendar.machines' }}
    {{ 'app.admin.calendar.spaces' }} {{ 'app.admin.calendar.events' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/calendar/calendar.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.admin.calendar.confirmation_required' }}

    {{ 'app.admin.calendar.do_you_really_want_to_delete_this_slot' }}

    {{ 'app.admin.calendar.delete_recurring_slot' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/calendar/deleteRecurrent.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.calendar.DATE_slot' | translate:{DATE:(start | amDateFormat: 'LL')} }} {{start | amDateFormat:'LT'}} - {{end | amDateFormat:'LT'}}

    {{ 'app.admin.calendar.no_modules_available' }}

    {{ 'app.admin.calendar.select_some_machines' | translate }}

    {{ 'app.admin.calendar.divide_this_availability' }}

    {{ 'app.admin.calendar.slots' }}

    {{ 'app.admin.calendar.slots_of' }}

    {{ 'app.admin.calendar.minutes' }}

    {{ 'app.admin.calendar.adjust_the_opening_hours' }}

    {{ 'app.admin.calendar.to_time' }}

    {{ 'app.admin.calendar.restrict_options' }}

    {{ 'app.admin.calendar.restrict_with_labels' }}

    {{ 'app.admin.calendar.restrict_for_subscriptions' }}

    {{ 'app.admin.calendar.select_some_plans' | translate }}

    {{::group.name}}

    {{ 'app.admin.calendar.recurrence' }}

    {{ 'app.admin.calendar.summary' }}

    {{ 'app.admin.calendar.about_to_create' | translate:{NUMBER:occurrences.length,TYPE:availability.available_type} }}
    • {{slot.start_at | amDateFormat:'L LT'}} - {{slot.end_at | amDateFormat:'LT'}}
    {{ 'app.admin.calendar.divided_in_slots' }}
    {{ 'app.admin.calendar.reservable' }}
    {{ 'app.admin.calendar.labels' }}
    {{ 'app.admin.calendar.plans' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/calendar/eventModal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.icalendar.icalendar_import' }}

    {{ 'app.admin.icalendar.intro' }}
    0\\\">
    {{ 'app.admin.icalendar.name' }} {{ 'app.admin.icalendar.url' }} {{ 'app.admin.icalendar.display' }}
    {{calendar.name}} {{calendar.url}} {{ calendar.text_hidden ? '' : 'app.admin.icalendar.example' }}

    {{ 'app.admin.icalendar.new_import' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/calendar/icalendar.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.shared.coupon.name_is_required' }}
    {{ 'app.shared.coupon.code_is_required' }} {{ 'app.shared.coupon.code_must_be_composed_of_capital_letters_digits_and_or_dashes' }}
    {{ 'app.shared.coupon.percent_off_is_required' }} {{ 'app.shared.coupon.percentage_must_be_between_0_and_100' }}
    {{currencySymbol}}
    {{ 'app.shared.coupon.percent_off_is_required' }} {{ 'app.shared.coupon.percentage_must_be_between_0_and_100' }}
    {{ 'app.shared.coupon.validity_per_user_is_required' }}

    {{ 'app.shared.coupon.warn_validity_once' }}

    {{ 'app.shared.coupon.warn_validity_forever' }}

    {{ errors['valid_until'].join(' ; ') }} {{ 'app.shared.coupon.leave_empty_for_no_limit' | translate }}
    {{ 'app.shared.coupon.max_usages_must_be_equal_or_greater_than_0' }} {{ 'app.shared.coupon.leave_empty_for_no_limit' | translate }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/coupons/_form.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.coupons_edit.coupon' | translate }} {{ coupon.name }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/coupons/edit.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.coupons_new.add_a_coupon' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/coupons/new.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.events.categories' }}

    {{ 'app.admin.events.at_least_one_category_is_required' }}

    {{ 'app.admin.events.name' }}
    {{ category.name }}

    {{ 'app.admin.events.themes' }}

    {{ 'app.admin.events.name' }}
    {{ theme.name }}

    {{ 'app.admin.events.age_ranges' }}

    {{ 'app.admin.events.name' }}
    {{ range.name }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/events/filters.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.events.fablab_events' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/events/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.events.title' }} {{ 'app.admin.events.dates' }} {{ 'app.admin.events.booking' }}
    {{ event.title }} {{ 'app.admin.events.on_DATE' | translate:{DATE:(event.start_date | amDateFormat:'LL')} }} {{ 'app.admin.events.from_TIME' | translate:{TIME:(event.start_date | amDateFormat:'LT')} }} {{ 'app.admin.events.to_time' }} {{event.end_date | amDateFormat:'LT'}} {{'app.admin.events.from_DATE' | translate:{DATE:(event.start_date | amDateFormat:'LL')} }} {{'app.admin.events.to_date' | translate}} {{event.end_date | amDateFormat:'LL'}}
    {{ 'app.admin.events.from_TIME' | translate:{TIME:(event.start_date | amDateFormat:'LT')} }} {{ 'app.admin.events.to_time' }} {{event.end_date | amDateFormat:'LT'}}
    0\\\">{{ event.nb_total_places - event.nb_free_places }} / {{ event.nb_total_places }} {{ 'app.admin.events.cancelled' }} {{ 'app.admin.events.without_reservation' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/events/monitoring.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.admin.events.price_category' }}

    {{ 'app.admin.events.category_name_is_required' }}
    {{ 'app.admin.events.conditions_are_required' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/events/price_form.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.events.prices_categories' }}

    {{ 'app.admin.events.name' }} {{ 'app.admin.events.usages_count' }}
    {{ category.name }} {{ category.events }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/events/prices.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.event_reservations.the_reservations' | translate }} {{event.title}}

    0\\\">
    {{ 'app.admin.event_reservations.user' }} {{ 'app.admin.event_reservations.payment_date' }} {{ 'app.admin.event_reservations.reserved_tickets' }}
    {{ reservation.user_full_name }} {{ reservation.created_at | amDateFormat:'LL LTS' }} 0\\\">{{ 'app.admin.event_reservations.full_price_' | translate }} {{reservation.nb_reserve_places}}
    {{ticket.event_price_category.price_category.name}} : {{ticket.booked}}
    {{ 'app.admin.event_reservations.canceled' }}

    {{ 'app.admin.event_reservations.no_reservations_for_now' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/events/reservations.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.members.group_form.group_name' }}
    {{group.name}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/groups/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    • {{ 'app.admin.invoices.closed_at' }} : {{period.closed_at | amDateFormat:'L'}}
    • {{ 'app.admin.invoices.closed_by' }} : {{period.user_name}}
    • {{ 'app.admin.invoices.period_total' }} : {{period.period_total | currency}}
    • {{ 'app.admin.invoices.perpetual_total' }} : {{period.perpetual_total | currency}}
    • {{ 'app.admin.invoices.integrity' }} :
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/_period.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.invoices.export_accounting_data' }}

    {{ 'app.admin.invoices.export_what' }}

    {{ 'app.admin.invoices.format' }}
    {{ exportTarget.settings.format }}
    {{ 'app.admin.invoices.encoding' }}
    {{ exportTarget.settings.encoding }}
    {{ 'app.admin.invoices.separator' }}
    {{ exportTarget.settings.separator }}
    {{ 'app.admin.invoices.dateFormat' }}
    {{ 'app.admin.invoices.labelMaxLength' }}
    {{ exportTarget.settings.labelMaxLength }}
    {{ 'app.admin.invoices.decimalSeparator' }}
    {{ exportTarget.settings.decimalSeparator }}
    {{ 'app.admin.invoices.exportInvoicesAtZero' }}
    {{ exportTarget.settings.exportInvoicesAtZero ? 'app.shared.buttons.yes' : 'app.shared.buttons.no' }}
    {{ 'app.admin.invoices.columns' }}
    {{ 'app.admin.invoices.exportColumns.' + column }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/accountingExportModal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.invoices.create_a_refund_on_this_invoice' }}

    {{ 'app.admin.invoices.creation_date_is_required' }}
    1\\\" class=\\\"form-group\\\">
    {{ 'app.admin.invoices.description' }} {{ 'app.admin.invoices.price' }}
    {{item.amount | currency}}

    {{ 'app.admin.invoices.will_appear_on_the_refund_invoice' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/avoirModal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.invoices.close_accounting_period' }}

    {{ 'app.admin.invoices.start_date_is_required' }} {{ errors.start_at[0] }}
    {{ 'app.admin.invoices.end_date_is_required' }} {{ errors.end_at[0] }}
    {{ $parent.invoiceErrorRE.exec(key)[1] }} : {{ value[0] }}

    {{ 'app.admin.invoices.previous_closings' }}

    0\\\">
    {{ 'app.admin.invoices.start_date' }} {{ 'app.admin.invoices.end_date' }}
    {{period.start_at | amDateFormat:'L'}} {{period.end_at | amDateFormat:'L'}}
    {{ 'app.admin.invoices.no_periods'}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/closePeriodModal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/codes.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.invoices.filter_invoices' | translate }}

    {{ 'app.admin.invoices.invoice_num_' }}
    {{ 'app.admin.invoices.customer_' }}
    {{ \\\"app.admin.invoices.date_\\\" | translate }}
    0\\\">
    {{ 'app.admin.invoices.invoice_num' | translate }} {{ 'app.admin.invoices.date' | translate }} {{ 'app.admin.invoices.price' | translate }} {{ 'app.admin.invoices.customer' | translate }}
    {{ invoice.reference }} {{ invoice.date | amDateFormat:'L LTS' }} {{ invoice.date | amDateFormat:'L' }} {{ invoice.total | currency}} {{ invoice.name }} {{ invoice.name }}

    {{ 'app.admin.invoices.no_invoices_for_now' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/list.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.invoices.payment.payment_settings' }}

    {{ 'app.admin.invoices.payment.online_payment' }}

    {{ 'app.admin.invoices.payment.stripe_keys' }}

    {{ 'app.admin.invoices.payment.currency' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/payment.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.invoices.warning_invoices_disabled' }}
    {{ 'app.admin.invoices.change_logo' | translate }}
    {{ 'app.admin.invoices.john_smith' }}
    {{ 'app.admin.invoices.john_smith_at_example_com' }}
    {{ 'app.admin.invoices.invoice_reference_' | translate }} {{mkReference()}}
    {{ 'app.admin.invoices.code_' | translate }} {{invoice.code.model}}
    {{ 'app.admin.invoices.code_disabled' }}
    {{ 'app.admin.invoices.order_num' | translate }} {{mkNumber()}}
    {{ 'app.admin.invoices.invoice_issued_on_DATE_at_TIME' | translate:{DATE:(today | amDateFormat:'L'), TIME:(today | amDateFormat:'LT')} }}
    {{ 'app.admin.invoices.object_reservation_of_john_smith_on_DATE_at_TIME' | translate:{DATE:(inOneWeek | amDateFormat:'L'), TIME:(inOneWeek | amDateFormat:'LT')} }}
    {{ 'app.admin.invoices.order_summary' | translate }}
    {{ 'app.admin.invoices.details' }} {{ 'app.admin.invoices.amount' }}
    {{ 'app.admin.invoices.machine_booking-3D_printer' | translate }} {{inOneWeek | amDateFormat:'LLL'}} - {{inOneWeekAndOneHour | amDateFormat:'LT'}} {{30.0 | currency}}
    {{ 'app.admin.invoices.total_amount' }} {{ 'app.admin.invoices.total_including_all_taxes' }} {{30.0 | currency}}
    {{ 'app.admin.invoices.VAT_disabled' }}
    {{ 'app.admin.invoices.including_VAT' }} {{30-(30/(getMachineExampleRate()/100+1)) | currency}}
    {{ 'app.admin.invoices.including_total_excluding_taxes' }} {{30/(getMachineExampleRate()/100+1) | currency}}
    {{ 'app.admin.invoices.including_amount_payed_on_ordering' }} {{30.0 | currency}}

    {{ 'app.admin.invoices.settlement_by_debit_card_on_DATE_at_TIME_for_an_amount_of_AMOUNT' }}

    {{ 'app.admin.invoices.filename' }}

    {{file.prefix}}-{{file.nextId}}_{{file.date}}.pdf

    {{ 'app.admin.invoices.schedule_filename' }}

    {{scheduleFile.prefix}}-{{scheduleFile.nextId}}_{{scheduleFile.date}}.pdf
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/settings.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.invoices.code' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/settings/editCode.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.invoices.multiVAT' }}

    %
    %
    %
    %
    %
    %
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/settings/editMultiVAT.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.invoices.order_number' }}

    {{ 'app.admin.invoices.elements' }}

    • {{ 'app.admin.invoices.year' | translate }}
    • {{ 'app.admin.invoices.month' | translate }}
    • {{ 'app.admin.invoices.day' | translate }}
    • {{ 'app.admin.invoices.order_num' | translate }}

    {{ 'app.admin.invoices.model' }}

    {{ 'app.admin.invoices.documentation' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/settings/editNumber.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.invoices.filename' }}

    {{ 'app.admin.invoices.prefix_info' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/settings/editPrefix.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.invoices.invoice_reference' }}

    Éléments

    • {{ 'app.admin.invoices.year' | translate }}
    • {{ 'app.admin.invoices.month' | translate }}
    • {{ 'app.admin.invoices.day' | translate }}
    • {{ 'app.admin.invoices.num_of_invoice' | translate }}
    • {{ 'app.admin.invoices.online_sales' | translate }}
    • {{ 'app.admin.invoices.refund' | translate }}
    • {{ 'app.admin.invoices.payment_schedule' | translate }}

    {{ 'app.admin.invoices.model' }}

    {{ 'app.admin.invoices.invoice_reference_is_required' }}

    {{ 'app.admin.invoices.documentation' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/settings/editReference.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.invoices.filename' }}

    {{ 'app.admin.invoices.schedule_prefix_info' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/settings/editSchedulePrefix.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.invoices.VAT' }}

    %

    {{ 'app.admin.invoices.VAT_notice' | translate }}

    {{ 'app.admin.invoices.VAT_history' }}

    {{ 'app.admin.invoices.VAT_rate' }} {{ 'app.admin.invoices.changed_at' }} {{ 'app.admin.invoices.changed_by' }}
    {{'app.admin.invoices.VAT_disabled'}} {{'app.admin.invoices.VAT_enabled'}} {{value.rate}} {{value.date | amDateFormat:'L LT'}} {{value.user.name}}{{ 'app.admin.invoices.deleted_user' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/settings/editVAT.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.invoices.VAT_history' }}

    {{ 'app.admin.invoices.VAT_rate' }} {{ 'app.admin.invoices.changed_at' }} {{ 'app.admin.invoices.changed_by' }}
    {{'app.admin.invoices.VAT_disabled'}} {{'app.admin.invoices.VAT_enabled'}} {{rateValue(value)}} {{value.date | amDateFormat:'L LT'}} {{value.user.name}}{{ 'app.admin.invoices.deleted_user' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/settings/multiVATHistory.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.invoices.payment.stripe_keys' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/invoices/settings/stripeKeys.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.manager_new.add_a_manager' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/managers/new.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.shared.user_admin.group_is_required' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/members/_form.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.members.surname' | translate }} {{ 'app.admin.members.first_name' | translate }} {{ 'app.admin.members.email' | translate }} {{ 'app.admin.members.phone' | translate }}
    {{ admin.profile_attributes.last_name }} {{ admin.profile_attributes.first_name }} {{ admin.email }} {{ admin.profile_attributes.phone }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/members/administrators.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.admin.members_edit.change_role' }}

    {{ 'app.admin.members_edit.warning_role_change' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/members/change_role_modal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.shared.user_admin.user' | translate }} {{ user.name }}

    {{ 'app.shared.user_admin.incomplete_profile' }}
    \\\"role{{ 'app.admin.members_edit.change_role' }}
    {{ 'app.shared.user_admin.warning_incomplete_user_profile_probably_imported_from_sso' }}

    {{ subscription.plan | humanReadablePlanName }}

    {{ 'app.admin.members_edit.duration' | translate }} {{ subscription.plan.interval | planIntervalFilter: subscription.plan.interval_count }}

    {{ 'app.admin.members_edit.expires_at' | translate }} {{ subscription.expired_at | amDateFormat: 'L' }}

    {{ 'app.admin.members_edit.price_' | translate }} {{ subscription.plan.amount | currency}}

    {{ 'app.admin.members_edit.cannot_extend_own_subscription' }}

    {{ 'app.admin.members_edit.user_has_no_current_subscription' }}

    {{ 'app.admin.members_edit.next_trainings' | translate }}

      0\\\">
    • {{r.reservable.name}} - {{ r.start_at | amDateFormat:'LLL' }} - {{ r.end_at | amDateFormat:'LT' }}
    {{ 'app.admin.members_edit.no_trainings' }}

    {{ 'app.admin.members_edit.passed_trainings' | translate }}

      0\\\">
    • {{r.reservable.name}} - {{ r.start_at | amDateFormat:'LLL' }} - {{ r.end_at | amDateFormat:'LT' }}
    {{ 'app.admin.members_edit.no_trainings' }}

    {{ 'app.admin.members_edit.validated_trainings' | translate }}

      0\\\">
    • {{t.name}}
    {{ 'app.admin.members_edit.no_trainings' }}

    {{ 'app.admin.members_edit.next_events' | translate }}

      0\\\">
    • {{r.reservable.title}} - {{ r.start_at | amDateFormat:'LLL' }} - {{ r.end_at | amDateFormat:'LT' }} 0\\\">
      {{ 'app.admin.members_edit.NUMBER_full_price_tickets_reserved' }}

      {{ 'app.admin.members_edit.NUMBER_NAME_tickets_reserved' }}
    {{ 'app.admin.members_edit.no_upcoming_events' }}

    {{ 'app.admin.members_edit.passed_events' | translate }}

      0\\\">
    • {{r.reservable.title}} - {{ r.start_at | amDateFormat:'LLL' }} - {{ r.end_at | amDateFormat:'LT' }}
    {{ 'app.admin.members_edit.no_passed_events' }}
    0\\\">
    {{ 'app.admin.members_edit.invoice_num' }} {{ 'app.admin.members_edit.date' }} {{ 'app.admin.members_edit.price' }}
    {{ invoice.reference }} {{ invoice.date | amDateFormat:'L LTS' }} {{ invoice.date | amDateFormat:'L' }} {{ invoice.total | currency }}

    {{ 'app.admin.members_edit.no_invoices_for_now' }}

    {{ 'app.admin.members_edit.cannot_credit_own_wallet' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/members/edit.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.members_import.import_members' }}

    {{ 'app.admin.members_import.info' }}

    {{ 'app.admin.members_import.groups' }}

    {{ 'app.admin.members_import.group_name' }} {{ 'app.admin.members_import.group_identifier' }}
    {{ group.name }} {{ group.slug }}

    {{ 'app.admin.members_import.trainings' }}

    {{ 'app.admin.members_import.training_name' }} {{ 'app.admin.members_import.training_identifier' }}
    {{ training.name }} {{ training.id }}

    {{ 'app.admin.members_import.tags' }}

    {{ 'app.admin.members_import.tag_name' }} {{ 'app.admin.members_import.tag_identifier' }}
    {{ tag.name }} {{ tag.id }}

    {{ 'app.admin.members_import.required_fields' }}

    {{file.attachment}}
    {{ 'app.admin.members_import.select_file' }} {{ 'app.shared.buttons.change' }}
    {{ 'app.admin.members_import.update_field' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/members/import.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.members_import_result.import_results' }}

    {{ 'app.admin.members_import_result.import_details' | translate:{DATE:(import.created_at | amDateFormat:'L'), USER:import.user.full_name, ID:import.id} }}

    {{ 'app.admin.members_import_result.pending' }}

    {{ 'app.admin.members_import_result.results' }}

    {{key}}
    {{value}}
    {{ 'app.admin.members_import_result.status_' + resultRow.status | translate:{ID:resultRow.user} }} {{ 'app.admin.members_import_result.success' }} {{ 'app.admin.members_import_result.failed' }}
    {{ 'app.admin.members_import_result.error_details' }}{{resultRow}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/members/import_result.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.members.users_management' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/members/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.members.managers_info' }}

    {{ 'app.admin.members.surname' | translate }} {{ 'app.admin.members.first_name' | translate }} {{ 'app.admin.members.email' | translate }} {{ 'app.admin.members.phone' | translate }}
    {{ manager.last_name }} {{ manager.first_name }} {{ manager.email }} {{ manager.phone }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/members/managers.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/members/members.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.members_new.add_a_member' }}

    {{ 'app.shared.buttons.cancel' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/members/new.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.members.partners_info' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/members/partners.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/members/users.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.store.manage_the_store' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/orders/show.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.shared.plan.general_information' }}

    {{ 'app.shared.plan.name_is_required' }} {{ 'app.shared.plan.name_length_must_be_less_than_24_characters' }}
    {{ 'app.shared.plan.type_is_required' }}
    {{ 'app.shared.plan.group_is_required' }}
    {{ 'app.shared.plan.period_is_required' }}
    {{ 'app.shared.plan.number_of_periods_is_required' }}
    {{currencySymbol}}
    {{ 'app.shared.plan.price_is_required' }} {{ 'app.shared.plan.edit_amount_info' | translate }}
    {{ 'app.shared.plan.on_the_subscriptions_page_the_most_prominent_subscriptions_will_be_placed_at_the_top_of_the_list' | translate }} {{ 'app.shared.plan.an_evelated_number_means_a_higher_prominence' | translate }}
    {{ (plan.is_rolling ? 'app.shared.buttons.yes' : 'app.shared.buttons.no') | translate }} {{ 'app.shared.plan.a_rolling_subscription_will_begin_the_day_of_the_first_training' | translate }} {{ 'app.shared.plan.otherwise_it_will_begin_as_soon_as_it_is_bought' | translate }}
    {{ (plan.monthly_payment ? 'app.shared.buttons.yes' : 'app.shared.buttons.no') | translate }} {{ 'app.shared.plan.monthly_payment_info' }}
    {{file.attachment || plan.plan_file_attributes.attachment_identifier}}
    {{ 'app.shared.plan.attach_an_information_sheet' }} {{ 'app.shared.buttons.change' }}
    {{ 'app.shared.plan.as_part_of_a_partner_subscription_some_notifications_may_be_sent_to_this_user' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/plans/_form.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.plans_categories.manage_plans_categories' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/plans/categories.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.plans.edit.subscription_plan' | translate }} {{ plan.base_name }}

    {{ 'app.shared.plan.disable_plan_will_not_unsubscribe_users' }}

    {{ 'app.admin.plans.edit.prices' }}

    {{ 'app.admin.plans.edit.machines' }}

    {{ 'app.admin.plans.edit.machine' }} {{ 'app.admin.plans.edit.hourly_rate' }}
    {{ getMachine(price.priceable_id).name }} (id {{ price.priceable_id }}) *
    {{currencySymbol}}

    {{ 'app.admin.plans.edit.spaces' }}

    {{ 'app.admin.plans.edit.space' }} {{ 'app.admin.plans.edit.hourly_rate' }}
    {{ getSpace(price.priceable_id).name }} *
    {{currencySymbol}}
    • {{ key }} errors
      • {{ e.$name }} has an error: {{ key }}.
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/plans/edit.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.plans.new.add_a_subscription_plan' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/plans/new.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.pricing.list_of_the_coupons' }}

    {{ 'app.admin.pricing.name' }} {{ 'app.admin.pricing.discount' }} {{ 'app.admin.pricing.nb_of_usages' }} {{ 'app.admin.pricing.status' }}
    {{coupon.name}} {{coupon.percent_off}} % {{coupon.amount_off}} {{currencySymbol}} {{coupon.usages}} {{'app.admin.pricing.'+coupon.status}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/pricing/coupons.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.pricing.trainings' }}

    {{ 'app.admin.pricing.subscription' }} {{ 'app.admin.pricing.credits' }} {{ 'app.admin.pricing.related_trainings' }}
    {{ plan | humanReadablePlanName: groups }} {{ plan.training_credit_nb }} {{ showTrainings(trainingIds) }}

    {{ 'app.admin.pricing.machines' }}

    {{ 'app.admin.pricing.machine' }} {{ 'app.admin.pricing.hours' | translate:{DURATION:slotDuration} }} {{ 'app.admin.pricing.related_subscriptions' }}
    {{ showCreditableName(mc) }} {{ mc.hours }} {{ getPlanFromId(mc.plan_id) | humanReadablePlanName: groups: 'short' }}

    {{ 'app.admin.pricing.spaces' }}

    {{ 'app.admin.pricing.space' }} {{ 'app.admin.pricing.hours' | translate:{DURATION:slotDuration} }} {{ 'app.admin.pricing.related_subscriptions' }}
    {{ showCreditableName(sc) }} {{ sc.hours }} {{ getPlanFromId(sc.plan_id) | humanReadablePlanName: groups: 'short' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/pricing/credits.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.pricing.pricing_management' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/pricing/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/pricing/machine_hours.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.pricing.send_a_coupon' }}

    {{ 'app.admin.pricing.coupon' }}

    {{'app.admin.pricing.code'}} {{coupon.code}}
    {{'app.admin.pricing.discount'}} {{coupon.percent_off}} %{{coupon.amount_off}} {{currencySymbol}}
    {{'app.admin.pricing.validity_per_user'}} {{'app.admin.pricing.'+coupon.validity_per_user}}
    {{'app.admin.pricing.valid_until'}} {{coupon.valid_until | amDateFormat:'L'}}
    {{'app.admin.pricing.usages'}} {{coupon.usages}} / {{coupon.max_usages | maxCount}}
    {{'app.admin.pricing.enabled'}} {{coupon.active | booleanFormat}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/pricing/sendCoupon.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/pricing/spaces.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.pricing.list_of_the_subscription_plans' }}

    {{ 'app.admin.pricing.name' | translate }} {{ 'app.admin.pricing.duration' | translate }} {{ 'app.admin.pricing.group' | translate }} {{ 'app.admin.pricing.category' | translate }} {{ 'app.admin.pricing.prominence' | translate }} {{ 'app.admin.pricing.price' | translate }}
    {{plan.base_name}} {{ plan.interval | planIntervalFilter:plan.interval_count }} {{group.name}} {{getPlanCategory(plan.plan_category_id)}} {{plan.ui_weight}} {{plan.amount | currency}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/pricing/subscriptions.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.pricing.trainings' }} {{group.name}}
    {{ training.name }} {{ findTrainingsPricing(trainingsPricings, training.id, group.id).amount | currency}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/pricing/trainings.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.projects.projects_settings' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/projects/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.projects.name' }} {{ 'app.admin.projects.description' }}
    {{ licence.name }}
    {{ licence.description }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/projects/licences.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.projects.name' }}
    {{ component.name }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/projects/materials.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.projects.settings.comments' }}

    {{ 'app.admin.projects.settings.disqus' }}

    {{ 'app.admin.projects.settings.disqus_info' }}

    {{ 'app.admin.projects.settings.cad_files' }}

    {{ 'app.admin.projects.settings.validation' }}

    {{ 'app.admin.projects.settings.validation_info' }}

    {{file.attachment}}
    {{ 'app.admin.projects.settings.set_a_file' }} {{ 'app.shared.buttons.change' }}
    {{ 'app.admin.projects.settings.projects_sharing' }}

    {{ 'app.admin.projects.settings.open_lab_projects' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/projects/settings.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.projects.name' }}
    {{ theme.name }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/projects/themes.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.settings.link' }}
    {{ 'app.admin.settings.content' }}

    {{ 'app.admin.settings.shift_enter_to_force_carriage_return' | translate }}
    {{ 'app.admin.settings.drag_and_drop_to_insert_images' | translate }} (max. 1200px)
    {{ 'app.admin.settings.shift_enter_to_force_carriage_return' | translate }}

    {{ 'app.admin.settings.about_follow_us' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/settings/about.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.settings.fab_analytics' }}

    {{ 'app.admin.settings.privacy.analytics.intro_analytics_html' }}

    {{ 'app.admin.settings.privacy.analytics.version' }}{{ data.version }}
    {{ 'app.admin.settings.privacy.analytics.members' }}{{ data.members }}
    {{ 'app.admin.settings.privacy.analytics.admins' }}{{ data.admins }}
    {{ 'app.admin.settings.privacy.analytics.availabilities' }}{{ data.availabilities }}
    {{ 'app.admin.settings.privacy.analytics.reservations' }}{{ data.reservations }}
    {{ 'app.admin.settings.privacy.analytics.plans' }}{{ data.plans }}
    {{ 'app.admin.settings.privacy.analytics.spaces' }}{{ data.spaces }}
    {{ 'app.admin.settings.privacy.analytics.online_payment' }}{{ data.online_payment }}
    {{ 'app.admin.settings.privacy.analytics.invoices' }}{{ data.invoices }}
    {{ 'app.admin.settings.privacy.analytics.openlab' }}{{ data.openlab }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/settings/analyticsModal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.settings.account_creation' }}

    {{ 'app.admin.settings.general.public_registrations' }}

    {{ 'app.admin.settings.general.public_registrations_info' }}

    {{ 'app.admin.settings.account_confirmation' }}

    {{ 'app.admin.settings.confirmation_required_info' }}

    {{ 'app.admin.settings.change_group' }}

    {{ 'app.admin.settings.change_group_info' }}

    {{ 'app.admin.settings.account.user_validation_required_title' }}

    {{ 'app.admin.settings.account.user_validation_required_info' }}

    {{ 'app.admin.settings.captcha' }}

    {{ 'app.admin.settings.accounts_management' }}

    {{ 'app.admin.settings.members_list' }}

    {{ 'app.admin.settings.members_list_info' }}

    {{ 'app.admin.settings.account.customize_account_settings' }}

    {{ 'app.admin.settings.phone' }}

    {{ 'app.admin.settings.phone_required_info' }}

    {{ 'app.admin.settings.address' }}

    {{ 'app.admin.settings.address_required_info_html' }}

    {{ 'app.admin.settings.account.organization' }}

    {{ 'app.admin.settings.account.organization_profile_custom_fields_info' }}

    {{ 'app.admin.settings.account.organization_profile_custom_fields_alert' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/settings/compte.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.settings.general.title' }}

    {{ 'app.admin.settings.general.title_concordance' }}



    {{ 'app.admin.settings.customize_information_messages' }}

    {{ 'app.admin.settings.message_of_the_machine_booking_page' }}

    {{ 'app.admin.settings.warning_message_of_the_training_booking_page'}}

    {{ 'app.admin.settings.information_message_of_the_training_reservation_page'}}

    {{ 'app.admin.settings.message_of_the_subscriptions_page' }}

    {{ 'app.admin.settings.message_of_the_events_page' }}

    {{ 'app.admin.settings.message_of_the_spaces_page' }}

    {{ 'app.admin.settings.legal_documents'}}
    {{ 'app.admin.settings.if_these_documents_are_not_filled_no_consent_about_them_will_be_asked_to_the_user' }}
    {{cgvFile.custom_asset_file_attributes.attachment}}
    {{ 'app.shared.buttons.browse' }} {{ 'app.shared.buttons.change' }}
    {{cguFile.custom_asset_file_attributes.attachment}}
    {{ 'app.shared.buttons.browse' }} {{ 'app.shared.buttons.change' }}
    {{ 'app.admin.settings.customize_the_graphics' }}
    {{ 'app.admin.settings.for_an_optimal_rendering_the_logo_image_must_be_at_the_PNG_format_with_a_transparent_background_and_with_an_aspect_ratio_3.5_times_wider_than_the_height' }}
    {{ 'app.admin.settings.concerning_the_favicon_it_must_be_at_ICO_format_with_a_size_of_16x16_pixels' }}

    {{ 'app.admin.settings.remember_to_refresh_the_page_for_the_changes_to_take_effect' }}

    {{ 'app.admin.settings.logo_white_background' }}

    \\\"{{customLogo.custom_asset_file_attributes.attachment}}\\\"
    {{ 'app.admin.settings.change_the_logo' | translate }}

    {{ 'app.admin.settings.logo_black_background' }}

    {{ 'app.admin.settings.favicon' }}

    \\\"{{customFavicon.custom_asset_file_attributes.attachment}}\\\"
    {{ 'app.admin.settings.change_the_favicon' | translate }}

    {{ 'app.admin.settings.main_colour' }}

    {{ 'app.admin.settings.secondary_colour' }}

    {{ 'app.admin.settings.background_picture_of_the_profile_banner' }}

    \\\"{{profileImage.custom_asset_file_attributes.attachment}}\\\"
    {{ 'app.admin.settings.change_the_profile_banner' | translate }}
    {{ 'app.admin.settings.general.elements_ordering' }}

    {{ 'app.admin.settings.general.machines_order' }}

    {{ 'app.admin.settings.general.help' }}

    {{ 'app.admin.settings.general.feature_tour' }}

    {{ 'app.admin.settings.general.notifications' }}

    {{ 'app.admin.settings.general.email' }}

    {{ 'app.admin.settings.general.email_info' }}

    {{ 'app.admin.settings.modules' }}

    {{ 'app.admin.settings.remember_to_refresh_the_page_for_the_changes_to_take_effect' }}

    {{ 'app.admin.settings.machines' }}

    {{ 'app.admin.settings.spaces' }}

    {{ 'app.admin.settings.plans' }}

    {{ 'app.admin.settings.trainings' }}

    {{ 'app.admin.settings.store' }}

    {{ 'app.admin.settings.invoicing' }}

    {{ 'app.admin.settings.general.wallet' }}

    {{ 'app.admin.settings.general.public_agenda' }}

    {{ 'app.admin.settings.general.statistics' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/settings/general.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.settings.customize_home_page' }}

    {{ 'app.admin.settings.news_of_the_home_page' }}

    {{ 'app.admin.settings.leave_it_empty_to_not_bring_up_any_news_on_the_home_page' | translate }}
    {{ 'app.admin.settings.advanced' }}

    {{ 'app.admin.settings.customize_home_page_css' }}

    {{ 'app.admin.settings.home_css_notice_html' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/settings/home_page.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.settings.customize_the_application' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/settings/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ titleNew }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/settings/newSelectOption.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ helperText | translate }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/settings/number.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.settings.privacy.privacy_policy' }}
    {{ 'app.admin.settings.drag_and_drop_to_insert_images' | translate }}
    {{ 'app.admin.settings.shift_enter_to_force_carriage_return' | translate }}
    {{ 'app.admin.settings.privacy.analytics.title' }}

    {{ 'app.admin.settings.privacy.about_analytics' }} {{ 'app.admin.settings.privacy.read_more' }}

    {{ 'app.admin.settings.privacy.statistics' }}

    {{ 'app.admin.settings.remember_to_refresh_the_page_for_the_changes_to_take_effect' }}

    {{ 'app.admin.settings.privacy.google_analytics' }}

    {{ 'app.admin.settings.privacy.facebook' }}

    {{ 'app.admin.settings.privacy.twitter' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/settings/privacy.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.settings.reservations_parameters' }}

    {{ 'app.admin.settings.confine_the_booking_agenda' }}

    {{ 'app.admin.settings.opening_time' }}

    {{ 'app.admin.settings.closing_time' }}

    {{ 'app.admin.settings.max_visibility' }}

    {{ 'app.admin.settings.ability_for_the_users_to_move_their_reservations' }}

    {{ 'app.admin.settings.ability_for_the_users_to_cancel_their_reservations' }}

    {{ 'app.admin.settings.book_overlapping_slots_info' }}

    {{ 'app.admin.settings.overlapping_categories_info' }}

    {{ 'app.admin.settings.default_slot_duration' }}

    {{ 'app.admin.settings.default_slot_duration_info' }}

    {{ 'app.admin.settings.pack_only_for_subscription_info' }}

    {{ 'app.admin.settings.extended_prices' }}

    {{ 'app.admin.settings.reservations_reminders' }}

    {{ 'app.admin.settings.notification_sending_before_the_reservation_occurs' }}

    {{ 'app.admin.settings.display' }}

    {{ 'app.admin.settings.display_reservation_user_name' }}

    {{ 'app.admin.settings.events_in_the_calendar' }}

    {{ 'app.admin.settings.events_in_calendar_info' }}

    {{ 'app.admin.settings.display_invite_to_renew_pack' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/settings/reservations.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.settings.privacy.save_or_publish' }}

    {{ 'app.admin.settings.privacy.save_or_publish_body' }}

    {{ 'app.admin.settings.privacy.publish_will_notify' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/settings/save_policy.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/settings/select-multiple.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/settings/select.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/settings/text.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.admin.statistics.export_statistics_to_excel' }}

    • {{ 'app.admin.statistics.start' }}
    • {{ 'app.admin.statistics.end' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/statistics/export.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.stats_graphs.statistics' }}

    • {{ 'app.admin.stats_graphs.start' }}
    • {{ 'app.admin.stats_graphs.end' }}

    {{ 'app.admin.stats_graphs.top_list_of' | translate}} {{stat.label}}

    {{type.label}}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/statistics/graphs.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.statistics.statistics' }}

    • {{ 'app.admin.statistics.start' }}
    • {{ 'app.admin.statistics.end' }}
    • {{ 'app.admin.statistics.criterion' }}
    • {{ 'app.admin.statistics.value' }}
    • {{ 'app.admin.statistics.start' }}
    • {{ 'app.admin.statistics.end' }}
    • {{ 'app.admin.statistics.entries' | translate }} {{totalHits}}
    • {{ 'app.admin.statistics.revenue_' | translate }} {{sumCA | currency}}
    • {{ 'app.admin.statistics.average_age' | translate }} {{averageAge}} {{ 'app.admin.statistics.years_old' | translate }}
    • {{ 'app.admin.statistics.total' | translate }} {{type.active.label}} : {{sumStat}}
    • {{ customFieldName(custom.field) }} {{customAggs[custom.field]}}
    {{ 'app.admin.statistics.create_plans_to_start' }} {{ 'app.admin.statistics.click_here' }}
    {{ 'app.admin.statistics.date' }} {{ 'app.admin.statistics.user' }} {{ 'app.admin.statistics.gender' }} {{ 'app.admin.statistics.age' }} {{ 'app.admin.statistics.type' }} {{type.active.label}} {{field.label}} {{ 'app.admin.statistics.revenue' | translate }}
    {{formatDate(datum._source.date)}} {{getUserNameFromId(datum._source.userId)}} {{ 'app.admin.statistics.deleted_user' }} {{formatSex(datum._source.gender)}} {{datum._source.age}} {{ 'app.admin.statistics.years_old' | translate }} {{ 'app.admin.statistics.unknown' }} {{formatSubtype(datum._source.subType)}} {{datum._source.stat}} {{formatDate(datum._source[field.key])}}
    • {{elem.name}}
    {{datum._source[field.key]}}
    {{datum._source.ca | currency}}{{ 'app.admin.statistics.unknown' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/statistics/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/store/categories.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.store.manage_the_store' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/store/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/store/orders.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.store.manage_the_store' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/store/product_edit.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.store.manage_the_store' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/store/product_new.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/store/products.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/store/settings.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.members.tag_form.tag_name' }}
    {{tag.name}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/tags/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{alert.msg}}
    {{ 'app.shared.trainings.name_is_required' }}
    \\\"\\\"/
    {{ 'app.shared.trainings.add_an_illustration' | translate }} {{ 'app.shared.buttons.change' }} {{ 'app.shared.buttons.delete' }}
    {{ 'app.shared.trainings.description_is_required' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/trainings/_form.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ training.name }}

    {{ 'app.shared.buttons.cancel' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/trainings/edit.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.trainings.trainings_monitoring' }}

    {{ 'app.admin.trainings.name' }} {{ 'app.admin.trainings.associated_machines' }} {{ 'app.admin.trainings.number_of_tickets' }}
    {{ training.name }} {{ showMachines(training) }} {{ training.nb_total_places }}
    {{ 'app.admin.trainings.training' }} {{ 'app.admin.trainings.date' }}
    {{training_name}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/trainings/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.trainings.edition_of_the_description_tooltip' }}

    {{ 'app.admin.trainings.description_is_limited_to_255_characters' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/trainings/modal_edit.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.trainings_new.add_a_new_training' }}

    {{ 'app.admin.trainings_new.beware_when_creating_a_training_its_reservation_prices_are_initialized_to_zero' | translate }} {{ 'app.admin.trainings_new.dont_forget_to_change_them_before_creating_slots_for_this_training' | translate }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/trainings/new.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.trainings.training_validation' }}

    {{ 'app.admin.trainings.training_of_the_DATE_TIME_html' }}
    {{ 'app.admin.trainings.you_can_validate_the_training_of_the_following_members' }}

      0\\\">
    • {{ 'app.admin.trainings.deleted_user' }}

    {{ 'app.admin.trainings.no_reservation' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/trainings/validTrainingModal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.common.upgrade_fabmanager' }}

    {{ 'app.public.common.security_version_html' }}

    {{ 'app.public.common.current_version' }}

    {{ 'app.public.common.upgrade_to' }}

    {{ 'app.public.common.read_more' }}

    {{ 'app.public.common.how_to' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/admin/versions/upgradeModal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.calendar.calendar' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/calendar/calendar.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.calendar.trainings' }}

    {{::t.name}}

    {{ 'app.public.calendar.machines' }}

    {{::m.name}}

    {{ 'app.public.calendar.spaces' }}

    {{::s.name}}

    {{ 'app.public.calendar.events' }}

    {{ 'app.public.calendar.show_unavailables' }}

    {{ 'app.public.calendar.externals' }}

    {{::e.name}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/calendar/filter.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.calendar.filter_calendar' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/calendar/filterAside.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.cart.my_cart' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/cart/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.logged.dashboard.events.your_next_events' | translate }}

      0\\\">
    • {{r.reservable.title}} - {{ r.start_at | amDateFormat:'LLL' }} - {{ r.end_at | amDateFormat:'LT' }}
      {{ 'app.logged.dashboard.events.NUMBER_normal_places_reserved' }}
      {{ 'app.logged.dashboard.events.NUMBER_of_NAME_places_reserved' }}
    {{ 'app.logged.dashboard.events.no_events_to_come' }}

    {{ 'app.logged.dashboard.events.your_previous_events' | translate }}

      0\\\">
    • {{r.reservable.title}} - {{ r.start_at | amDateFormat:'LLL' }} - {{ r.end_at | amDateFormat:'LT' }}
    {{ 'app.logged.dashboard.events.no_passed_events' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/dashboard/events.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    0\\\">
    {{ 'app.logged.dashboard.invoices.reference_number' }} {{ 'app.logged.dashboard.invoices.date' }} {{ 'app.logged.dashboard.invoices.price' }}
    {{ invoice.reference }} {{ invoice.date | amDateFormat:'L LTS' }} {{ invoice.date | amDateFormat:'L' }} {{ invoice.total | currency}}

    {{ 'app.logged.dashboard.invoices.no_invoices_for_now' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/dashboard/invoices.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/dashboard/nav.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/dashboard/orders.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/dashboard/payment_schedules.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/dashboard/profile.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.logged.dashboard.projects.you_dont_have_any_projects' }}

    {{project.name}}

    {{project.author_id == currentUser.id ? 'app.logged.dashboard.projects.author' : 'app.logged.dashboard.projects.collaborator' | translate}} {{ 'app.logged.dashboard.projects.rough_draft' }}

    {{ 'app.logged.dashboard.projects.description' }}

    {{ 'app.logged.dashboard.projects.machines_and_materials' }}

    {{ 'app.logged.dashboard.projects.machines' | translate }} :

    • {{m.name}}

    {{ 'app.logged.dashboard.projects.materials' | translate }} :

    • {{c.name}}

    {{ 'app.logged.dashboard.projects.collaborators' }}

  • {{collaborator.full_name}} {{collaborator.username}}
  • \";\n// Exports\nvar _module_exports = code;;\nvar path = '/dashboard/projects.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/dashboard/proof_of_identity_files.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/dashboard/reservations.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    test
    {{user.name}}
    {{user.email}}
    {{ 'app.logged.dashboard.settings.last_activity_on_' | translate:{DATE:(user.last_sign_in_at | amDateFormat: 'LL')} }}

    {{ 'app.logged.dashboard.settings.subscription' }}

    {{ user.subscribed_plan | humanReadablePlanName }}
    {{ 'app.logged.dashboard.settings.your_subscription_expires_on_' | translate }} {{user.subscription.expired_at | amDateFormat: 'LL'}}
    {{ 'app.logged.dashboard.settings.no_subscriptions' | translate }}
    {{ 'app.logged.dashboard.settings.i_want_to_subscribe' }}

    {{ 'app.logged.dashboard.settings.trainings' }}

      0 || user.trainings.length > 0\\\">
    • {{r.reservable.name}} - {{ 'app.logged.dashboard.settings.to_come' | translate }}
    • {{t.name}} - {{ 'app.logged.dashboard.settings.approved' | translate }}
    {{ 'app.logged.dashboard.settings.no_trainings' }}

    {{ 'app.logged.dashboard.settings.projects' }}

      0\\\">
    • {{p.name}}
    {{ 'app.logged.dashboard.settings.no_projects' }}

    {{ 'app.logged.dashboard.settings.labels' }}

    0\\\" ng-repeat=\\\"t in user.tags\\\"> {{t.name}}
    {{ 'app.logged.dashboard.settings.no_labels' }}

    {{ 'app.logged.dashboard.settings.cookies' }}

    {{ 'app.logged.dashboard.settings.cookies_accepted' }}
    {{ 'app.logged.dashboard.settings.cookies_declined' }}
    {{ 'app.logged.dashboard.settings.cookies_unset' }}

    {{ 'app.logged.dashboard.settings.edit_my_profile' }}

    {{activeProvider.name}}

    {{ 'app.logged.dashboard.settings.change_my_data' | translate }}

    {{ 'app.logged.dashboard.settings.once_your_data_are_up_to_date_' | translate }} {{ 'app.logged.dashboard.settings._click_on_the_synchronization_button_opposite_' }} {{ 'app.logged.dashboard.settings.or' | translate}} {{ 'app.logged.dashboard.settings._disconnect_then_reconnect_' }} {{ 'app.logged.dashboard.settings._for_your_changes_to_take_effect' | translate }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/dashboard/settings.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.logged.dashboard.trainings.your_training_credits' | translate }}

    {{ 'app.logged.dashboard.trainings.subscribe_for_credits' }} {{ 'app.logged.dashboard.trainings.register_for_free' }}
    • {{getTrainingName(c.training_id)}}

    {{ 'app.logged.dashboard.trainings.your_next_trainings' | translate }}

      0\\\">
    • {{r.reservable.name}} - {{ r.start_at | amDateFormat:'LLL' }} - {{ r.end_at | amDateFormat:'LT' }}
    {{ 'app.logged.dashboard.trainings.no_trainings' }}

    {{ 'app.logged.dashboard.trainings.your_previous_trainings' | translate }}

      0\\\">
    • {{r.reservable.name}} - {{ r.start_at | amDateFormat:'LLL' }} - {{ r.end_at | amDateFormat:'LT' }}
    {{ 'app.logged.dashboard.trainings.no_trainings' }}

    {{ 'app.logged.dashboard.trainings.your_approved_trainings' | translate }}

      0\\\">
    • {{t.name}}
    {{ 'app.logged.dashboard.trainings.no_trainings' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/dashboard/trainings.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/dashboard/wallet.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{alert.msg}}
    {{ 'app.shared.event.title_is_required' }}
    \\\"\\\"/
    {{ 'app.shared.event.choose_a_picture' | translate }} {{ 'app.shared.buttons.change' }}
    {{ 'app.shared.event.description_is_required' }}
    {{file.attachment}}
    {{ 'app.shared.buttons.browse' }} {{ 'app.shared.buttons.change' }}
    {{ 'app.shared.event.add_a_new_file' | translate }}

    {{ 'app.shared.event.event_type' }} *

    0\\\">

    {{ 'app.shared.event.age_range' }}

    {{ 'app.shared.event.dates_and_opening_hours' }}

    {{ 'app.shared.event._and_ends_on' | translate }}

    {{ 'app.shared.event.prices_and_availabilities' }}

    {{currencySymbol}}
    {{ 'app.shared.event.0_equal_free' }}
    {{currencySymbol}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/events/_form.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.public.events_show.confirmation_required' }}

    {{ 'app.public.events_show.do_you_really_want_to_delete_this_event' }}

    {{ 'app.public.events_show.delete_recurring_event' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/events/deleteRecurrent.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.events_edit.edit_the_event' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/events/edit.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.admin.events_edit.confirmation_required' }}

    {{ 'app.admin.events_edit.edit_recurring_event' }}

    {{ 'app.admin.events_edit.date_wont_change' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/events/editRecurrent.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.events_list.the_fablab_s_events' }}

    0\\\">
    0\\\">
    0\\\">

    {{monthNames[month.split(',')[0] - 1]}}, {{month.split(',')[1]}}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/events/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.public.events_show.change_the_reservation' }}

    {{ 'app.public.events_show.you_can_shift_this_reservation_on_the_following_slots' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/events/modify_event_reservation_modal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.events_new.add_an_event' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/events/new.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ event.title }} {{event.category.name}}

    {{event.event_files_attributes.length}}

    {{ 'app.public.events_show.downloadable_documents' }}

    {{ 'app.public.events_show.information_and_booking' }}

    {{event.category.name}}
    {{theme.name}}
    {{event.age_range.name}}
    {{ 'app.public.events_show.dates' | translate }}
    {{ 'app.public.events_show.beginning' | translate }} {{event.start_date | amDateFormat:'L'}}
    {{ 'app.public.events_show.ending' | translate }} {{event.end_date | amDateFormat:'L'}}
    {{ 'app.public.events_show.opening_hours' | translate }}
    {{ 'app.public.events_show.all_day' }}
    {{ 'app.public.events_show.from_time' | translate }} {{event.start_date | amDateFormat:'LT'}} {{ 'app.public.events_show.to_time' | translate }} {{event.end_date | amDateFormat:'LT'}}
    {{ 'app.public.events_show.full_price_' | translate }} {{ event.amount | currency}}
    {{price.category.name}} : {{price.amount | currency}}
    0\\\">{{ 'app.public.events_show.tickets_still_availables' | translate }} {{event.nb_free_places}}
    0 && event.nb_free_places <= 0\\\">{{ 'app.public.events_show.sold_out' }}
    {{ 'app.public.events_show.cancelled' }}
    {{ 'app.public.events_show.without_reservation' }}
    {{ 'app.public.events_show.ticket' | translate:{NUMBER:reserve.nbReservePlaces} }}
    {{ 'app.public.events_show.ticket' | translate:{NUMBER:reserve.tickets[price.id]} }}
    {{ 'app.public.events_show.thank_you_your_payment_has_been_successfully_registered' | translate }}
    {{ 'app.public.events_show.you_can_find_your_reservation_s_details_on_your_' | translate }} {{ 'app.public.events_show.dashboard' }}
    {{ 'app.public.events_show.you_booked_DATE' | translate:{DATE:(reservation.created_at | amDateFormat:'L LT')} }}
    0\\\">{{ 'app.public.events_show.full_price_' | translate }} {{reservation.nb_reserve_places}} {{ 'app.public.events_show.ticket' | translate:{NUMBER:reservation.nb_reserve_places} }}
    {{ticket.event_price_category.price_category.name}} : {{ticket.booked}} {{ 'app.public.events_show.ticket' | translate:{NUMBER:ticket.booked} }}
    0 && reservationCanModify(reservation)\\\"> {{ 'app.shared.buttons.change' }}
    {{ 'app.public.events_show.canceled_reservation_SEATS' | translate:{SEATS:reservation.total_booked_seats} }}
    {{ 'app.public.events_show.event_is_over' }} 0\\\" translate>{{ 'app.public.events_show.thanks_for_coming' }} {{ 'app.public.events_show.view_event_list' }}

    {{ 'app.shared.cart.user_validation_required_alert' }}

    0 && ctrl.member\\\" coupon=\\\"coupon.applied\\\" total=\\\"reserve.totalNoCoupon\\\" user-id=\\\"{{ctrl.member.id}}\\\">
    0\\\">

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/events/show.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/home.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.home.fablab_s_next_events' | translate }} {{ 'app.public.home.every_events' | translate }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/home/events.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.home.latest_registered_members' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/home/members.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/home/news.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.home.latest_documented_projects' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/home/projects.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.home.latest_tweets' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/home/twitter.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{alert.msg}}
    {{ 'app.shared.machine.name_is_required' }}
    \\\"\\\"/
    {{ 'app.shared.machine.add_an_illustration' | translate }} {{ 'app.shared.buttons.change' }}
    {{ 'app.shared.machine.description_is_required' }}
    {{ 'app.shared.machine.technical_specifications_are_required' }}
    {{file.attachment}}
    {{ 'app.shared.machine.attach_a_file' }} {{ 'app.shared.buttons.change' }}
    {{ 'app.shared.machine.add_an_attachment' | translate }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/machines/_form.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ machine.name }}

    {{ 'app.shared.buttons.cancel' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/machines/edit.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.machines_list.the_fablab_s_machines' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/machines/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.machines_new.declare_a_new_machine' }}

    {{ 'app.admin.machines_new.watch_out_when_creating_a_new_machine_its_prices_are_initialized_at_0_for_all_subscriptions' | translate}} {{ 'app.admin.machines_new.consider_changing_them_before_creating_any_reservation_slot' | translate }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/machines/new.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.logged.machines_reserve.machine_planning' | translate }} : {{machine.name}}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/machines/reserve.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{machine.name}}\\\"

    {{ 'app.public.machines_show.technical_specifications' }}

    {{machine.machine_files_attributes.length}}

    {{ 'app.public.machines_show.files_to_download' }}

    {{ 'app.public.machines_show.projects_using_the_machine' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/machines/show.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.logged.members.the_fablab_members' }}

    {{ 'app.logged.members.avatar' }} {{ 'app.logged.members.user' }} {{ 'app.logged.members.pseudonym' }} {{ 'app.logged.members.email_address' }}
    {{ member.name }} {{ member.username }} {{ member.email }}

    {{ 'app.logged.members.no_members_for_now' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/members/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/members/show.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.logged.notifications.notifications_center' }}

    0\\\">
    {{ 'app.logged.notifications.date' }} {{ 'app.logged.notifications.notif_title' }}
    {{ notification.created_at | amDateFormat:'LLL' }}
    {{ 'app.logged.notifications.no_new_notifications' }}
    {{ 'app.logged.notifications.archives' }}
    0\\\">
    {{ n.created_at | amDateFormat:'LLL' }}
    {{ 'app.logged.notifications.no_archived_notifications' }}
    {{ 'app.logged.notifications.load_the_next_notifications' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/notifications/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/orders/show.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/plans/_plan.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.plans.subscriptions' }}

    {{ 'app.public.plans.your_subscription_expires_on_the_DATE' | translate:{DATE:(ctrl.member.subscription.expired_at | amDateFormat:'L' )} }}

    {{ 'app.public.plans.summary' }}

    {{ 'app.public.plans.your_subscription_has_expired_on_the_DATE' | translate:{DATE:(ctrl.member.subscription.expired_at | amDateFormat:'LL')} }}
    {{ctrl.member.subscription.plan | humanReadablePlanName }}
    {{ 'app.public.plans.subscription_price' | translate }} {{ctrl.member.subscription.plan.amount | currency}}

    {{ 'app.public.plans.summary' }}

    {{ 'app.public.plans.you_ve_just_payed_the_subscription_html' }}
    {{ paid.plan | humanReadablePlanName }}
    {{ 'app.public.plans.subscription_price' | translate }} {{paid.plan.amount | currency}}
    {{ 'app.public.plans.thank_you_your_subscription_is_successful' | translate }}
    {{ 'app.public.plans.your_invoice_will_be_available_soon_from_your_dashboard' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/plans/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.store.fablab_store' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/products/show.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.logged.profile_completion.do_you_already_have_an_account' }}

    {{ 'app.logged.profile_completion.do_not_fill_the_form_beside_but_specify_here_the_code_you_ve_received_by_email_to_recover_your_access' }}

    {{ 'app.logged.profile_completion.just_specify_code_here_to_recover_access' }}

    {{ 'app.logged.profile_completion.i_did_not_receive_the_code' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/profile/_token.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Imports\nvar ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___ = require(\"../../../../node_modules/html-loader/dist/runtime/getUrl.js\");\nvar ___HTML_LOADER_IMPORT_0___ = require(\"../../images/arrow-left.png\");\n// Module\nvar ___HTML_LOADER_REPLACEMENT_0___ = ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___(___HTML_LOADER_IMPORT_0___);\nvar code = \"

    {{ 'app.logged.profile_completion.confirm_your_new_account' }}

    {{ 'app.logged.profile_completion.or' }}

    {{ 'app.logged.profile_completion.or' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/profile/complete.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.logged.profile_completion.send_code_again' }}

    {{'app.logged.profile_completion.email_is_required'}} {{'app.logged.profile_completion.email_format_is_incorrect'}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/profile/resend_code_modal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{alert.msg}}
    {{ 'app.shared.project.name_is_required' }}
    \\\"\\\"/
    {{ 'app.shared.project.add_an_illustration' | translate }} {{ 'app.shared.buttons.change' }} {{ 'app.shared.buttons.delete' }}
    {{file.attachment}}
    {{ 'app.shared.buttons.browse' }} {{ 'app.shared.buttons.change' }}
    {{ 'app.shared.project.add_a_new_file' | translate }}
    {{ 'app.shared.project.description_is_required' }}
    \\\"{{image.attachment}}\\\"/
    {{ 'app.shared.buttons.browse' | translate }} {{ 'app.shared.buttons.change' }} {{ 'app.shared.buttons.delete' }}
    {{ 'app.shared.project.add_a_new_step' }}

    {{ 'app.shared.project.employed_materials' }}

    {{ 'app.shared.project.employed_machines' }}

    {{ 'app.shared.project.collaborators' }}

    {{ 'app.shared.project.creative_commons_licences' }}

    {{ 'app.shared.project.themes' }}

    {{ 'app.shared.project.tags' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/projects/_form.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.logged.projects_edit.edit_the_project' | translate }} {{ 'app.logged.projects_edit.rough_draft' }}

    {{ 'app.logged.projects_edit.publish' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/projects/edit.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.projects_list.the_fablab_projects' }}

    {{ 'app.public.projects_list.reset_all_filters' | translate }} {{ searchOverWholeNetwork }}
    {{ 'app.public.projects_list.project_search_result_is_empty' | translate }}

    {{ project.app_name }}

    {{project.name}}

    {{ 'app.public.projects_list.rough_draft' }}
    {{ 'app.shared.buttons.consult' | translate }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/projects/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.logged.projects_new.add_a_new_project' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/projects/new.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ project.name }} {{ 'app.public.projects_show.rough_draft' }}

    \\\"{{project.name}}\\\"

    {{ 'app.public.projects_show.project_description' }}

    {{ 'app.public.projects_show.step_N' | translate:{INDEX:step.step_nb} }} : {{step.title}}

    \\\"{{image.attachment}}\\\"
    1 || step.project_step_images_attributes.length == 0}\\\">

    {{ 'app.public.projects_show.posted_on_' | translate }} {{project.created_at | amDateFormat: 'LL'}}
    {{theme.name}}
    {{project.project_caos_attributes.length}}

    {{ 'app.public.projects_show.CAD_file_to_download' }}

    {{project.machines.length}}

    {{ 'app.public.projects_show.machines_and_materials' }}

    • {{component.name}}
    0\\\">
    {{project.project_users.length}}

    {{ 'app.public.projects_show.collaborators' }}

    • {{collaborator.full_name}} {{collaborator.username}}

    {{ 'app.public.projects_show.licence' }}

    {{ project.licence.name }}

    {{ 'app.shared.project.tags' }}

    {{ project.tags }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/projects/show.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.public.common.confirm_my_account' }}

    {{ 'app.public.common.you_will_receive_confirmation_instructions_by_email' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/ConfirmationNewModal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.admins_new.pseudonym_is_required' }}
    {{ 'app.admin.admins_new.surname_is_required' }}
    {{ 'app.admin.admins_new.first_name_is_required' }}
    {{ 'app.admin.admins_new.email_is_required' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/_admin_form.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Imports\nvar ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___ = require(\"../../../../node_modules/html-loader/dist/runtime/getUrl.js\");\nvar ___HTML_LOADER_IMPORT_0___ = require(\"../../images/arrow-left.png\");\n// Module\nvar ___HTML_LOADER_REPLACEMENT_0___ = ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___(___HTML_LOADER_IMPORT_0___);\nvar code = \"

    {{ 'app.shared.cart.user_validation_required_alert' }}

    {{ 'app.shared.cart.summary' }}

    {{ 'app.shared.cart.select_one_or_more_slots_in_the_calendar' | translate:{SINGLE:limitToOneSlot} }} {{ 'app.shared.cart.select_a_plan' }}

    0\\\">
    {{ 'app.shared.cart.you_ve_just_selected_the_slot' }}
    {{ 'app.shared.cart.datetime_to_time' | translate:{START_DATETIME:(slot.start | amDateFormat:'LLLL'), END_TIME:(slot.end | amDateFormat:'LT') } }}
    {{ 'app.shared.cart.cost_of_TYPE' | translate:{TYPE:reservableType} }} {{slot.price | currency}}
    0\\\">
    0\\\">
    {{ 'app.shared.cart.slot_restrict_plans' }}
    {{::group.name}}
    • {{::plan.base_name}}
    {{ 'app.shared.cart.slot_restrict_plans_of_others_groups' }}
    0 && slot.plansGrouped.length === 0\\\">

    {{ 'app.shared.cart.to_benefit_from_attractive_prices' }}

    {{ 'app.shared.cart.or' }}

    {{ 'app.shared.cart.you_ve_just_selected_a_subscription_html' }}
    {{selectedPlan | humanReadablePlanName }}
    {{ 'app.shared.cart.cost_of_the_subscription' | translate }} {{selectedPlan.amount | currency}}
    {{ 'app.shared.cart.you_ve_just_selected_a_subscription_html' }}
    {{ selectedPlan | humanReadablePlanName }}
    {{ 'app.shared.cart.subscription_price' | translate }} {{selectedPlan.amount | currency}}
    0\\\"> {{ 'app.shared.cart.you_have_settled_the_following_TYPE' | translate:{TYPE:reservableType} }} {{reservableName}}:
    {{ 'app.shared.cart.datetime_to_time' | translate:{START_DATETIME:(paidSlot.start | amDateFormat:'LLLL'), END_TIME:(paidSlot.end | amDateFormat:'LT') } }}
    {{ 'app.shared.cart.cost_of_TYPE' | translate:{TYPE:reservableType} }} {{paidSlot.price | currency}}
    {{ 'app.shared.cart.you_have_settled_a_' | translate }}
    {{ 'app.shared.cart._subscription' }} :
    {{selectedPlan | humanReadablePlanName }}
    {{ 'app.shared.cart.cost_of_the_subscription' | translate }} {{selectedPlan.amount | currency}}
    {{ 'app.shared.cart.total_' | translate }} {{amountPaid | currency}}
    {{ 'app.shared.cart.thank_you_your_payment_has_been_successfully_registered' | translate }}
    {{ 'app.shared.cart.your_invoice_will_be_available_soon_from_your_' | translate }} {{ 'app.shared.cart.dashboard' }}

    {{ 'app.shared.cart.summary' }}

    {{ 'app.shared.cart.i_want_to_change_the_following_reservation' }}
    {{ 'app.shared.cart.datetime_to_time' | translate:{START_DATETIME:(events.modifiable.start | amDateFormat:'LLLL'), END_TIME:(events.modifiable.end | amDateFormat:'LT') } }}

    {{ 'app.shared.cart.select_a_new_slot_in_the_calendar' | translate }}

    {{ 'app.shared.cart.datetime_to_time' | translate:{START_DATETIME:(events.placable.start | amDateFormat:'LLLL'), END_TIME:(events.placable.end | amDateFormat:'LT') } }}
    0 || events.placable.tags.length > 0)\\\" ng-class=\\\"{'panel panel-danger bg-red': tagMissmatch()}\\\">
    {{ 'app.shared.cart.tags_of_the_original_slot' | translate }}
    {{tag.name}} {{ 'app.shared.cart.none' }}

    {{ 'app.shared.cart.tags_of_the_destination_slot' | translate }}
    {{tag.name}} {{ 'app.shared.cart.none' }}
    {{ 'app.shared.cart.your_booking_slot_was_successfully_moved_from_' }}
    {{ 'app.shared.cart.datetime_to_time' | translate:{START_DATETIME:(events.moved.oldSlot.start | amDateFormat:'LLLL'), END_TIME:(events.moved.oldSlot.end | amDateFormat:'LT') } }}

    {{ 'app.shared.cart.to_date' }}

    {{ 'app.shared.cart.datetime_to_time' | translate:{START_DATETIME:(events.moved.newSlot.start | amDateFormat:'LLLL'), END_TIME:(events.moved.newSlot.end | amDateFormat:'LT') } }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/_cart.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.shared.coupon_input.i_have_a_coupon' }}
    {{msg.message}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/_coupon.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    {{ 'app.admin.manager_new.pseudonym_is_required' }}
    {{ 'app.admin.manager_new.surname_is_required' }}
    {{ 'app.admin.manager_new.first_name_is_required' }}
    {{ 'app.admin.manager_new.email_is_required' }}
    {{ 'app.shared.user_admin.group_is_required' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/_manager_form.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.shared.member_select.select_a_member' }}

    {{member}}
    {{ 'app.shared.member_select.member_not_validated' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/_member_select.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.shared.plan.new_partner' }}

    {{ 'app.shared.plan.first_name_is_required' }}
    {{ 'app.shared.plan.surname_is_required' }}
    {{ 'app.shared.plan.email_address_is_required' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/_partner_new_modal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.shared.cart.slot_at_same_time' }}

    {{ 'app.shared.cart.do_you_really_want_to_book_slot_at_same_time' }}

    {{ 'app.shared.cart.unable_to_book_slot_because_really_have_reservation_at_same_time' }}

    • {{::r.reservable.name}}{{::r.reservable.title}}
      {{ 'app.shared.cart.datetime_to_time' | translate:{START_DATETIME:(r.start_at | amDateFormat:'LLLL'), END_TIME:(r.end_at | amDateFormat:'LT') } }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/_reserve_slot_same_time.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.shared.cart.tags_mismatch' }}

    {{ 'app.shared.cart.confirm_book_slot_tags_mismatch' }}

    {{ 'app.shared.cart.unable_to_book_slot_tags_mismatch' }}

    {{ 'app.shared.cart.slot_tags' }}

      0\\\">
    • {{t.name}}
    0\\\" translate>{{ 'app.shared.cart.no_tags' }}

    {{ 'app.shared.cart.user_tags' }}

    • 0\\\"> {{t.name}}
    0\\\" translate>{{ 'app.shared.cart.no_tags' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/_reserve_slot_tags_mismatch.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.shared.cart.selected_plan_dont_match_slot' }}

    {{ 'app.shared.cart.user_plan_dont_match_slot' }}

    {{ 'app.shared.cart.no_plan_match_slot' }}

    {{ 'app.shared.cart.datetime_to_time' | translate:{START_DATETIME:(slot.start | amDateFormat:'LLLL'), END_TIME:(slot.end | amDateFormat:'LT') } }}
    0\\\">
    {{ 'app.shared.cart.slot_restrict_plans' }}
    {{::group.name}}
    • {{::plan.base_name}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/_reserve_slot_without_plan.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \" \\\"{{altText}}\\\" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/_social_link.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Imports\nvar ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___ = require(\"../../../../node_modules/html-loader/dist/runtime/getUrl.js\");\nvar ___HTML_LOADER_IMPORT_0___ = require(\"../../images/no_avatar.png\");\n// Module\nvar ___HTML_LOADER_REPLACEMENT_0___ = ___HTML_LOADER_GET_SOURCE_FROM_IMPORT___(___HTML_LOADER_IMPORT_0___);\nvar code = \" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/_user_avatar.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/about.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{object.title}}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/confirm_modal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.shared.confirm_modify_slot_modal.change_the_slot' }}

    {{ 'app.shared.confirm_modify_slot_modal.do_you_want_to_change_your_booking_slot_initially_planned_at' }}

    {{ 'app.shared.confirm_modify_slot_modal.do_you_want_to_change_NAME_s_booking_slot_initially_planned_at' }}

    {{object.start | amDateFormat: 'LL'}} : {{object.start | amDateFormat:'LT'}} - {{object.end | amDateFormat:'LT'}}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/confirm_modify_slot_modal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.common.cookies.about_cookies' }} {{ 'app.public.common.cookies.learn_more' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/cookies.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.public.common.connection' }}

    {{alert.msg}}

    {{ 'app.public.common.not_registered_to_the_fablab' }}
    {{ 'app.public.common.create_an_account' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/deviseModal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.shared.help.title' }}

    {{ 'app.shared.help.what_to_do' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/help_modal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/leftnav.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.public.common.change_your_password' }}

    {{alert.msg}}
    {{ 'app.public.common.password_is_required' }} {{ 'app.public.common.password_is_too_short' }}
    {{ 'app.public.common.password_confirmation_is_required' }} {{ 'app.public.common.password_does_not_match_with_confirmation' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/passwordEditModal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.public.common.password_forgotten' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/passwordNewModal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.privacy.title' }}

    {{ 'app.public.privacy.last_update' }} {{ privacyBody.last_update | amDateFormat:'LL' }}

    {{ 'app.public.privacy.dpo' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/privacy.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.public.projects_show.report_an_abuse' }}

    {{ 'app.public.projects_show.your_first_name_is_required' }}
    {{ 'app.public.projects_show.your_surname_is_required' }}
    {{ 'app.public.projects_show.your_email_address_is_required' }}
    {{ 'app.public.projects_show.message_is_required' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/signalAbuseModal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.public.common.create_your_account' }}

    {{alert.msg}}
    {{ 'app.public.common.gender_is_required'}}
    {{ 'app.public.common.first_name_is_required' }}
    {{ 'app.public.common.surname_is_required' }}
    {{ 'app.public.common.pseudonym_is_required' }}
    {{ 'app.public.common.email_is_required' }}
    {{ 'app.public.common.password_is_required' }} {{ 'app.public.common.password_is_too_short' }}
    {{ 'app.public.common.password_confirmation_is_required' }} {{ 'app.public.common.password_does_not_match_with_confirmation' }}
    {{ 'app.public.common.organization_name_is_required' }}
    {{ 'app.public.common.organization_address_is_required' }}
    {{ 'app.public.common.profile_custom_field_is_required' }}
    {{ 'app.public.common.user_s_profile_is_required' }}

    {{ 'app.public.common.user_supporting_documents_required' }}

    {{ 'app.public.common.birth_date_is_required' }}
    {{ 'app.public.common.phone_number_is_required' }}
    {{ 'app.public.common.address_is_required' }}
    {{ 'app.public.common.field_required' }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/signupModal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/tour-step-template.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.shared.valid_reservation_modal.booking_confirmation' }}

    {{ 'app.shared.valid_reservation_modal.subscription_confirmation' }}

    {{alert.msg}}

    {{ 'app.shared.valid_reservation_modal.here_is_the_summary_of_the_slots_to_book_for_the_current_user' }}

    • {{bookedEvent.availability.start_at | amDateFormat: 'LL'}} : {{bookedEvent.availability.start_at | amDateFormat:'LT'}} - {{bookedEvent.availability.end_at | amDateFormat:'LT'}}

    {{ 'app.shared.valid_reservation_modal.here_is_the_subscription_summary' }}

    {{ plan | humanReadablePlanName }}

    {{ 'app.shared.valid_reservation_modal.card_collection_info' }}

    {{ 'app.shared.valid_reservation_modal.check_collection_info' }}

    • {{item.due_date | amDateFormat: 'L'}} {{item.amount | currency}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/shared/valid_reservation_modal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"{{alert.msg}}
    {{ 'app.shared.space.name_is_required' }}
    \\\"\\\"/
    {{ 'app.shared.space.add_an_illustration' | translate }} {{ 'app.shared.buttons.change' }} {{ 'app.shared.buttons.delete' }}
    {{ 'app.shared.space.default_places_is_required' }}
    {{file.attachment}}
    {{ 'app.shared.space.attach_a_file' }} {{ 'app.shared.buttons.change' }}
    {{ 'app.shared.space.add_an_attachment' | translate }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/spaces/_form.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.space_edit.edit_the_space_NAME' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/spaces/edit.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.spaces_list.the_spaces' }}

    {{space.name}}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/spaces/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.admin.space_new.add_a_new_space' }}

    {{ 'app.admin.space_new.watch_out_when_creating_a_new_space_its_prices_are_initialized_at_0_for_all_subscriptions' | translate}} {{ 'app.admin.space_new.consider_changing_its_prices_before_creating_any_reservation_slot' | translate }}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/spaces/new.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.logged.space_reserve.planning_of_space_NAME' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/spaces/reserve.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{space.name}}\\\"

    {{ 'app.public.space_show.characteristics' }}

    {{space.space_files_attributes.length}}

    {{ 'app.public.space_show.files_to_download' }}

    {{ 'app.public.space_show.projects_using_the_space' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/spaces/show.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.store.fablab_store' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/store/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.public.trainings_list.the_trainings' }}

    {{training.name}}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/trainings/index.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{ 'app.logged.trainings_reserve.trainings_planning' }}

    {{ 'app.logged.trainings_reserve.planning_of' }} {{training.name}}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/trainings/reserve.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \" \";\n// Exports\nvar _module_exports = code;;\nvar path = '/trainings/show.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    \\\"{{logo.custom_asset_file_attributes.attachment}}\\\"

    {{ 'app.shared.wallet.credit_title' }}

    {{ 'app.shared.wallet.warning_uneditable_credit' }}
    {{currencySymbol}} {{'app.shared.wallet.amount_is_required'}} {{ 'app.shared.wallet.amount_minimum_1' | translate }} {{currencySymbol}}.
    {{currencySymbol}} {{'app.shared.wallet.amount_confirm_is_required'}} {{ 'app.shared.wallet.amount_confirm_does_not_match' | translate }}

    {{ 'app.shared.wallet.creation_date_is_required' }}

    {{ 'app.shared.wallet.will_appear_on_the_refund_invoice' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/wallet/credit_modal.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"

    {{'app.shared.wallet.your_wallet_amount'}}

    {{'app.shared.wallet.wallet_amount'}}

    {{wallet.amount | currency}}
    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/wallet/show.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;","// Module\nvar code = \"
    0\\\">
    {{ 'app.shared.wallet.date' }} {{ 'app.shared.wallet.operation' }} {{ 'app.shared.wallet.operator' }} {{ 'app.shared.wallet.amount' }}
    {{ ::t.created_at | amDateFormat:'L' }} {{ 'app.shared.wallet.credit' }} {{ 'app.shared.wallet.debit' }} {{::t.invoice.reference}} {{::t.payment_schedule.reference}} {{ ::t.user.full_name }} + - {{ ::t.amount | currency }}

    {{ 'app.shared.wallet.no_transactions_for_now' }}

    \";\n// Exports\nvar _module_exports = code;;\nvar path = '/wallet/transactions.html';\nvar angular = require('angular');\nangular.module('ng').run(['$templateCache', function(c) { c.put(path, _module_exports) }]);\nmodule.exports = path;"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","AuthProviderAPI","index","apiClient","res","data","get","create","authProvider","update","delete","mappingFields","strategyName","providable_type","name","active","Authentication","login","email","password","logout","verifyPassword","status","CartAPI","token","order_token","addItem","order","orderableId","quantity","orderable_id","removeItem","setQuantity","setOffer","isOffered","is_offered","customer_id","user","_order$user","refreshItem","validate","CheckoutAPI","payment","paymentId","coupon_code","coupon","_order$coupon","payment_id","confirmPayment","_order$coupon2","document","querySelector","client","axios","headers","common","content","interceptors","response","use","error","Promise","message","reject","match","htmlDoc","DOMParser","parseFromString","querySelectorAll","length","textContent","prototype","hasOwnProperty","call","key","ParsingLib","Array","join","JSON","stringify","extractHumanReadableMessage","CustomAssetAPI","_res$data","custom_asset","GroupAPI","filters","ApiLib","LocalPaymentAPI","cartItems","MachineAPI","MemberAPI","list","search","_context4","serialize","profile_attributes","_user$profile_attribu","user_avatar_attributes","_user$profile_attribu2","attachment_files","set","_context5","allowEmptyArrays","_user$profile_attribu3","_user$profile_attribu4","updateRole","role","groupId","group_id","current","member","OrderAPI","updateState","state","note","withdrawalInstructions","PaymentScheduleAPI","query","page","size","cashCheck","paymentScheduleItemId","confirmTransfer","getItem","payItem","cancel","paymentScheduleId","paymentSchedule","PayzenAPI","chargeSDKTest","baseURL","username","base_url","chargeCreatePayment","cart","customer","cart_items","chargeCreateToken","checkHash","algorithm","hashKey","hash","hash_key","confirm","orderId","order_id","confirmPaymentSchedule","transactionUuid","transaction_uuid","updateToken","payment_schedule_id","checkCart","PlanCategoryAPI","category","plan_category","destroy","categoryId","PlanAPI","durations","PrepaidPackAPI","pack","packId","PriceAPI","compute","price","priceId","ProductCategoryAPI","productCategory","product_category","productCategoryId","updatePosition","position","ProductAPI","ProductLib","product","_context3","product_files_attributes","product_images_attributes","forEach","file","i","image","is_main","toString","_destroy","clone","productId","stockMovements","ProfileCustomFieldAPI","profileCustomField","profile_custom_field","profileCustomFieldId","ProofOfIdentityFileAPI","proofOfIdentityFile","proofOfIdentityFileId","ProofOfIdentityTypeAPI","proofOfIdentityType","proof_of_identity_type","proofOfIdentityTypeId","SettingAPI","setting","names","_context2","params","URLSearchParams","append","toSettingsMap","value","_res$data2","bulkUpdate","settings","transactional","toObjectArray","toBulkMap","_res$data3","isPresent","_res$data4","Map","item","itemData","localized","array","push","StripeAPI","confirmMethod","paymentMethodId","payment_method_id","confirmIntent","payment_intent_id","setupSubscription","setupIntent","userId","confirmSubscription","subscriptionId","subscription_id","updateCard","user_id","SubscriptionAPI","request","subscription","paymentsDetails","WalletAPI","getByUser","Application","Components","angular","Services","Controllers","Filters","Directives","config","$httpProvider","AuthProvider","growlProvider","unsavedWarningsConfigProvider","uibDatepickerPopupConfig","$provide","$translateProvider","TourConfigProvider","$sceDelegateProvider","cookie","replace","GTM","enableAnalytics","Fablab","trackingId","closeText","translations","app","shared","buttons","close","clearText","clear","currentText","today","navigateMessage","messages","you_will_lose_any_unsaved_modification_if_you_quit_this_page","reloadMessage","you_will_lose_any_unsaved_modification_if_you_reload_this_page","globalTimeToLive","useLoader","urlTemplate","useLoaderCache","useSanitizeValueStrategy","useMessageFormatInterpolation","preferredLanguage","locale","enableNavigationInterceptors","resourceUrlWhitelist","run","$rootScope","$transitions","$log","Auth","amMoment","$state","editableOptions","changeLocale","moment_locale","theme","onSuccess","trans","prevState","$from","prevParams","fromEntries","k","path","router","stateService","href","$to","absolute","trackPage","backPrevLocation","event","preventDefault","stopPropagation","go","summernoteOpts","lang","summernote_locale","height","toolbar","styleTags","maximumImageFileSize","onStart","currentUser","then","need_completion","catch","intArray","start","end","arr","constant","timezone","require","isUndefinedOrNull","val","isUndefined","component","react2angular","Switch","BooleanMappingForm","register","fieldMappingId","t","useTranslation","React","className","FormInput","rules","required","label","DataMappingForm","control","providerType","setValue","currentFormValues","useState","dataMapping","setDataMapping","useImmer","isOpenTypeMappingModal","updateIsOpenTypeMappingModal","useFieldArray","fields","remove","output","useWatch","buildFieldOptions","formData","getModel","field","_formData$index","local_model","undefined","getField","_formData$index2","local_field","getDataType","model","_dataMapping$model","find","f","_dataMapping$model$fi","toggleTypeMappingModal","draft","itemStatus","_currentFormValues$in","useEffect","FabButton","icon","onClick","type","FormSelect","options","Oauth2DataMappingForm","OpenidConnectDataMappingForm","disabled","tooltip","removeMapping","TypeMappingModal","isOpen","toggleModal","DatabaseForm","DateMappingForm","IntegerMappingForm","placeholder","HtmlTranslate","trKey","Oauth2Form","endpointRegex","urlRegex","FabOutputCopy","text","window","location","origin","pattern","standardConfiguration","api_field","transformation","true_value","false_value","format","defaultValue","_currentFormValues$in2","configuration","host","SsoClient","openIdConfiguration","ssoClient","OpenidConnectForm","formState","discoveryAvailable","setDiscoveryAvailable","scopesAvailable","setScopesAvailable","selectKey","setSelectKey","checkForDiscoveryEndpoint","target","issuer","scopes_supported","onChange","debounce","warning","valueDefault","FormMultiSelect","loadOptions","inputValue","callback","scope","unlisted","difference","concat","creatable","clearable","discovery","client_auth_method","METHODS","DatabaseProvider","OAuth2Provider","OpenIdConnectProvider","ProviderForm","action","provider","onError","useForm","defaultValues","handleSubmit","providableType","setProvidableType","strategy_name","setStrategyName","updateStrategyName","useCallback","_debounce","onSubmit","method","providable_attributes","auth_provider_mappings_attributes","Loader","StringMappingForm","FabModal","title","confirmButton","onConfirm","TYPE","AccordionItem","children","setState","CaretDown","weight","ErrorBoundary","props","_this","hasError","getDerivedStateFromError","componentDidCatch","errorInfo","console","render","this","FabAlert","level","form","defaultProps","FabInput","addOn","addOnClassName","readOnly","maxLength","step","min","max","setInputValue","debouncedOnChange","validity","ModalSize","Modal","width","closeButton","customHeader","customFooter","onClose","preventConfirm","onCreation","onConfirmSendFormId","handleClose","overlayClassName","onRequestClose","onCopy","copied","setCopied","navigator","_navigator","clipboard","_navigator$clipboard","writeText","setTimeout","FabPagination","pageCount","currentPage","selectPage","CaretDoubleLeft","CaretLeft","CaretRight","CaretDoubleRight","FabPanel","header","FabPopover","headerButton","FabStateLabel","background","split","dangerouslySetInnerHTML","__html","LabelledInput","htmlFor","loading","Suspense","fallback","FabTextEditor","ref","heading","bulletList","blockquote","limit","video","link","placeholderText","editorRef","useRef","useImperativeHandle","focus","commands","editor","useEditor","extensions","StarterKit","levels","Underline","Link","openOnClick","Placeholder","CharacterCount","Iframe","Image","HTMLAttributes","class","onUpdate","isEmpty","getHTML","setEditable","setContent","MenuBar","EditorContent","storage","characterCount","characters","WarningOctagon","forwardRef","Node","group","atom","addOptions","allowFullscreen","addAttributes","src","default","frameborder","allowfullscreen","parseHTML","tag","renderHTML","addCommands","setIframe","tr","dispatch","selection","node","_this2","replaceRangeWith","from","to","submenu","setSubmenu","resetUrl","url","setUrl","videoProvider","setVideoProvider","videoId","setVideoId","imageUrl","setImageUrl","useOnclickOutside","toggleSubmenu","view","previousUrl","getAttributes","setLink","closeLinkMenu","chain","extendMarkRange","unsetLink","toggleHeading","isActive","TextAa","toggleBulletList","ListBullets","toggleBlockquote","Quotes","toggleBold","TextBolder","toggleItalic","TextItalic","toggleUnderline","TextUnderline","LinkSimpleHorizontal","VideoCamera","evt","onKeyDown","keyCode","Trash","checked","CheckCircle","videoUrl","addIframe","setImage","CartButton","setCart","useCustomEventListener","order_items_attributes","StoreCart","userLogin","useCart","reloadCart","cartErrors","setCartErrors","noMemberError","setNoMemberError","paymentModal","setPaymentModal","setWithdrawalInstructions","removeProductFromCart","errors","getItemErrors","increaseOrDecreaseProductQuantity","direction","hasCartErrors","_","details","item_id","isPrivileged","cartIsEmpty","toggleProductOffer","alt","orderable_main_image_url","noImage","orderable_ref","orderable_slug","orderable_name","quantity_min","QUANTITY","PRICE","FormatLib","itemError","amount","changeProductQuantity","orderable_external_stock","CaretUp","OrderLib","uncheckedIcon","checkedIcon","handleDiameter","CouponInput","total","MemberSelect","onSelected","filter","all","defaultUser","COUNT","PaymentModal","afterSuccess","items","payment_method","PaymentMethod","operator","updateCart","CouponAPI","setMessages","setLoading","setError","setCoupon","setCode","handleChange","mgs","PERCENT","percent_off","AMOUNT","amount_off","CURRENCY","validity_per_user","err","trim","m","OrdersDashboard","orders","setOrders","setPageCount","setCurrentPage","totalCount","setTotalCount","total_pages","total_count","StoreListHeader","productsCount","selectOptions","onSelectOptionsChange","option","sort","OrderItem","CreditAPI","userResource","resource","CreditsPanel","reservableType","credits","setCredits","c","NAME","creditable","REMAINING","credit","hours","hours_used","USED","CreditsPanelWrapper","modules","setModules","ReservationsPanel","ReservationAPI","reservations","setReservations","updateDetails","showMore","setShowMore","reservable_type","reservationsByDate","r","slots_reservations_attributes","s","filterSlot","sr","moment","slot_attributes","start_at","isBefore","isAfter","noReservations","renderReservation","reservation","reservationId","reservable","slotReservation","end_at","futur","past","slice","ReservationsPanelWrapper","DocumentFilters","onFilterChange","referenceFilter","setReferenceFilter","customerFilter","setCustomerFilter","dateFilter","setDateFilter","reference","date","EventCard","count","cardType","formatDate","startDate","Date","start_date","endDate","end_date","getFullYear","getMonth","getDate","DATE","START","END","formatTime","all_day","event_image","slug","description","event_themes","age_range","_event$age_range","nb_free_places","nb_total_places","EventThemeAPI","EventThemes","themes","setThemes","Select","event_theme_ids","indexOf","selectedOptions","opt","isMulti","AbstractFormItem","onLabelClick","inLine","containerType","isDirty","setIsDirty","fieldError","setFieldError","isDisabled","setIsDisabled","_get","dirtyFields","classNames","FormChecklist","isChecked","values","includes","toggleCheckbox","rhfValues","rhfCallback","newValues","v","selectAll","unselectAll","Controller","FormFileUpload","defaultFile","onFileChange","onFileRemove","accept","setFile","hasFile","FileUploadLib","attachment_name","attachment_url","rel","FilePdf","_event$target","files","FormImageUpload","defaultImage","onFileIsMain","mainOption","hasImage","currentTarget","onerror","reader","FileReader","onload","result","readAsDataURL","addOnAction","nullable","valueAsDate","setValueAs","parseFloat","FormMultiFileUpload","addButtonLabel","Plus","FormMultiImageUpload","handleRemoveImage","handleSetMainImage","setNewImageValue","mainImageIndex","findIndex","valuesDefault","allOptions","setAllOptions","onChangeCb","rhfOnChange","getCurrentValues","formatCreateLabel","VALUE","AbstractSelect","AsyncCreatableSelect","AsyncSelect","CreatableSelect","selectProps","classNamePrefix","assign","defaultOptions","cacheOptions","onCreateOption","currentSelection","newValue","handleCreate","FormRichText","textEditorRef","isClearable","FormSwitch","Deferred","promise","resolveFn","rejectFn","reason","param","UnsavedFormAlert","uiRouter","showAlertModal","setShowAlertModal","setPromise","dirty","setDirty","submitStatus","isSubmitting","isSubmitted","isSubmitSuccessful","alertDirty","toggleAlertModal","userChoicePromise","alertOnDirtyForm","transitionService","globals","deregisters","onBefore","alertExit","returnValue","alertOnExit","addEventListener","removeEventListener","ChangeGroup","allowChange","groups","setGroups","changeRequested","setChangeRequested","setOperator","allowedUserChangeGoup","setAllowedUserChangeGoup","userLib","toggleChangeRequest","OPERATOR","_groups$find","UserLib","MachineCard","machine","onShowMachine","onReserveMachine","onLoginRequested","onEnrollRequested","canProposePacks","handleShowMachine","machine_image_attributes","style","backgroundImage","ReserveButton","machineId","onLoadingStart","onLoadingEnd","MachineCardWrapper","MachineForm","MachinesFilters","onStatusSelected","MachinesList","machines","setMachines","allMachines","setAllMachines","handleFilterByStatus","PendingTrainingModal","nextReservation","TIME","RequiredTrainingModal","Avatar","userName","avatar","MACHINE","TRAINING","trainings","setMachine","setUser","pendingTraining","setPendingTraining","trainingRequired","setTrainingRequired","proposePacks","setProposePacks","isPackOnlyForSubscription","setIsPackOnlyForSubscription","checkTraining","getMachine","current_user_is_trained","reduce","acc","checkPrepaidPack","current_user_next_training_reservation","current_user_has_packs","has_prepaid_packs_for_current_user","subscribed_plan","_machine$current_user","_machine$current_user2","ProposePacksModal","itemType","onDecline","ReserveButtonWrapper","TypeOnce","PaymentScheduleItemActions","paymentScheduleItem","onCardUpdateSuccess","displayOnceMap","show","showCancelSubscription","setShowCancelSubscription","showConfirmCashing","setShowConfirmCashing","showConfirmTransfer","setShowConfirmTransfer","showResolveAction","setShowResolveAction","showUpdateCard","setShowUpdateCard","showUpdatePaymentMean","setShowUpdatePaymentMean","isConfirmActionDisabled","setConfirmActionDisabled","cancelSubscriptionButton","displayOnceStatus","SubscriptionCancel","toggleCancelSubscriptionModal","updateCardButton","CardUpdate","toggleUpdateCardModal","errorActions","UpdatePaymentMean","toggleUpdatePaymentMeanModal","updatePaymentMeanButton","toggleConfirmCashingModal","toggleConfirmTransferModal","toggleResolveActionModal","PaymentScheduleItemState","invoice_id","confirmTransferButton","confirmCheckButton","due_date","StripeConfirmModal","UpdateCardModal","schedule","UpdatePaymentMeanModal","PaymentScheduleSummary","modal","setModal","hasEqualDeadlines","prices","every","p","toggleFullScheduleModal","NUMBER","String","PaymentSchedulesDashboard","paymentSchedules","setPaymentSchedules","pageNumber","setPageNumber","handleRefreshList","hasSchedules","PaymentSchedulesTable","showCustomer","refreshList","max_length","PaymentSchedulesList","showExpanded","setShowExpanded","gateway","setGateway","isExpanded","statusDisplay","refreshSchedulesTable","renderPaymentSchedulesTable","colSpan","prev","expandCollapseIcon","display","formatState","StripeElements","PaymentSchedulesTableWrapper","SelectSchedule","selected","paymentMean","setPaymentMean","pm","AbstractPaymentModal","logoFooter","GatewayForm","formId","formClassName","preventCgv","preventScheduleInfo","modalSize","wallet","setWallet","setPrice","remainingPrice","setRemainingPrice","ready","setReady","setErrors","submitState","setSubmitState","tos","setTos","cgv","setCgv","mounted","CustomAssetName","asset","toUpperCase","computePriceWithCoupon","price_without_coupon","WalletLib","computeRemainingPrice","terms","hasCgv","handleFormSuccess","trackPurchase","WalletInfo","DEADLINES","GATEWAY","custom_asset_file_attributes","CardPaymentModal","StripeModal","PayzenModal","CardPaymentModalWrapper","ALL_SCHEDULE_METHODS","LocalPaymentForm","setMethod","onlinePaymentModal","setOnlinePaymentModal","toggleOnlinePaymentModal","methodToOption","_context","isFreeOfCharge","ITEM","LocalPaymentModal","LocalPaymentModalWrapper","PayzenCardUpdateModal","canSubmitUpdateCard","setCanSubmitUpdateCard","payzenLogo","mastercardLogo","visaLogo","PayzenForm","PayZenKR","loadingClass","setLoadingClass","createToken","formToken","KRGlue","KR","setFormConfig","addForm","showForm","onFormReady","handleFormReady","onFormCreated","handleFormCreated","onPaid","hashAlgorithm","rawClientAnswer","transaction","clientAnswer","transactions","orderStatus","confirmation","removeForms","errorMessage","detailedErrorMessage","orderDetails","uuid","handleError","answer","validateForm","submit","enableMapSet","payzenSettings","restApiSettings","pendingKeysValidation","PayzenKeysForm","onValidKeys","onInvalidKeys","updateSettings","restApiAddOn","setRestApiAddOn","restApiAddOnClassName","setRestApiAddOnClassName","publicKeyAddOn","setPublicKeyAddOn","publicKeyAddOnClassName","setPublicKeyAddOnClassName","payZenKeys","validClassName","testRestApi","valid","success","setApiKey","hasApiAddOn","PayzenKeysFormWrapper","PAYZEN_HIDDEN","payZenPublicSettings","payZenPrivateSettings","payZenOtherSettings","payZenSettings","icons","PayzenSettings","onEditKeys","onCurrencyUpdateSuccess","pzPassword","pzHmac","Gateway","SelectGatewayModal","preventConfirmGateway","setPreventConfirmGateway","selectedGateway","setSelectedGateway","gatewayConfig","setGatewayConfig","handleInvalidKeys","errorResults","Stripe","PayZen","StripeKeysForm","publicKey","secretKey","newMap","StripeCardUpdateModal","stripeLogo","StripeCardUpdate","stripe","useStripe","elements","useElements","cardElement","getElement","CardElement","createPaymentMethod","card","paymentMethod","intent","confirmCardSetup","client_secret","mandate_data","customer_acceptance","online","ip_address","user_agent","userAgent","updated","base","fontSize","color","invalid","iconColor","hidePostalCode","setItem","isPending","setIsPending","togglePending","StripeConfirm","clientSecret","onResponse","setMessage","setType","confirmCardPayment","memo","setStripe","loadStripe","Elements","displayName","StripeForm","handleServerConfirmation","statusText","handleCardAction","payment_intent_client_secret","paymentIntent","Authorization","createPIIToken","piiId","stripeClient","post","listAllCharges","setPublicKey","setSecretKey","secretKeyAddOn","setSecretKeyAddOn","secretKeyAddOnClassName","setSecretKeyAddOnClassName","stripeKeys","StripeKeysFormWrapper","UpdateCardModalWrapper","wLib","isOperatorAndClient","hasRemainingPrice","getPriceItem","payment_schedule","DeletePlanCategory","deletionModal","setDeletionModal","toggleDeletionModal","DeletePlanCategoryWrapper","ManagePlanCategory","setIsOpen","tempCategory","setTempCategory","toggleBtn","PlanCategoryForm","ManagePlanCategoryWrapper","PlanCategoriesList","categories","setCategories","refreshCategories","handleSuccess","PlanCategoryFormWrapper","PlanCard","monthly","plan","subscribedPlanId","onSelectPlan","isSelected","canSelectPlan","duration","interval_count","interval","humanize","hasSubscribedToThisPlan","canBeScheduled","monthly_payment","handleSelectPlan","base_name","asMonths","plan_file_url","PlanCardWrapper","PlansFilter","onGroupSelected","onDurationSelected","setDurations","g","_durations$option$val","plans_ids","d","unshift","PlansList","onPlanSelection","onLoginRequest","plans","setPlans","planCategories","setPlanCategories","selectedPlan","setSelectedPlan","groupFilter","setGroupFilter","plansFilter","setPlansFilter","groupsData","sortPlans","groupBy","criteria","grouped","criteriaId","enabled","Number","byGroup","plansByGroup","isSelectedPlan","comparePlans","plan1","plan2","ui_weight","compareCategories","category1","category2","isNaN","categoryObject1","handlePlanSelection","filterPlan","renderPlansByCategory","plansByCategory","findCategory","categoryPlans","isShown","renderPlans","plansIds","groupName","UserPackAPI","PacksSummary","refresh","packs","setPacks","userPacks","setUserPacks","threshold","setThreshold","packsModal","setPacksModal","getUserPacksData","priceable_type","priceable_id","totalUsed","up","minutes_used","curr","totalAvailable","prepaid_pack","minutes","totalHours","togglePacksModal","HOURS","PacksSummaryWrapper","plan_id","togglePaymentModal","handleBuyPack","renderPack","normalPrice","hourlyPriceToTotal","DURATION","validity_interval","period","validity_count","PERIODS","formatValidity","EditablePrice","onSave","edit","setEdit","tempPrice","setTempPrice","toggleEdit","intl_currency","newPrice","ConfigurePacksButton","packsData","priceableId","priceableType","showList","setShowList","CreatePack","EditPack","DeletePack","PackForm","newPack","DeletePackWrapper","packData","setPackData","MachinesPricing","updatePrices","examplePrice","hourlyRate","filterPacksBy","handleUpdatePrice","updatePrice","RATE","ALL_INTERVALS","updatePackData","intervalToOption","parseInt","ConfigureExtendedPricesButton","extendedPrices","setExtendedPrices","CreateExtendedPrice","extendedPrice","EditExtendedPrice","DeleteExtendedPrice","ExtendedPriceForm","newExtendedPrice","extendedPriceData","setExtendedPriceData","updateExtendedPriceData","SpaceAPI","SpacesPricing","spaces","setSpaces","findExtendedPricesBy","spaceId","space","CompletionHeaderInfo","activeProvider","setSettings","titleSettings","GENDER","ssoEmail","hasDuplicate","ProfileFormOption","UserProfileForm","showGroupInput","showTermsAndConditionsInput","EMAIL","PROVIDER","open","link_to_sso_profile","link_to_sso_connect","ProfileCustomFieldsList","profileCustomFields","setProfileCustomFields","profileCustomFieldToEdit","setProfileCustomFieldToEdit","pData","saveProfileCustomField","newFields","handleSwitchChanged","_profileCustomField","onChangeProfileCustomFieldLabel","saveProfileCustomFieldLabel","cancelEditProfileCustomFieldLabel","actived","BooleanSetting","hideSave","onBeforeSave","updateSetting","SETTING","log","_value","CheckListSetting","availableOptions","regex","RegExp","UserValidationSetting","userValidationRequired","setUserValidationRequired","userValidationRequiredListDefault","userValidationRequiredList","setUserValidationRequiredList","userValidationRequiredOptions","l","EditSocials","networks","initSelectedNetworks","el","selectedNetworks","setSelectedNetworks","selectNetwork","network","useReducer","payload","userNetworks","viewBox","Icons","FabSocials","settingsList","supportedNetworks","fabNetworks","setFabNetworks","updatedNetworks","ManageProductCategory","productCategories","PencilSimple","ProductCategoryForm","ProductCategoriesItem","offset","collapsed","handleCollapse","useSortable","attributes","listeners","setNodeRef","transform","transition","isDragging","CSS","ArrowElbowDownRight","ArrowLeft","hidden","products_count","DotsSixVertical","ProductCategoriesTree","onDnd","categoriesList","setCategoriesList","initActiveData","activeData","setActiveData","extractedChildren","setExtractedChildren","setCollapsed","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","coordinateGetter","sortableKeyboardCoordinates","getCategory","getChildren","displayedChildren","parent_id","getPreviousAdopter","overId","reversedList","reverse","dropIndex","_reversedList$find","getStatus","hideChildren","parentId","parentIndex","shortenList","splice","showChildren","currentList","insertIndex","_extractedChildren$pa","copy","DndContext","collisionDetection","closestCenter","modifiers","restrictToWindowEdges","onDragStart","activeIndex","sortable","onDragMove","delta","over","activeStatus","Math","ceil","x","onDragEnd","newOrder","currentIdsOrder","newIndex","droppedItem","overStatus","newPosition","arrayMove","sortedId","adopter","siblingsLength","newIdsOrder","lastChildIndex","pop","parent","onDragCancel","SortableContext","strategy","verticalListSortingStrategy","_activeData$category","ProductCategories","setProductCategories","activeCategory","watch","parents","_slug","slugify","lower","strict","unsubscribe","CATEGORY","CloneProductModal","sku","is_active","reset","handleClone","EditProduct","setProduct","ProductForm","ActiveFiltersTags","displayCategories","onRemoveCategory","onRemoveMachine","onRemoveKeyword","onRemoveStock","X","keywords","KEYWORD","stock_to","stock_from","stock_type","CategoriesFilter","onApplyFilters","currentFilters","openDefault","instantUpdate","openedAccordion","setOpenedAccordion","selectedCategories","setSelectedCategories","pc","currentCategory","KeywordFilter","keyword","setKeyword","handleKeywordTyping","MachinesFilter","selectedMachines","setSelectedMachines","currentMachine","StockFilter","getValues","NewProduct","stock","internal","external","low_stock_alert","machine_ids","OrderActions","currentAction","setCurrentAction","modalIsOpen","setModalIsOpen","readyNote","setReadyNote","customStyles","backgroundColor","indicatorSeparator","buildOptions","actions","styles","created_at","PlusCircle","updated_at","paid_total","showOrder","initFilters","states","Orders","setFilters","accordion","setAccordion","filtersPanel","setFiltersPanel","setReference","setStates","period_from","periodFrom","setPeriodFrom","period_to","periodTo","setPeriodTo","statusOptions","applyFilters","filterType","removeFilter","handlePeriodChanged","handleAccordion","CaretDoubleUp","some","handleSelectStatus","noHeader","selectValue","_filters$states","isActivePrice","setIsActivePrice","stockTab","setStockTab","openCloneModal","setOpenCloneModal","saving","setSaving","buildSelectOptions","buildChecklistOptions","saveProduct","toggleCloneModal","ProductStockForm","ProductItem","onEdit","onDelete","stockColor","stockType","low_stock_threshold","att","thumb_attachment_url","ProductPrice","editProduct","renderPrice","activeThreshold","setActiveThreshold","setStockMovements","border","lastStockUpdate","_currentFormValues$st","_currentFormValues$st2","newMovement","stockMovementAllReasons","eventsOptionsChange","stocksOptionsChange","_stockMovements$data","movement","remaining_stock","ProductStockModal","setMovement","toggleMovementType","stockMovementInReasons","stockMovementOutReasons","Products","productsList","setProductList","initialResources","resources","setResources","machinesModule","setMachinesModule","setProductsCount","fetchProducts","transitionTo","deleteProduct","handleCategoriesFilterUpdate","handleMachinesFilterUpdate","handleKeywordFilterUpdate","handleStockFilterUpdate","initialFilters","switchChecked","onSwitch","ShowOrder","setOrder","paymentVerbose","itemOrderableUrl","payment_date","wallet_amount","switchLabel","StoreProductItem","onSuccessAddProductToCart","statusColor","showProduct","productImage","productImageUrl","StoreProduct","productSlug","showImage","setShowImage","toCartCount","setToCartCount","displayToggle","setDisplayToggle","collapseDescription","setCollapseDescription","descContainer","offsetHeight","scrollHeight","setCount","REF","maxHeight","Minus","typeCount","SettingLib","objectToBulkMap","bulkMapToObject","StoreSettings","storeSettings","storeInitialFilters","storeInitialResources","Store","products","setProducts","categoriesTree","setCategoriesTree","formatCategories","tree","filterCategory","Set","applyMachineFilters","applyKeywordFilter","addToCart","store","selectedCategory","ch","sum","is_available","FreeExtendModal","customerId","expired_at","expirationDate","setExpirationDate","freeDays","setFreeDays","getTime","free_extension","toISOString","substr","formatDefaultDate","parse","RenewModal","localPaymentModal","setLocalPaymentModal","scheduleRequired","setScheduleRequired","add","toDate","formatDateTime","toggleLocalPaymentModal","SubscribeModal","selectedSchedule","setSelectedSchedule","allPlans","setAllPlans","USER","main_object","DeleteSupportingDocumentsTypeModal","handleDeleteProofOfIdentityType","SupportingDocumentsFiles","maxProofOfIdentityFileSizeMb","maxProofOfIdentityFileSize","toFixed","supportingDocumentsTypes","setSupportingDocumentsTypes","supportingDocumentsFiles","setSupportingDocumentsFiles","setFiles","tData","fData","getSupportingDocumentsFileByType","supportingDocumentsTypeId","proof_of_identity_type_id","documentId","_errors","onFileUpload","FormData","SIZE","documentType","attachment","SupportingDocumentsRefusalForm","proofOfIdentityTypes","setValues","typeId","rows","ProofOfIdentityRefusalAPI","proofOfIdentityRefusal","proof_of_identity_refusal","SupportingDocumentsRefusalModal","operator_id","proof_of_identity_type_ids","setData","handleSaveRefusal","SupportingDocumentsTypeForm","groupIds","group_ids","SupportingDocumentsTypeModal","handleSaveType","SupportingDocumentsTypesList","supportingDocumentsType","setSupportingDocumentsType","supportingDocumentsTypeOrder","setSupportingDocumentsTypeOrder","destroyModalIsOpen","setDestroyModalIsOpen","setSupportingDocumentsTypeId","setTypeOrder","orderBy","orderTypes","types","getGroupsNames","orderClassName","poit","SupportingDocumentsValidation","documentsTypes","setDocumentsTypes","documentsFiles","setDocumentsFiles","getFileByType","validated_at","SupportingDocumentsValidationWrapper","AvatarInput","currentAvatar","setAvatar","hasAvatar","noAvatar","ChangePassword","currentFormPassword","isModalOpen","setIsModalOpen","isConfirmedPassword","setIsConfirmedPassword","setIsPrivileged","passwordRegister","toggleConfirmationModal","PasswordInput","ChangeRoleModal","OLD","NEW","GenderInput","setOption","loadMembers","u","socialMappings","UserFieldMapping","is_allow_contact","is_allow_newsletter","TrainingAPI","TagAPI","showTrainingsInput","showTagsInput","_isNil","invoicing_profile_attributes","organization_attributes","isOrganization","setIsOrganization","isLocalDatabaseProvider","setIsLocalDatabaseProvider","termsAndConditions","setTermsAndConditions","requiredFieldsSettings","setRequiredFieldsSettings","cgu","userProfileCustomFields","_user$invoicing_profi","user_profile_custom_fields_attributes","_user$invoicing_profi2","uf","profile_custom_field_id","invoicing_profile_id","mapped_from_sso","_user$mapped_from_sso","getUserSocialNetworks","shouldDirty","shouldTouch","_output$profile_attri","_output$profile_attri2","_output$profile_attri3","first_name","_output$profile_attri4","last_name","FEILD","POLICY_URL","UserValidation","_member","controller","$scope","Setting","CustomAsset","aboutTitle","aboutBody","aboutContacts","privacyPolicy","Abuse","abusesPromise","dialogs","growl","_t","abuses","confirmProcess","abuseId","object","msg","a","signaled_type","authProvidersPromise","providers","getType","getState","destroyProvider","elem","providerPromise","$promise","$resolved","$uibModal","AuthService","Availability","SlotsReservation","Export","bookingWindowStart","bookingWindowEnd","machinesPromise","plansPromise","groupsPromise","settingsPromise","uiCalendarConfig","CalendarConfig","Member","uiTourService","SLOT_MULTIPLE","slot_duration","availability","availabilityDom","eventsInCalendar","events_in_calendar","eventSources","textColor","calendarConfig","slotDuration","snapDuration","selectable","selectHelper","minTime","maxTime","select","jsEvent","calendarSelectCb","eventClick","calendarEventClickCb","eventRender","element","eventRenderCb","viewRender","viewRenderCb","isLoading","loadingCb","cancelBooking","slot_reservation","getGender","RESERVATION","resa","canceled_at","removeMachine","m_id","machines_attributes","calendars","calendar","fullCalendar","removePlan","PLAN","drop","plan_ids","plans_attributes","availabilityPlans","alertExport","exists","toggleLockReservations","locked","lock","prevent","removeSlot","modalInstance","animation","templateUrl","availabilityPromise","availabilities","setupCalendarTour","uitour","getTourByName","createStep","selector","stepId","placement","orphan","popupClass","isAuthorized","on","Status","ON","tours","completeTour","tour","feature_tour_display","statistic_profile_attributes","gender","plansClassifiedByGroup","_plans","groupObj","tz","subtract","startOf","trunc","valueOf","startAvailabilityCreation","slots","isInteger","upper","backdrop","keyboard","Machine","trainingsPromise","Training","spacesPromise","Space","tagsPromise","Tag","Plan","Group","slotDurationPromise","borderColor","tag_ids","tags","$","removeClass","classList","closest","hasClass","available_type","prepend","html","addClass","$uibModalInstance","$sce","isOnlySubscriptions","selectedPlans","selectedPlansBinding","selectedMachinesBinding","selectedTraining","selectedSpace","endDateReadOnly","timepickers","hstep","mstep","$root","is_recurrent","nb_periods","occurrences","reservableName","tagsName","plansName","slots_nb","toggleSelection","toggleAll","toggleSelectPlan","toggleAllPlans","ok","training_ids","space_ids","save","next","validateType","validateSelection","validateTimes","validateRecurrence","previous","dismiss","setNbTotalPlaces","default_places","isTypeDivided","isSameOrBefore","computeOccurrences","computeNames","diff","endOf","occur_end","localizedList","attr","trustAsHtml","$watch","oldValue","startSlot","slotsCurrentRange","upperSlots","endSlot","initialize","isRecurrent","deleteMode","mode","deleted","TOTAL","iCalendars","ICalendar","newCalendar","text_color","text_hidden","i_calendar","calendarStyle","idx","info","sync","VALIDITIES","Coupon","validities","datePicker","uibDateFormat","opened","minDate","startingDay","weekStartingDay","validityName","toggleDatePicker","$event","saveCoupon","couponPromise","updateCoupon","valid_until","EventsController","startOpened","endOpened","recurrenceEndOpened","submited","onSubmited","fileinputClass","addFile","event_files_attributes","deleteFile","toggleStartDatePicker","toggleEndDatePicker","toggleRecurrenceEnd","addPrice","removePrice","handleEventChange","Event","Category","EventTheme","AgeRange","PriceCategory","eventsPromise","categoriesPromise","themesPromise","ageRangesPromise","priceCategoriesPromise","paginateActive","events","inserted","ageRanges","priceCategories","eventsScope","tabs","loadMoreEvents","paginationCheck","saveElement","resp","removeElement","related_to","ELEMENT","addElement","cancelElement","rowform","$cancel","newPriceCategory","finally","p_cat","cat","editPriceCategory","price_category","removePriceCategory","changeScope","setupEventsTour","nextStep","lastEvents","nb_total_events","eventPromise","reservationsPromise","isCancelled","CSRF","setMetaTags","actionUrl","start_time","end_time","recurrence","category_id","recurrenceTypes","alerts","$transition$","initialDates","editMode","isShowEditModeModal","recurrence_events","editRecurrent","currentEvent","click","hasDateChanged","isSame","es","Statistics","X_AXIS_LABEL","Y_AXIS_LABEL","CHART_COLORS","preventRefresh","statistics","selectedIndex","selectedTab","ranking","sortCriterion","groupCriterion","datePickerStart","maxDate","utc","datePickerEnd","setActiveTab","tab","ca","refreshChart","hiddenTab","graph","es_type_key","validateDateChange","aggregations","chart_type","formatAggregations","datum","updateChart","formatRankingAggregations","xAxisTickFormatFunction","y","d3","time","d3DateFormat","toLowerCase","aggs","type_key","subgroups","buckets","subgroup","cur_type","it_st","subtypes","cur_subtype","dataSource","area","intervals","typeKey","it","bucket","getRankingLabel","stableSort","subtype","additional_fields","data_type","stat_types","type_it","results","recursiveCb","queryElasticStats","prevResults","prevError","queryElasticRanking","esType","statType","searchType","body","buildElasticAggregationsQuery","groupKey","sortKey","buildElasticAggregationsRankingQuery","intervalBegin","intervalEnd","q","bool","must","range","gte","lte","date_histogram","min_doc_count","extended_bounds","utcOffset","term","top_events","top_hits","nv","addGraph","chart","models","stackedAreaChart","useInteractiveGuideline","lineChart","setTimeScale","xAxis","xScale","day","week","month","tickFormat","yAxis","axisLabel","discreteBarChart","showValues","prepareDataForBarChart","margin","left","right","noData","utils","windowResize","nvd3Axis","nvd3Scale","argsArray","scale","oldTicks","axis","ticks","apply","newData","getValue","keys_order","b","val_a","val_b","stats","groupFiltering","filterDisabled","cancelGroup","addGroup","saveGroup","removeGroup","toggleDisableGroup","users","USERS","STATUS","Invoice","AccountingPeriod","invoices","closedPeriods","$filter","stripeSecretKey","Payment","onlinePaymentStatus","STRIPE_SK_HIDDEN","invoicing_module","searchInvoice","noMoreResults","orderInvoice","prefix","invoice_prefix","nextId","scheduleFile","payment_schedule_prefix","invoice","logo","help","number","VAT","rate","multiVAT","rateMachine","rateSpace","rateTraining","rateEvent","rateSubscription","rateProduct","editTemplateUrl","historyTemplateUrl","legals","journalCode","accounting_journal_code","cardClientCode","accounting_card_client_code","cardClientLabel","accounting_card_client_label","walletClientCode","accounting_wallet_client_code","walletClientLabel","accounting_wallet_client_label","otherClientCode","accounting_other_client_code","otherClientLabel","accounting_other_client_label","walletCode","accounting_wallet_code","walletLabel","accounting_wallet_label","vatCode","accounting_VAT_code","vatLabel","accounting_VAT_label","subscriptionCode","accounting_subscription_code","subscriptionLabel","accounting_subscription_label","machineCode","accounting_Machine_code","machineLabel","accounting_Machine_label","trainingCode","accounting_Training_code","trainingLabel","accounting_Training_label","eventCode","accounting_Event_code","eventLabel","accounting_Event_label","spaceCode","accounting_Space_code","spaceLabel","accounting_Space_label","packCode","accounting_Pack_code","packLabel","accounting_Pack_label","productCode","accounting_Product_code","productLabel","accounting_Product_label","errorCode","accounting_Error_code","errorLabel","accounting_Error_label","allSettings","inOneWeek","inOneWeekAndOneHour","openSelectGatewayModal","getMachineExampleRate","setOrderInvoice","resetSearchInvoice","invoiceSearch","generateAvoirForInvoice","lastClosingEnd","avoir","has_avoir","mkReference","sample","string","padWithZeros","p1","mkNumber","openEditReference","openEditCode","codeModel","openEditInvoiceNb","openEditVAT","rateHistory","history","activeHistory","enableVATChanged","$apply","editMultiVAT","editMultiVATModalInstance","showMultiRateHistory","rateType","rateValue","isFinite","openEditPrefix","openEditSchedulePrefix","textEditEnd","parsed","parseHtml","legalsEditEnd","handleFilterChange","searchTimeout","clearTimeout","showNextInvoices","closeAnAccountingPeriod","periods","toggleExportModal","isDateClosed","isBetween","operatorName","selectPaymentGateway","onlinePaymentModule","gatewayHandlers","toggleSelectGatewayModal","resetPromiseHandlers","onGatewayModalSuccess","updatedSettings","payment_gateway","stripe_public_key","online_payment_module","onGatewayModalError","alertPayZenCurrencyUpdated","currency","setupInvoicesTour","order_by","maxInvoices","invoice_legals","invoice_text","invoice_reference","filetype","filename","base64","invoice_logo","filesize","$on","partial","subscription_to_expire","invoice_items_ids","last_end_date","avoirModes","walletModule","subscriptionExpireOptions","openDatePicker","itemId","avoir_item_id","online_payment","$window","YESTERDAY","h","ms","LAST_CLOSING","MAX_END","invoiceErrorRE","accountingPeriods","pendingCreation","accounting_period","downloadArchive","SETTINGS","acd","encoding","separator","dateFormat","labelMaxLength","decimalSeparator","exportInvoicesAtZero","columns","vat","csrfToken","exportTarget","software","firstInvoice","statusQry","mkQuery","picker","fillSettings","extension","date_format","label_max_length","decimal_separator","export_invoices_at_zero","first","MembersController","subscription_date_opened","openSubscriptionDatePicker","membersPromise","adminsPromise","partnersPromise","managersPromise","Admin","User","$location","members","searchText","noMore","memberFilter","memberFilters","admins","adminSysId","enableUserValidationRequired","user_validation_required","displayUsername","show_username_in_admin_list","orderAdmin","partners","orderPartner","managers","orderManager","defaultActiveTab","sub","setOrderMember","resetSearchMember","memberSearch","setOrderAdmin","setOrderPartner","setOrderManager","openPartnerNewModal","partner","deleteMember","memberId","findItemIdxById","destroyAdmin","admin","destroyPartner","destroyManager","manager","showNextMembers","updateTextSearch","updateMemberFilter","setupMembersTour","maxMembers","Subscription","memberPromise","walletPromise","transactionsPromise","activeProviderPromise","Wallet","ProofOfIdentityType","change","phoneRequired","phone_required","addressRequired","address_required","nameToDisplay","isOpenFreeExtendModal","isOpenRenewModal","isOpenSubscribeModal","isOpenChangeRoleModal","changeUserRole","roles","notAnOption","_res","toggleFreeExtendModal","toggleRenewModal","toggleSubscribeModal","toggleChangeRoleModal","onExtendSuccess","newExpirationDate","onSubscribeSuccess","newSubscription","onValidateMemberSuccess","_user","birthday","onUserSuccess","createWalletCreditModal","generate_avoir","avoir_date","avoir_description","_wallet","filterDisabledPlans","hasProofOfIdentityTypes","plan_interval","toggleOrganization","organization","onImportResult","Import","importItem","import","saveAdmin","saveManager","clientsPromise","OpenAPIClient","clients","clientFormVisible","createClient","cancelEdit","clientOriginalName","saveClient","open_api_client","clientResp","editClient","deleteClient","resetToken","setupOpenAPITour","backOrdersList","PlanController","translateLabel","prop","group_pricing","limitDescriptionSize","alert","training","intervalCount","is_rolling","partnerId","partnerContact","plan_category_id","partnerIsValid","toggleMonthlyPayment","toggle","toggleIsRolling","afterSubmit","property","planPromise","allGroups","selectedGroup","copyPricesFromPlan","parentPlan","parentPrice","childKey","childPrice","humanReadablePlanName","short","machine_id","getSpace","space_id","TrainingsPricing","Credit","Pricing","Price","trainingsPricingsPromise","machineCreditsPromise","trainingCreditsPromise","couponsPromise","spacesPricesPromise","spacesCreditsPromise","trainingsPricings","enabledPlans","enabledGroups","machineCredits","trainingCredits","trainingCreditsGroups","enabledMachines","coupons","couponsPage","enabledSpaces","spaceCredits","spacesPrices","orderPlans","isopen","planFiltering","couponStatus","findTrainingsPricing","trainingId","trainingsPricing","training_id","updateTrainingsPricing","trainings_pricing","getPlanFromId","getGroupFromId","showTrainings","isArray","saveTrainingCredits","newdata","planId","training_credit_nb","training_credits","noop","original","oldTrainingId","tc","findTrainingCredit","$delete","newTrainingId","creditable_id","creditable_type","newTc","getTrainingFromId","cancelTrainingCredit","addMachineCredit","showCreditableName","getCreditable","saveMachineCredit","mc","cancelMachineCredit","removeMachineCredit","addSpaceCredit","saveSpaceCredit","sc","cancelSpaceCredit","removeSpaceCredit","getPlanCategory","setOrderPlans","findPriceBy","deletePlan","deleteCoupon","sendCouponToUser","ctrl","send","loadMore","updateCouponFilter","setupPricingTour","groupCreditsByPlan","creditsMap","Component","Licence","Theme","componentsPromise","licencesPromise","components","licences","saveComponent","removeComponent","addComponent","cancelComponent","saveTheme","removeTheme","addTheme","cancelTheme","saveLicence","removeLicence","addLicence","cancelLicence","onTestFileComplete","removeInitialDot","setupProjectElementsTour","privacyDraftsPromise","cgvFile","cguFile","logoFile","logoBlackFile","faviconFile","profileImageFile","timepicker","logoBlack","favicon","profileImage","methods","loader","privacyDraftsHistory","aboutTitleSetting","about_title","aboutBodySetting","about_body","privacyDpoSetting","privacy_dpo","aboutContactsSetting","about_contacts","homeBlogpostSetting","home_blogpost","homeContent","home_content","homeCss","home_css","machineExplicationsAlert","machine_explications_alert","trainingExplicationsAlert","training_explications_alert","trainingInformationMessage","training_information_message","subscriptionExplicationsAlert","subscription_explications_alert","eventExplicationsAlert","event_explications_alert","spaceExplicationsAlert","space_explications_alert","windowStart","booking_window_start","windowEnd","booking_window_end","mainColorSetting","main_color","secondColorSetting","secondary_color","nameGenre","name_genre","customLogo","customLogoBlack","customFavicon","version","bodyTemp","privacy_body","summernoteOptsHomePage","nugget","codeMirrorEditor","codemirrorOpts","matchBrackets","lineNumbers","advancedSettings","savePrivacyPolicy","saveCb","orderedHistory","last","addLoader","handlePolicyRevisionChange","analyticsModal","analyticsData","FabAnalytics","resetHomePage","codemirrorLoaded","availableOverlappingOptions","setupSettingsTour","sessionTours","publish","statisticsPromise","searchDate","scrollId","totalHits","agePicker","sumCA","averageAge","sumStat","customAggs","sorting","customFilter","criterion","exclude","customFieldName","toggleCustomDatePicker","buildCustomFiltersList","refreshStats","table","validateFilterChange","formatSex","sex","formatSubtype","getCustomValueInputType","toggleSorting","getUserNameFromId","showMoreResults","scroll","ES_SCROLL_TIME","_scroll_id","hits","exportToExcel","dates","custom","buildCustomFilterQuery","buildElasticDataQuery","setupStatisticsTour","total_ca","round","average_age","total_stat","custom_aggregations","buildElasticCustomCriterion","ageMin","ageMax","sortings","age","must_not","buildElasticSortCriteria","avg","crits","simple","export","exportStart","exportEnd","setRequest","exportData","$uiRouter","TABS","selectTab","currentTab","notify","reload","backProductsList","back","cancelTag","addTag","saveTag","removeTag","TrainingsController","onDisableToggled","public_page","enableMachinesModule","machines_module","trainingPromise","monitoring","groupedAvailabilities","accordions","trainingFiltering","showMachines","cancelTraining","showReservations","usersToValid","is_valid","removeTraining","formatMonth","formatDay","year","selectTrainingToMonitor","groupAvailabilities","now","isOpenFirst","setupTrainingsTour","$locale","$timeout","Session","Notification","$interval","Version","Help","$cookies","currencySymbol","NUMBER_FORMATS","CURRENCY_SYM","setCurrentUser","getNotifications","openLoginModal","toCheckNotifications","notifications","unread","signup","activeProviderType","profileCustomFieldsPromise","ProfileCustomField","proofOfIdentityTypesPromise","recaptchaSiteKey","recaptcha_site_key","recaptcha","closeAlert","orga","confirmation_required","_currentUser","editPassword","$http","reset_password_token","changePassword","put","toggleNavSize","$classes","$targets","toggler","$class","$target","$tmp","each","patt","cn","test","toggleClass","versionModal","up_to_date","KeyboardEvent","dispatchEvent","checkNotificationsIsInit","last_unread","lastCheck","totals","toDisplay","n","notification","polling","last_poll","toState","toParams","confirmationRequired","publicRegistrations","public_registrations","openSignup","openConfirmationNewModal","openResetPassword","trackLogin","sendReset","submitConfirmationNewForm","onPageVisible","onchange","evtMap","focusin","pageshow","blur","focusout","pagehide","visibility","onfocusin","onfocusout","onpageshow","onpagehide","onfocus","onblur","authorizedRoles","isAuthenticated","fablabName","fablab_name","linkName","link_name","$aside","iCalendarPromise","currentMachineEvent","isSelectAll","externals","filterAvailabilities","dispo","availabilitySourceUrl","toggleFilter","openFilterAside","event_id","defaultView","intervalStart","defaultDate","slotEventOverlap","toggleSlotEventOverlap","center","innerWidth","cookiesState","learnMoreUrl","declineCookies","expires","readCookie","acceptCookies","SocialNetworks","social","showAllLinks","hasUsedTrainingCredit","getTrainingName","filterNetworks","aboutPage","registrationEnabled","dropdownOnToggled","$translatePartialLoader","news","projects","twitter","setupHomeTour","setupWelcomeTour","insertDirectives","createElement","innerHTML","newsNode","parentNode","replaceChild","projectsNode","twitterNode","membersNode","eventsNode","outerHTML","ROLE","$parent","hasStep","storeHidden","store_hidden","navLinks","linkText","linkIcon","publicAgenda","Boolean","adminNavLinks","requested_attributes","$injector","userGroup","preventPassword","cookiesStatus","preventField","isAdminSys","getUserGroup","onGroupUpdateSuccess","cloneDeep","isAllowedChangingGroup","_$scope$user$subscrib","deleteUser","hasSsoFields","syncProfile","oldUser","resetCookies","mapping","notificationsRead","notificationsUnread","totalUnread","markAsRead","is_read","updatedNotif","markAllAsRead","addMoreNotifications","notif","subscriptionExplicationsPromise","helpers","member_id","paid","planSelectionTime","applied","updateMember","selectPlan","isUserValidationRequired","isUserValidated","isUserValidatedByType","isInFuture","dateTime","afterPayment","privacyBody","privacyDpo","registerAuthToken","merge","auth_token","duplicate","resendCode","send_code","hideNewAccountConfirmation","previous_provider","ProjectsController","Project","$document","Diacritics","allowedExtensions","summernoteOptsProject","totalSteps","project","project_steps_attributes","scrollTop","project_caos_attributes","addStep","step_nb","project_step_images_attributes","deleteStep","changeStepIndex","newIdx","autoCompleteName","nameLookup","asciiName","matchingMembers","addProjectStepImage","deleteProjectStepImage","saveButtonValue","paginationService","OpenlabProject","openLabActive","openlabAppId","openlab_app_id","openlab","projectsActive","searchOverWholeNetwork","openlab_default","$$search","component_id","theme_id","searchOverWholeNetworkChanged","resetFiltersAndTriggerSearch","projectsPagination","setUrlQueryParams","triggerSearch","updateUrlParam","Instance","loadMoreOpenlabCallback","per_page","projectsPromise","meta","normalizeProjectsAttrs","loadMoreCallback","showProject","app_id","project_url","reloadOnSearch","project_image","image_url","whole_network","projectPromise","project_users","full_name","author_id","user_ids","shortnamePromise","projectUrl","absUrl","disqusShortname","projectEditableBy","canEdit","projectDeletableBy","deleteProject","signalAbuse","signaler","signaled_id","abuse","shareOnFacebook","shareOnTwitter","encodeURIComponent","directive","elm","attrs","requiredCtrls","ngModelCtrl","fileinput","filetypeRegex","bsJasnyFileinput","$setViewValue","$setPristine","$setValidity","restrict","slot","slotSelectionTime","modePlans","onSlotAddedToCart","onSlotRemovedFromCart","onSlotStartToModify","onSlotModifySuccess","onSlotModifyCancel","onSlotModifyUnselect","onSlotCancelSuccess","reservableId","limitToOneSlot","amountTotal","totalNoCoupon","amountPaid","enableBookingMove","booking_move_enable","moveBookingDelay","booking_move_delay","enableBookingCancel","booking_cancel_enable","cancelBookingDelay","booking_cancel_delay","requested_schedule","onlinePayment","showModal","localPayment","validateSlot","validateTags","validateSameTimeReservations","isValid","updateCartPrice","reserved","isSlotsValid","showPlans","isSelectedUser","areFutureSlots","payCart","slotNotValid","slotNotValidError","slotValidations","paySlots","modifySlot","modifiable","slots_reservations_ids","slots_reservation","slot_id","placable","moved","newSlot","oldSlot","cancelModifySlot","removeSlotToPlace","tagMissmatch","togglePaymentSchedule","beforeApply","afterOnlinePaymentSuccess","afterLocalPaymentSuccess","onLocalPaymentError","onOnlinePaymentError","interTags","intersection","slotTags","userTags","sameTimeReservations","overlapping_categories","union","bookOverlappingSlotsPromise","slotSelectionChanged","plansGrouped","is_completed","resetCartState","_id","slotCanBeModified","slotCanBeCanceled","movable","cancelable","paidPlan","slotStart","can_modify","planSelectionChanged","mkReservation","mkSubscription","mkCartItems","setSlotsDetails","promo","reservable_id","offered","paymentDocument","getWalletByUser","amountToPay","getAmountToPay","hasOtherDeadlines","payOnline","payOnSite","bookSlotAtSameTime","$compile","$eval","compile","contents","priority","terminal","confirmationNeeded","clickAction","ngClick","bind","confirmationNeededIf","input","couponCode","validateCode","closeMessage","fileread","changeEvent","Holder","foreground","font","$pristine","$modelValue","currentValue","triggerHandler","$animate","$observe","parentForm","$$parentForm","$removeControl","userAvatar","avatarClass","upcomingEvents","isOneDayEvent","upcoming","homeBlogpost","lastProjects","activeSlide","lastPublished","twitterName","configProfile","profile","screenName","domId","maxTweets","enableLinks","showUser","showTime","showImages","showRetweet","showInteraction","twitterFetcher","fetch","lastMembers","lastSubscribed","transclude","postRender","isLoadingMembers","classes","faIcon","helperText","titleNew","descriptionNew","beforeAdd","option1","option2","option3","option4","option5","minLength","altText","faClass","URL_REGEXP","$validators","modelValue","viewValue","$isEmpty","ENDPOINT_REGEXP","endpoint","arrayLength","asc","selectedMachine","filteredElements","selectedMember","isDefined","filteredProject","selectedTheme","filteredProjects","theme_ids","selectedComponent","component_ids","authorId","Humanize","truncate","selectedScope","memoize","charAt","obj","isObject","defineProperty","__proto__","isMoment","boolean","Intl","NumberFormat","intl_locale","cartCookieName","getCartToken","Cookies","setCartToken","cartToken","cookieOptions","currentCartToken","_setCart","createCart","statistic_profile_id","operator_profile_id","emitCustomEvent","filtersToQuery","keepNullValues","entries","deviseModal","deferred","fn","arg","$templateCache","disqus_shortname","disqus_identifier","disqus_title","disqus_url","disqus_category_id","disqus_disable_mobile","readyToBind","template","isReady","DISQUS","identifier","dsq","async","getElementsByTagName","appendChild","onRemoveFile","DateTimeFormat","hour","minute","formatToParts","gtag","dataLayer","arguments","firstScript","insertBefore","page_location","page_title","transactionId","transaction_id","global","timeFormats","charWidth","decimals","compactInteger","decimalPart","unsignedNumberString","_i","_len","_length","signString","unsignedNumber","abs","numberLength","numberLengths","bigNumPrefixes","toExponential","decimalIndex","unsignedNumberCharacterArray","wholePartArray","decimalPartArray","wholePart","intcomma","intComma","formatNumber","fileSize","pluralize","precision","thousand","decimal","usePrecision","normalizePrecision","negative","mod","firstComma","commas","power","pow","ordinal","specialCase","times","overrides","smallTimes","_ref","singular","plural","str","ending","substring","truncatewords","truncateWords","truncatenumber","boundedNumber","num","bound","oxford","limitStr","extra","limitIndex","numItems","dictionary","joiner","defs","frequency","verb","len","pace","intervalMs","unit","relativePace","timeUnit","roundedPace","nl2br","replacement","br2nl","capitalize","downCaseTail","capitalizeAll","titlecase","titleCase","smallWords","internalCaps","splitOnWhiteSpaceRegex","splitOnHyphensRegex","doTitleCase","_string","hyphenated","firstOrLast","word","titleCasedArray","stringArray","i18n","ICU","HttpApi","initReactI18next","init","lng","fallbackLng","ns","defaultNS","backend","loadPath","interpolation","escapeValue","itemAmount","hasOfferedItem","offeredAmount","totalBeforeOfferedAmount","couponAmount","paidTotal","parsedValue","simpleParse","isBoolean","varArgs","TypeError","nextSource","nextKey","writable","configurable","floor","sortCategories","sortedCategories","stockMovementReasonTrKey","stockStatusTrKey","stockMovementType","absoluteStockMovement","categoriesSelectionTree","allCategories","operation","child","indexFiltersToIds","_filters$categories","_filters$machines","indexFiltersToRouterParams","categoryTypeUrl","_filters$machines2","_filters$categories2","readFiltersFromUrl","defaultFilters","subCategories","fetchInitialResources","onProductCategoryFetched","updateFilter","define","extend","summernote","Nugget","Insert_nugget","plugins","context","ui","langInfo","propertyName","buttonGroup","button","dropdown","li","setAttribute","invoke","firstChild","isUser","isNil","$stateProvider","$urlRouterProvider","$locationProvider","hashPrefix","otherwise","abstract","views","leftnav","cookies","main","sharedTranslations","Translations","modulesPromise","onEnter","spaces_module","plans_module","trainings_module","store_module","invoicing","wallet_module","public_agenda_module","statistics_module","publicTranslations","loggedTranslations","adminTranslations","machinePromise","spacesModule","spacePromise","trainingsModule","explicationAlertPromise","plansModule","publicAgendaModule","storeModule","raw","squash","dynamic","Reservation","PlanCategory","statisticsModule","factory","$translate","interpolations","instant","$resource","service","mapping_fields","fullcalendar_locale","firstDay","scrollTime","allDayDefault","buttonIcons","slotLabelFormat","agendaWeek","timeFormat","allDaySlot","editable","replaceWith","defaultDiacriticsRemovalap","letters","diacriticsMap","j","defaultOpts","isFunction","esFactory","TOURS","tourName","onTour","onGuide","walletAmount","user_validation_required_list","interceptor","perPage","_pageCount","resourceService","defaultQueryParams","functionName","hasNextPage","queryParams","_queryParams","dataPromise","transformRequest","toJson","payment_details","stateName","addPart","importAll","__range__","inclusive","ascending","age_range_id","monthNames","groupEvents","showEvent","filterEvents","eventsGroupByMonth","featuredEevent","monthOrder","onSingleDay","eventsGroupedByMonth","minBy","LocalPayment","reserve","nbPlaces","normal","nbReservePlaces","tickets","toReserve","totalSeats","deleteEvent","changeNbPlaces","remain","ticket","fullPriceRemains","priceRemain","computeEventAmount","cancelReserve","resetEventReserve","isShowReserveEventButton","reserveEvent","reserveSuccess","findReservationsAtSameTime","showReserveSlotSameTimeModal","getReservations","payEvent","validReserveEvent","attempting","cancelReservation","total_booked_seats","modifyReservation","eventToPlace","reservationCanModify","isAble","reservationCanCancel","getPriceCategoryConditions","conditions","nb_reserve_places","tickets_attributes","evt_px_cat","booked","event_price_category_id","bookedEvent","numberFilter","validButtonName","MachinesController","machine_files_attributes","showMachine","_reject","onEnrollRequest","reserveMachine","setupMachinesTour","FREE_SLOT_BORDER_COLOR","plansAreShown","selectionTime","selectedEvent","afterPaymentPromise","markSlotAsAdded","oldTitle","updateEvents","markSlotAsRemoved","slotCancelled","refreshCalendar","markSlotAsModifying","changeModifyMachineSlot","modifyMachineSlot","cancelModifyMachineSlot","doNotSubscribePlan","machine_credits","isShowPacks","realEvents","SpacesController","space_files_attributes","showSpace","reserveSpace","spaceFiltering","setupSpacesTour","deleteSpace","changeModifySpaceSlot","modifySpaceSlot","cancelModifySpaceSlot","reserveTraining","showTraining","changeModifyTrainingSlot","modifyTrainingSlot","cancelModifyTrainingSlot","___HTML_LOADER_REPLACEMENT_0___","___HTML_LOADER_GET_SOURCE_FROM_IMPORT___","_module_exports"],"sourceRoot":""}