From 925e109175f74ce98b759b4037ef25bd03c1ae2d Mon Sep 17 00:00:00 2001 From: Sylvain Date: Wed, 1 Jun 2022 15:24:25 +0200 Subject: [PATCH] all components must have their matching root class --- .eslintrc | 10 ++++++++-- .../src/javascript/components/base/labelled-input.tsx | 2 +- .../components/base/text-editor/fab-text-editor.tsx | 8 ++++---- .../javascript/components/base/text-editor/iframe.tsx | 2 +- .../components/base/text-editor/menu-bar.tsx | 4 ++-- .../src/javascript/components/event-themes.tsx | 2 +- .../src/javascript/components/form/form-input.tsx | 3 +-- .../javascript/components/machines/machines-list.tsx | 2 +- .../components/machines/required-training-modal.tsx | 2 +- .../payment-schedule/payment-schedules-dashboard.tsx | 2 +- .../payment-schedule/payment-schedules-list.tsx | 2 +- .../components/payment/card-payment-modal.tsx | 4 ++-- .../payment/local-payment/local-payment-form.tsx | 2 +- .../payment/payzen/payzen-card-update-modal.tsx | 2 +- .../components/payment/payzen/payzen-form.tsx | 2 +- .../components/payment/payzen/payzen-keys-form.tsx | 8 ++++---- .../components/payment/payzen/payzen-modal.tsx | 4 ++-- .../payment/stripe/stripe-card-update-modal.tsx | 2 +- .../components/payment/stripe/stripe-card-update.tsx | 2 +- .../components/payment/stripe/stripe-form.tsx | 2 +- .../src/javascript/components/plans/plans-list.tsx | 2 +- .../components/pricing/machines/machines-pricing.tsx | 2 +- .../pricing/spaces/configure-extended-price-button.tsx | 4 ++-- .../components/pricing/spaces/spaces-pricing.tsx | 6 +++--- .../profile-custom-fields-list.tsx | 2 +- .../delete-proof-of-identity-type-modal.tsx | 2 +- .../proof-of-identity/proof-of-identity-files.tsx | 2 +- .../src/javascript/components/select-gateway-modal.tsx | 8 ++++---- .../javascript/components/settings/boolean-setting.tsx | 4 ++-- .../components/settings/check-list-setting.tsx | 2 +- .../components/settings/user-validation-setting.tsx | 2 +- .../components/subscriptions/free-extend-modal.tsx | 2 +- .../components/subscriptions/renew-modal.tsx | 2 +- .../components/subscriptions/subscribe-modal.tsx | 2 +- app/frontend/src/stylesheets/application.scss | 5 +++-- .../src/stylesheets/modules/base/fab-text-editor.scss | 2 +- .../src/stylesheets/modules/base/labelled-input.scss | 2 +- ...e-card-modal.scss => payzen-card-update-modal.scss} | 2 +- ...e-card-modal.scss => stripe-card-update-modal.scss} | 2 +- .../src/stylesheets/modules/select-gateway-modal.scss | 2 +- lib/tasks/fablab/auth.rake | 4 ++-- package.json | 2 +- yarn.lock | 8 ++++---- 43 files changed, 72 insertions(+), 66 deletions(-) rename app/frontend/src/stylesheets/modules/payment/payzen/{payzen-update-card-modal.scss => payzen-card-update-modal.scss} (97%) rename app/frontend/src/stylesheets/modules/payment/stripe/{stripe-update-card-modal.scss => stripe-card-update-modal.scss} (97%) diff --git a/.eslintrc b/.eslintrc index ee2cd2df7..fcb11d3d4 100644 --- a/.eslintrc +++ b/.eslintrc @@ -7,8 +7,6 @@ "rules": { "semi": ["error", "always"], "no-use-before-define": "off", - "fabmanager/component-class-named-as-component": ["error", { "ignoreAbstractKeyword": true }], - "import/no-default-export": "error" }, "globals": { "Application": true, @@ -48,6 +46,14 @@ "react/prop-types": "off" } }, + { + "files": ["app/frontend/src/javascript/components/**/*.tsx"], + "rules": { + "import/no-default-export": "error", + "import/no-unused-modules": ["error", { "missingExports": true }], + "fabmanager/component-class-named-as-component": ["error", { "ignoreAbstractKeyword": true }] + } + }, { "files": ["app/frontend/src/javascript/models/**/*.ts"], "rules": { diff --git a/app/frontend/src/javascript/components/base/labelled-input.tsx b/app/frontend/src/javascript/components/base/labelled-input.tsx index 1bc0c4d02..93b1f4d8e 100644 --- a/app/frontend/src/javascript/components/base/labelled-input.tsx +++ b/app/frontend/src/javascript/components/base/labelled-input.tsx @@ -15,7 +15,7 @@ interface LabelledInputProps { */ export const LabelledInput: React.FC = ({ id, type, label, value, onChange }) => { return ( -
+
diff --git a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx index 37db695fc..1da81e7c6 100644 --- a/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/fab-text-editor.tsx @@ -66,7 +66,7 @@ export const FabTextEditor: React.ForwardRefRenderFunction +
-
+
{editor?.storage.characterCount.characters()} / {limit}
{error && -
+

{error}

diff --git a/app/frontend/src/javascript/components/base/text-editor/iframe.tsx b/app/frontend/src/javascript/components/base/text-editor/iframe.tsx index 8ef646560..78ad111a4 100644 --- a/app/frontend/src/javascript/components/base/text-editor/iframe.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/iframe.tsx @@ -29,7 +29,7 @@ export default Node.create({ return { allowFullscreen: true, HTMLAttributes: { - class: 'fab-textEditor-video' + class: 'fab-text-editor-video' } }; }, diff --git a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx index accf158da..b28c7e476 100644 --- a/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx +++ b/app/frontend/src/javascript/components/base/text-editor/menu-bar.tsx @@ -141,7 +141,7 @@ export const MenuBar: React.FC = ({ editor, paragraphTools, video, return ( <> -
+
{ paragraphTools && (<>
-
+
{ submenu === 'link' && (<>
{t('app.shared.text_editor.add_link')}
diff --git a/app/frontend/src/javascript/components/event-themes.tsx b/app/frontend/src/javascript/components/event-themes.tsx index d2fe17f4e..ffa4563ed 100644 --- a/app/frontend/src/javascript/components/event-themes.tsx +++ b/app/frontend/src/javascript/components/event-themes.tsx @@ -24,7 +24,7 @@ type selectOption = { value: number, label: string }; /** * This component shows a select input to edit the themes associated with the event */ -const EventThemes: React.FC = ({ event, onChange }) => { +export const EventThemes: React.FC = ({ event, onChange }) => { const { t } = useTranslation('shared'); const [themes, setThemes] = useState>([]); diff --git a/app/frontend/src/javascript/components/form/form-input.tsx b/app/frontend/src/javascript/components/form/form-input.tsx index 86ccd94f3..7d07b6950 100644 --- a/app/frontend/src/javascript/components/form/form-input.tsx +++ b/app/frontend/src/javascript/components/form/form-input.tsx @@ -44,14 +44,13 @@ export const FormInput = ({ id, re // Compose classnames from props const classNames = [ - 'form-input', `${className || ''}`, `${type === 'hidden' ? 'is-hidden' : ''}` ].join(' '); return ( {icon && {icon}} diff --git a/app/frontend/src/javascript/components/machines/machines-list.tsx b/app/frontend/src/javascript/components/machines/machines-list.tsx index caca4c710..9f54083cf 100644 --- a/app/frontend/src/javascript/components/machines/machines-list.tsx +++ b/app/frontend/src/javascript/components/machines/machines-list.tsx @@ -24,7 +24,7 @@ interface MachinesListProps { /** * This component shows a list of all machines and allows filtering on that list. */ -const MachinesList: React.FC = ({ onError, onSuccess, onShowMachine, onReserveMachine, onLoginRequested, onEnrollRequested, user, canProposePacks }) => { +export const MachinesList: React.FC = ({ onError, onSuccess, onShowMachine, onReserveMachine, onLoginRequested, onEnrollRequested, user, canProposePacks }) => { // shown machines const [machines, setMachines] = useState>(null); // we keep the full list of machines, for filtering diff --git a/app/frontend/src/javascript/components/machines/required-training-modal.tsx b/app/frontend/src/javascript/components/machines/required-training-modal.tsx index 4f36ee912..d1ab288fe 100644 --- a/app/frontend/src/javascript/components/machines/required-training-modal.tsx +++ b/app/frontend/src/javascript/components/machines/required-training-modal.tsx @@ -42,7 +42,7 @@ export const RequiredTrainingModal: React.FC = ({ is const header = (): ReactNode => { return (
- + {user?.name}
); diff --git a/app/frontend/src/javascript/components/payment-schedule/payment-schedules-dashboard.tsx b/app/frontend/src/javascript/components/payment-schedule/payment-schedules-dashboard.tsx index 19a3d6f08..35ab00f03 100644 --- a/app/frontend/src/javascript/components/payment-schedule/payment-schedules-dashboard.tsx +++ b/app/frontend/src/javascript/components/payment-schedule/payment-schedules-dashboard.tsx @@ -24,7 +24,7 @@ const PAGE_SIZE = 20; * This component shows a list of all payment schedules with their associated deadlines (aka. PaymentScheduleItem) and invoices * for the currentUser */ -const PaymentSchedulesDashboard: React.FC = ({ currentUser, onError, onCardUpdateSuccess }) => { +export const PaymentSchedulesDashboard: React.FC = ({ currentUser, onError, onCardUpdateSuccess }) => { const { t } = useTranslation('logged'); // list of displayed payment schedules diff --git a/app/frontend/src/javascript/components/payment-schedule/payment-schedules-list.tsx b/app/frontend/src/javascript/components/payment-schedule/payment-schedules-list.tsx index 31dd30005..231be3750 100644 --- a/app/frontend/src/javascript/components/payment-schedule/payment-schedules-list.tsx +++ b/app/frontend/src/javascript/components/payment-schedule/payment-schedules-list.tsx @@ -25,7 +25,7 @@ const PAGE_SIZE = 20; /** * This component shows a list of all payment schedules with their associated deadlines (aka. PaymentScheduleItem) and invoices */ -const PaymentSchedulesList: React.FC = ({ currentUser, onError, onCardUpdateSuccess }) => { +export const PaymentSchedulesList: React.FC = ({ currentUser, onError, onCardUpdateSuccess }) => { const { t } = useTranslation('admin'); // list of displayed payment schedules diff --git a/app/frontend/src/javascript/components/payment/card-payment-modal.tsx b/app/frontend/src/javascript/components/payment/card-payment-modal.tsx index 591eda71d..00d8b95ef 100644 --- a/app/frontend/src/javascript/components/payment/card-payment-modal.tsx +++ b/app/frontend/src/javascript/components/payment/card-payment-modal.tsx @@ -2,7 +2,7 @@ import React, { ReactElement, useEffect, useState } from 'react'; import { react2angular } from 'react2angular'; import { Loader } from '../base/loader'; import { StripeModal } from './stripe/stripe-modal'; -import { PayZenModal } from './payzen/payzen-modal'; +import { PayzenModal } from './payzen/payzen-modal'; import { IApplication } from '../../models/application'; import { ShoppingCart } from '../../models/payment'; import { User } from '../../models/user'; @@ -58,7 +58,7 @@ const CardPaymentModalComponent: React.FC = ({ isOpen, to * Render the PayZen payment modal */ const renderPayZenModal = (): ReactElement => { - return = ({ onSubmit, onSucce }; return ( -
+ {!paymentSchedule && !isFreeOfCharge() &&

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

} {!paymentSchedule && isFreeOfCharge() &&

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

} {paymentSchedule &&
diff --git a/app/frontend/src/javascript/components/payment/payzen/payzen-card-update-modal.tsx b/app/frontend/src/javascript/components/payment/payzen/payzen-card-update-modal.tsx index 575e30bf9..f172caf60 100644 --- a/app/frontend/src/javascript/components/payment/payzen/payzen-card-update-modal.tsx +++ b/app/frontend/src/javascript/components/payment/payzen/payzen-card-update-modal.tsx @@ -61,7 +61,7 @@ export const PayzenCardUpdateModal: React.FC = ({ is toggleModal={toggleModal} closeButton={false} customFooter={logoFooter()} - className="payzen-update-card-modal"> + className="payzen-card-update-modal"> {schedule && = ({ onSubmit, onSuccess, onE }; return ( - +
diff --git a/app/frontend/src/javascript/components/payment/payzen/payzen-keys-form.tsx b/app/frontend/src/javascript/components/payment/payzen/payzen-keys-form.tsx index 39cce9bc7..1b9d649f6 100644 --- a/app/frontend/src/javascript/components/payment/payzen/payzen-keys-form.tsx +++ b/app/frontend/src/javascript/components/payment/payzen/payzen-keys-form.tsx @@ -11,7 +11,7 @@ import PayzenAPI from '../../../api/payzen'; enableMapSet(); -interface PayZenKeysFormProps { +interface PayzenKeysFormProps { onValidKeys: (payZenSettings: Map) => void, onInvalidKeys: () => void, } @@ -28,7 +28,7 @@ let pendingKeysValidation = false; /** * Form to set the PayZen's username, password and public key */ -const PayZenKeysFormComponent: React.FC = ({ onValidKeys, onInvalidKeys }) => { +const PayzenKeysFormComponent: React.FC = ({ onValidKeys, onInvalidKeys }) => { const { t } = useTranslation('admin'); // values of the PayZen settings @@ -205,10 +205,10 @@ const PayZenKeysFormComponent: React.FC = ({ onValidKeys, o ); }; -export const PayZenKeysForm: React.FC = ({ onValidKeys, onInvalidKeys }) => { +export const PayzenKeysForm: React.FC = ({ onValidKeys, onInvalidKeys }) => { return ( - + ); }; diff --git a/app/frontend/src/javascript/components/payment/payzen/payzen-modal.tsx b/app/frontend/src/javascript/components/payment/payzen/payzen-modal.tsx index d6f4734bd..0b6a70bf2 100644 --- a/app/frontend/src/javascript/components/payment/payzen/payzen-modal.tsx +++ b/app/frontend/src/javascript/components/payment/payzen/payzen-modal.tsx @@ -10,7 +10,7 @@ import mastercardLogo from '../../../../../images/mastercard.png'; import visaLogo from '../../../../../images/visa.png'; import { PayzenForm } from './payzen-form'; -interface PayZenModalProps { +interface PayzenModalProps { isOpen: boolean, toggleModal: () => void, afterSuccess: (result: Invoice|PaymentSchedule) => void, @@ -28,7 +28,7 @@ interface PayZenModalProps { * This component should not be called directly. Prefer using which can handle the configuration * of a different payment gateway. */ -export const PayZenModal: React.FC = ({ isOpen, toggleModal, afterSuccess, onError, cart, currentUser, schedule, customer }) => { +export const PayzenModal: React.FC = ({ isOpen, toggleModal, afterSuccess, onError, cart, currentUser, schedule, customer }) => { /** * Return the logos, shown in the modal footer. */ diff --git a/app/frontend/src/javascript/components/payment/stripe/stripe-card-update-modal.tsx b/app/frontend/src/javascript/components/payment/stripe/stripe-card-update-modal.tsx index 49b6ea533..6cb0df7eb 100644 --- a/app/frontend/src/javascript/components/payment/stripe/stripe-card-update-modal.tsx +++ b/app/frontend/src/javascript/components/payment/stripe/stripe-card-update-modal.tsx @@ -59,7 +59,7 @@ export const StripeCardUpdateModal: React.FC = ({ is toggleModal={toggleModal} closeButton={false} customFooter={logoFooter()} - className="stripe-update-card-modal"> + className="stripe-card-update-modal"> {schedule && = ({ onSubmit, on }; return ( - + {children} diff --git a/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx b/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx index 04afd8922..b3436df1e 100644 --- a/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx +++ b/app/frontend/src/javascript/components/payment/stripe/stripe-form.tsx @@ -125,7 +125,7 @@ export const StripeForm: React.FC = ({ onSubmit, onSuccess, on }; return ( -
+ {children} diff --git a/app/frontend/src/javascript/components/plans/plans-list.tsx b/app/frontend/src/javascript/components/plans/plans-list.tsx index e49f8a9e8..328b0cd6d 100644 --- a/app/frontend/src/javascript/components/plans/plans-list.tsx +++ b/app/frontend/src/javascript/components/plans/plans-list.tsx @@ -31,7 +31,7 @@ type PlansTree = Map>>; /** * This component display an organized list of plans to allow the end-user to select one and subscribe online */ -const PlansList: React.FC = ({ onError, onPlanSelection, onLoginRequest, operator, customer, subscribedPlanId, canSelectPlan }) => { +export const PlansList: React.FC = ({ onError, onPlanSelection, onLoginRequest, operator, customer, subscribedPlanId, canSelectPlan }) => { // all plans const [plans, setPlans] = useState(null); // all plan-categories, ordered by weight diff --git a/app/frontend/src/javascript/components/pricing/machines/machines-pricing.tsx b/app/frontend/src/javascript/components/pricing/machines/machines-pricing.tsx index 80334aab0..652a543c0 100644 --- a/app/frontend/src/javascript/components/pricing/machines/machines-pricing.tsx +++ b/app/frontend/src/javascript/components/pricing/machines/machines-pricing.tsx @@ -28,7 +28,7 @@ interface MachinesPricingProps { /** * Interface to set and edit the prices of machines-hours, per group */ -const MachinesPricing: React.FC = ({ onError, onSuccess }) => { +export const MachinesPricing: React.FC = ({ onError, onSuccess }) => { const { t } = useTranslation('admin'); const [machines, setMachines] = useState>(null); diff --git a/app/frontend/src/javascript/components/pricing/spaces/configure-extended-price-button.tsx b/app/frontend/src/javascript/components/pricing/spaces/configure-extended-price-button.tsx index c45c99a41..3b3396c79 100644 --- a/app/frontend/src/javascript/components/pricing/spaces/configure-extended-price-button.tsx +++ b/app/frontend/src/javascript/components/pricing/spaces/configure-extended-price-button.tsx @@ -8,7 +8,7 @@ import FormatLib from '../../../lib/format'; import { EditExtendedPrice } from './edit-extended-price'; import { DeleteExtendedPrice } from './delete-extended-price'; -interface ConfigureExtendedPriceButtonProps { +interface ConfigureExtendedPricesButtonProps { prices: Array, onError: (message: string) => void, onSuccess: (message: string) => void, @@ -21,7 +21,7 @@ interface ConfigureExtendedPriceButtonProps { * This component is a button that shows the list of extendedPrices. * It also triggers modal dialogs to configure (add/edit/remove) extendedPrices. */ -export const ConfigureExtendedPriceButton: React.FC = ({ prices, onError, onSuccess, groupId, priceableId, priceableType }) => { +export const ConfigureExtendedPricesButton: React.FC = ({ prices, onError, onSuccess, groupId, priceableId, priceableType }) => { const { t } = useTranslation('admin'); const [extendedPrices, setExtendedPrices] = useState>(prices); diff --git a/app/frontend/src/javascript/components/pricing/spaces/spaces-pricing.tsx b/app/frontend/src/javascript/components/pricing/spaces/spaces-pricing.tsx index f9a671d81..6a494aac0 100644 --- a/app/frontend/src/javascript/components/pricing/spaces/spaces-pricing.tsx +++ b/app/frontend/src/javascript/components/pricing/spaces/spaces-pricing.tsx @@ -10,7 +10,7 @@ import { Group } from '../../../models/group'; import { IApplication } from '../../../models/application'; import { Space } from '../../../models/space'; import { EditablePrice } from '../editable-price'; -import { ConfigureExtendedPriceButton } from './configure-extended-price-button'; +import { ConfigureExtendedPricesButton } from './configure-extended-price-button'; import PriceAPI from '../../../api/price'; import { Price } from '../../../models/price'; import { useImmer } from 'use-immer'; @@ -26,7 +26,7 @@ interface SpacesPricingProps { /** * Interface to set and edit the prices of spaces-hours, per group */ -const SpacesPricing: React.FC = ({ onError, onSuccess }) => { +export const SpacesPricing: React.FC = ({ onError, onSuccess }) => { const { t } = useTranslation('admin'); const [spaces, setSpaces] = useState>(null); @@ -120,7 +120,7 @@ const SpacesPricing: React.FC = ({ onError, onSuccess }) => {space.name} {groups?.map(group => {prices.length && } - = ({ onSuccess, onError }) => { +export const ProfileCustomFieldsList: React.FC = ({ onSuccess, onError }) => { const { t } = useTranslation('admin'); const [profileCustomFields, setProfileCustomFields] = useState>([]); diff --git a/app/frontend/src/javascript/components/proof-of-identity/delete-proof-of-identity-type-modal.tsx b/app/frontend/src/javascript/components/proof-of-identity/delete-proof-of-identity-type-modal.tsx index 33d6fbb47..80107f534 100644 --- a/app/frontend/src/javascript/components/proof-of-identity/delete-proof-of-identity-type-modal.tsx +++ b/app/frontend/src/javascript/components/proof-of-identity/delete-proof-of-identity-type-modal.tsx @@ -30,7 +30,7 @@ export const DeleteProofOfIdentityTypeModal: React.FC + className="delete-proof-of-identity-type-modal">

{t('app.admin.settings.compte.do_you_really_want_to_delete_this_proof_of_identity_type')}

); diff --git a/app/frontend/src/javascript/components/proof-of-identity/proof-of-identity-files.tsx b/app/frontend/src/javascript/components/proof-of-identity/proof-of-identity-files.tsx index bd712a6a2..92590710b 100644 --- a/app/frontend/src/javascript/components/proof-of-identity/proof-of-identity-files.tsx +++ b/app/frontend/src/javascript/components/proof-of-identity/proof-of-identity-files.tsx @@ -29,7 +29,7 @@ interface FilesType { /** * This component upload the proof of identity file of member */ -const ProofOfIdentityFiles: React.FC = ({ currentUser, onSuccess, onError }) => { +export const ProofOfIdentityFiles: React.FC = ({ currentUser, onSuccess, onError }) => { const { t } = useTranslation('admin'); const maxProofOfIdentityFileSizeMb = (Fablab.maxProofOfIdentityFileSize / 1024 / 1024).toFixed(); diff --git a/app/frontend/src/javascript/components/select-gateway-modal.tsx b/app/frontend/src/javascript/components/select-gateway-modal.tsx index a8b68b6e3..54ebab5a4 100644 --- a/app/frontend/src/javascript/components/select-gateway-modal.tsx +++ b/app/frontend/src/javascript/components/select-gateway-modal.tsx @@ -7,7 +7,7 @@ import React, { BaseSyntheticEvent, useEffect, useState } from 'react'; import { react2angular } from 'react2angular'; import { useTranslation } from 'react-i18next'; import { StripeKeysForm } from './payment/stripe/stripe-keys-form'; -import { PayZenKeysForm } from './payment/payzen/payzen-keys-form'; +import { PayzenKeysForm } from './payment/payzen/payzen-keys-form'; import { FabModal, ModalSize } from './base/fab-modal'; import { Loader } from './base/loader'; import { User } from '../models/user'; @@ -26,7 +26,7 @@ interface SelectGatewayModalModalProps { onSuccess: (results: Map) => void, } -const SelectGatewayModal: React.FC = ({ isOpen, toggleModal, onError, onSuccess }) => { +export const SelectGatewayModal: React.FC = ({ isOpen, toggleModal, onError, onSuccess }) => { const { t } = useTranslation('admin'); const [preventConfirmGateway, setPreventConfirmGateway] = useState(true); @@ -117,7 +117,7 @@ const SelectGatewayModal: React.FC = ({ isOpen, to isOpen={isOpen} toggleModal={toggleModal} width={ModalSize.medium} - className="gateway-modal" + className="select-gateway-modal" confirmButton={t('app.admin.invoices.payment.gateway_modal.confirm_button')} onConfirm={onGatewayConfirmed} preventConfirm={preventConfirmGateway}> @@ -131,7 +131,7 @@ const SelectGatewayModal: React.FC = ({ isOpen, to {selectedGateway === Gateway.Stripe && } - {selectedGateway === Gateway.PayZen && } + {selectedGateway === Gateway.PayZen && } ); }; diff --git a/app/frontend/src/javascript/components/settings/boolean-setting.tsx b/app/frontend/src/javascript/components/settings/boolean-setting.tsx index fa16efadd..752014ece 100644 --- a/app/frontend/src/javascript/components/settings/boolean-setting.tsx +++ b/app/frontend/src/javascript/components/settings/boolean-setting.tsx @@ -97,7 +97,7 @@ export const BooleanSetting: React.FC = ({ name, label, cla }; return ( -
+
{!hideSave && {t('app.admin.check_list_setting.save')} } @@ -105,7 +105,7 @@ export const BooleanSetting: React.FC = ({ name, label, cla ); }; -export const BooleanSettingWrapper: React.FC = ({ onChange, onSuccess, onError, label, className, name, hideSave, onBeforeSave }) => { +const BooleanSettingWrapper: React.FC = ({ onChange, onSuccess, onError, label, className, name, hideSave, onBeforeSave }) => { return ( diff --git a/app/frontend/src/javascript/components/settings/check-list-setting.tsx b/app/frontend/src/javascript/components/settings/check-list-setting.tsx index 446c9b510..06435c974 100644 --- a/app/frontend/src/javascript/components/settings/check-list-setting.tsx +++ b/app/frontend/src/javascript/components/settings/check-list-setting.tsx @@ -98,7 +98,7 @@ export const CheckListSetting: React.FC = ({ name, label, ); }; -export const CheckListSettingWrapper: React.FC = ({ availableOptions, onSuccess, onError, label, className, name, hideSave, defaultValue, onChange }) => { +const CheckListSettingWrapper: React.FC = ({ availableOptions, onSuccess, onError, label, className, name, hideSave, defaultValue, onChange }) => { return ( diff --git a/app/frontend/src/javascript/components/settings/user-validation-setting.tsx b/app/frontend/src/javascript/components/settings/user-validation-setting.tsx index 6bd4b9bd7..49d1a8353 100644 --- a/app/frontend/src/javascript/components/settings/user-validation-setting.tsx +++ b/app/frontend/src/javascript/components/settings/user-validation-setting.tsx @@ -19,7 +19,7 @@ interface UserValidationSettingProps { /** * This component allows to configure user validation required setting. */ -const UserValidationSetting: React.FC = ({ onSuccess, onError }) => { +export const UserValidationSetting: React.FC = ({ onSuccess, onError }) => { const { t } = useTranslation('admin'); const [userValidationRequired, setUserValidationRequired] = useState('false'); diff --git a/app/frontend/src/javascript/components/subscriptions/free-extend-modal.tsx b/app/frontend/src/javascript/components/subscriptions/free-extend-modal.tsx index 2f878d5f5..51b191ae2 100644 --- a/app/frontend/src/javascript/components/subscriptions/free-extend-modal.tsx +++ b/app/frontend/src/javascript/components/subscriptions/free-extend-modal.tsx @@ -26,7 +26,7 @@ interface FreeExtendModalProps { /** * Modal dialog shown to extend the current subscription of a customer, for free */ -const FreeExtendModal: React.FC = ({ isOpen, toggleModal, subscription, customerId, onError, onSuccess }) => { +export const FreeExtendModal: React.FC = ({ isOpen, toggleModal, subscription, customerId, onError, onSuccess }) => { // we do not render the modal if the subscription was not provided if (!subscription) return null; diff --git a/app/frontend/src/javascript/components/subscriptions/renew-modal.tsx b/app/frontend/src/javascript/components/subscriptions/renew-modal.tsx index 6356bfa5f..ef3922f54 100644 --- a/app/frontend/src/javascript/components/subscriptions/renew-modal.tsx +++ b/app/frontend/src/javascript/components/subscriptions/renew-modal.tsx @@ -35,7 +35,7 @@ interface RenewModalProps { /** * Modal dialog shown to renew the current subscription of a customer, for free */ -const RenewModal: React.FC = ({ isOpen, toggleModal, subscription, customer, operator, onError, onSuccess }) => { +export const RenewModal: React.FC = ({ isOpen, toggleModal, subscription, customer, operator, onError, onSuccess }) => { // we do not render the modal if the subscription was not provided if (!subscription) return null; diff --git a/app/frontend/src/javascript/components/subscriptions/subscribe-modal.tsx b/app/frontend/src/javascript/components/subscriptions/subscribe-modal.tsx index 2ca4b5c5f..006e92356 100644 --- a/app/frontend/src/javascript/components/subscriptions/subscribe-modal.tsx +++ b/app/frontend/src/javascript/components/subscriptions/subscribe-modal.tsx @@ -39,7 +39,7 @@ type selectOption = { value: number, label: string }; /** * Modal dialog shown to create a subscription for the given customer */ -const SubscribeModal: React.FC = ({ isOpen, toggleModal, customer, operator, onError, onSuccess }) => { +export const SubscribeModal: React.FC = ({ isOpen, toggleModal, customer, operator, onError, onSuccess }) => { const { t } = useTranslation('admin'); const [selectedPlan, setSelectedPlan] = useState(null); diff --git a/app/frontend/src/stylesheets/application.scss b/app/frontend/src/stylesheets/application.scss index fdc00c5d8..fea428780 100644 --- a/app/frontend/src/stylesheets/application.scss +++ b/app/frontend/src/stylesheets/application.scss @@ -30,8 +30,8 @@ @import "modules/base/labelled-input"; @import "modules/calendar/calendar"; @import "modules/events/event"; +@import "modules/form/abstract-form-item"; @import "modules/form/form-input"; -@import "modules/form/form-item"; @import "modules/form/form-rich-text"; @import "modules/form/form-switch"; @import "modules/group/change-group"; @@ -45,10 +45,11 @@ @import "modules/payment-schedule/payment-schedules-table"; @import "modules/payment/local-payment/local-payment-modal"; @import "modules/payment/abstract-payment-modal"; +@import "modules/payment/payzen/payzen-card-update-modal"; @import "modules/payment/payzen/payzen-keys-form"; @import "modules/payment/payzen/payzen-modal"; @import "modules/payment/payzen/payzen-settings"; -@import "modules/payment/payzen/payzen-update-card-modal"; +@import "modules/payment/stripe/stripe-card-update-modal"; @import "modules/payment/stripe/stripe-confirm"; @import "modules/payment/stripe/stripe-keys-form"; @import "modules/payment/stripe/stripe-modal"; diff --git a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss index 034a1d583..daf2d2f2a 100644 --- a/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss +++ b/app/frontend/src/stylesheets/modules/base/fab-text-editor.scss @@ -1,4 +1,4 @@ -.fab-textEditor { +.fab-text-editor { position: relative; margin-bottom: 1.6rem; padding-bottom: 1.6rem; diff --git a/app/frontend/src/stylesheets/modules/base/labelled-input.scss b/app/frontend/src/stylesheets/modules/base/labelled-input.scss index 3f8381b4d..3ccfb595e 100644 --- a/app/frontend/src/stylesheets/modules/base/labelled-input.scss +++ b/app/frontend/src/stylesheets/modules/base/labelled-input.scss @@ -1,4 +1,4 @@ -.input-with-label { +.labelled-input { position: relative; display: inline-table; border-collapse: separate; diff --git a/app/frontend/src/stylesheets/modules/payment/payzen/payzen-update-card-modal.scss b/app/frontend/src/stylesheets/modules/payment/payzen/payzen-card-update-modal.scss similarity index 97% rename from app/frontend/src/stylesheets/modules/payment/payzen/payzen-update-card-modal.scss rename to app/frontend/src/stylesheets/modules/payment/payzen/payzen-card-update-modal.scss index 413e5e43a..fb59142ef 100644 --- a/app/frontend/src/stylesheets/modules/payment/payzen/payzen-update-card-modal.scss +++ b/app/frontend/src/stylesheets/modules/payment/payzen/payzen-card-update-modal.scss @@ -1,4 +1,4 @@ -.payzen-update-card-modal { +.payzen-card-update-modal { .card-form { background-color: #f4f3f3; border: 1px solid #ddd; diff --git a/app/frontend/src/stylesheets/modules/payment/stripe/stripe-update-card-modal.scss b/app/frontend/src/stylesheets/modules/payment/stripe/stripe-card-update-modal.scss similarity index 97% rename from app/frontend/src/stylesheets/modules/payment/stripe/stripe-update-card-modal.scss rename to app/frontend/src/stylesheets/modules/payment/stripe/stripe-card-update-modal.scss index ba5bbf02b..cada094d0 100644 --- a/app/frontend/src/stylesheets/modules/payment/stripe/stripe-update-card-modal.scss +++ b/app/frontend/src/stylesheets/modules/payment/stripe/stripe-card-update-modal.scss @@ -1,4 +1,4 @@ -.stripe-update-card-modal { +.stripe-card-update-modal { .fab-modal-content { .card-form { background-color: #f4f3f3; diff --git a/app/frontend/src/stylesheets/modules/select-gateway-modal.scss b/app/frontend/src/stylesheets/modules/select-gateway-modal.scss index 971a07989..bdfc920e8 100644 --- a/app/frontend/src/stylesheets/modules/select-gateway-modal.scss +++ b/app/frontend/src/stylesheets/modules/select-gateway-modal.scss @@ -1,4 +1,4 @@ -.gateway-modal { +.select-gateway-modal { .info-gateway { border: 1px solid #bce8f1; border-radius: 4px; diff --git a/lib/tasks/fablab/auth.rake b/lib/tasks/fablab/auth.rake index 437025dfd..c88053114 100644 --- a/lib/tasks/fablab/auth.rake +++ b/lib/tasks/fablab/auth.rake @@ -6,13 +6,13 @@ namespace :fablab do desc 'switch the active authentication provider' task :switch_provider, [:provider] => :environment do |_task, args| + providers = AuthProvider.all.inject('') { |str, item| str + item[:name] + ', ' } unless args.provider - puts "\e[0;31mERROR\e[0m: You must pass a provider name to activate" + puts "\e[0;31mERROR\e[0m: You must pass a provider name to activate. Available providers are: #{providers[0..-3]}" next end if AuthProvider.find_by(name: args.provider).nil? - providers = AuthProvider.all.inject('') { |str, item| str + item[:name] + ', ' } puts "\e[0;31mERROR\e[0m: the provider '#{args.provider}' does not exists. Available providers are: #{providers[0..-3]}" next end diff --git a/package.json b/package.json index 207aaeb55..1d8b1daf0 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "@typescript-eslint/parser": "^5.17.0", "eslint": "~8.12.0", "eslint-config-standard": "~17.0.0-1", - "eslint-plugin-fabmanager": "^0.0.21", + "eslint-plugin-fabmanager": "^0.0.23", "eslint-plugin-html-erb": "^1.0.1", "eslint-plugin-import": "~2.25.4", "eslint-plugin-n": "^15.1.0", diff --git a/yarn.lock b/yarn.lock index 2c2ab0422..7d2fb3946 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4082,10 +4082,10 @@ eslint-plugin-es@^4.1.0: eslint-utils "^2.0.0" regexpp "^3.0.0" -eslint-plugin-fabmanager@^0.0.21: - version "0.0.21" - resolved "https://registry.yarnpkg.com/eslint-plugin-fabmanager/-/eslint-plugin-fabmanager-0.0.21.tgz#c2f2ccfbafc2f202adefdf73bb2650604a53541c" - integrity sha512-sy8SW7K0NSpm/l8sWJ75NAJfQuMLDZ98LnrYfnHGt119CeulaylgqYniyFnKRxUrYJH2c9dO2vBhiTFgFTeJUg== +eslint-plugin-fabmanager@^0.0.23: + version "0.0.23" + resolved "https://registry.yarnpkg.com/eslint-plugin-fabmanager/-/eslint-plugin-fabmanager-0.0.23.tgz#7475999e23f9f658186c172c40a73e15587930e4" + integrity sha512-yXxJWPvUyhszBp/jL+aW4I9Qm43kkGH140Pm1EfEBnFkGaC63/U4UX+XSA2ibSocvw2Gqi8igEACEIf6/H4GYw== eslint-plugin-html-erb@^1.0.1: version "1.0.1"