diff --git a/Translate-Locale.ps1 b/Translate-Locale.ps1 new file mode 100644 index 0000000..1740d90 --- /dev/null +++ b/Translate-Locale.ps1 @@ -0,0 +1,47 @@ +#You will need Microsoft Copilot CLI installed to run this script use this to install the command line tool: +# winget install Microsoft.Copilot + +# pwsh ./Translate-Locale.ps1 ` +# -SourceFile "./public/locales/en-GB/common.json" ` +# -TargetLocale "fr-FR" ` +# -OutputFile "./public/locales/fr-FR/common.json" + +# pwsh ./Translate-Locale.ps1 ` +# -SourceFile "./public/locales/en-GB/common.json" ` +# -TargetLocale "en-US" ` +# -OutputFile "./public/locales/en-US/common.json" + +# pwsh ./Translate-Locale.ps1 ` +# -SourceFile "./public/locales/en-GB/common.json" ` +# -TargetLocale "fr-CA" ` +# -OutputFile "./public/locales/fr-CA/common.json" + + +param( + [Parameter(Mandatory=$true)] + [string]$SourceFile, # en-GB.json + [Parameter(Mandatory=$true)] + [string]$TargetLocale, # fr-FR, fr-CA, en-US, etc. + [Parameter(Mandatory=$true)] + [string]$OutputFile # output JSON file +) + +# Load the source JSON +$sourceJson = Get-Content $SourceFile -Raw + +# Build the translation prompt +$prompt = @" +Translate the following JSON values into $TargetLocale. +Keep the keys exactly the same. +Return valid JSON only. + +$sourceJson +"@ + +# Call Copilot CLI +$translated = copilot $prompt + +# Save the result +$translated | Out-File $OutputFile -Encoding UTF8 + +Write-Host "Generated $TargetLocale translation: $OutputFile" \ No newline at end of file diff --git a/public/locales/en-US/common.json b/public/locales/en-US/common.json index 6e1a84e..47c2c87 100644 --- a/public/locales/en-US/common.json +++ b/public/locales/en-US/common.json @@ -1,4 +1,10 @@ { + "AuthorizationEndpoint": "Authorization Endpoint", "ConfirmEmailResent": "Confirmation email resent", - "OccuredAt": "Occurred At" + "OccuredAt": "Occurred At", + "Organisation": "Organization", + "OrganisationEdited": "Organization edited", + "Mail": "Email", + "MailTemplates": "Email Templates", + "LoggingOut": "Signing out" } diff --git a/public/locales/en/common.json b/public/locales/en/common.json index 5313a68..bf0e832 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -1,5 +1,6 @@ { "Activate": "Activate", + "Active": "Active", "Add": "Add", "AddDomain": "Add Domain", "Address": "Address", @@ -10,92 +11,185 @@ "AnErrorOccurred": "An error occurred", "Application": "Application", "Applications": "Applications", + "AuthorizationEndpoint": "Authorisation Endpoint", "AuditLog": "Audit Logs", "AuditLogs": "Audit Logs", + "Authenticate": "Authenticate", + "AuthenticationCode": "Authentication code", "BlockedIPAddresses": "Blocked IP addresses", "BlockedIPs": "Blocked IPs", + "Blocked": "Blocked", "Cancel": "Cancel", "Changes": "Changes", "ClientDomainManager": "Client Domain Manager", "ClientDomains": "Client Domains", "Close": "Close", + "ClientId": "Client Id", + "ClientSecret": "Client Secret", "Comment": "Comment", "Confirm": "Confirm", "ConfirmEmailResent": "Confirm e-mail resent", "ConfirmPassword": "Confirm Password", + "Continuous": "Continuous", "Created": "Created", + "CustomField": "Custom Field", + "CustomFieldEdited": "Custom Field edited", + "CustomFieldForChildEntries": "Custom field for child entries", "CustomFieldManager": "Custom Field Manager", "CustomFields": "Custom Fields", + "Day": "Day", + "DefaultValue": "Default Value", + "DefaultMustBeGreaterThanOrEqualToMinimumValue": "\"Default Value\" must be greater than or equal to \"Minimum Value\"", + "DefaultMustBeLessThanOrEqualToMaximumValue": "\"Default Value\" must be less than or equal to \"Maximum Value\"", + "Definition": "Definition", "DisableAuthenticator": "Disable Authenticator", "DisplayName": "Display Name", "Domain": "Domain", + "DomainEdited": "Domain edited", + "Disabled": "Disabled", + "Enabled": "Enabled", "e-print": "e-print", "e-suite": "e-suite", "e-suiteLogo": "e-suite logo", "Edit": "Edit", "EditDomain": "Edit Domain", "EditUser": "Edit User", + "EFlowAppId": "e-flow AppId", + "EFlowCategoryId": "e-flow CategoryId", + "EFlowHostname": "e-flow hostname", "Email": "Email", + "EmailTemplateSaved": "Email Template saved", "EntityDisplayName": "Entity Display Name", "ErrorLogs": "Error Logs", "ExceptionJson": "Exception JSON", "ExceptionLogs": "Exception Logs", "FailedToDisableAuthenticator": "Failed to disable authenticator:", + "Field": "Field", + "FailedToSaveFormInstance": "Failed to save form instance", "FieldType": "Field Type", + "ForgottenPassword": "Forgotten Password", + "FirstName": "First name", + "Form": "Form", "Forms": "Forms", + "FormTemplate": "Form Template", + "FormTemplateEdited": "Form template edited", "FormTemplateManager": "Form Template Manager", "General": "General", "Glossaries": "Glossaries", + "Glossary": "Glossary", + "GlossaryItem": "Glossary Item", + "GlossaryItemEdited": "Glossary Item edited", "GlossaryManager": "Glossary Manager", "Group": "Group", "Home": "Home", "Id": "Id", + "Increment": "Increment", + "IsPublic": "Is Public", "IPAddress": "IP Address", "IPAddressUnblocked": "IP Address '{{ip}}' unblocked.", "Items": "Items", "LastUpdated": "Last Updated", "Loading": "Loading", "LoggingOut": "Logging out", + "LastName": "Last name", + "Mail": "Mail", "MailTemplates": "Mail Templates", + "MaxEntriesEmptyUnlimited": "Max Entries (empty=unlimited)", + "MaximumValue": "Maximum Value", "Message": "Message", + "MinEntries": "Min Entries", + "MinimumValue": "Minimum Value", + "MiddleNames": "Middle names", + "Month": "Month", + "MultiLine": "Multi-line", "Name": "Name", + "NewCustomFieldAdded": "New Custom Field added", + "NewDomainAdded": "New Domain added", + "NewFormTemplateAdded": "New Form Template added", + "NewGlossaryItemAdded": "New Glossary Item added", + "NewOrganisationAdded": "New Organisation added", "NewPassword": "New Password", + "NewRoleAdded": "New Role added", + "NewSequenceAdded": "New sequence added", + "NewSpecificationsAdded": "New Specifications added", + "NewSiteAdded": "New site added", + "NewSsoProviderAdded": "New Sso Provider added", + "NewUserAdded": "New User added", "NewValue": "New Value", "NotFound": "Not found", + "Number": "Number", "NumberOfAttempts": "Number Of Attempts", "OccuredAt": "Occured At", "OldValue": "Old Value", + "Organisation": "Organisation", + "OrganisationEdited": "Organisation edited", "Password": "Password", "PasswordIsRequired": "Password is required", "PasswordMinLength": "Password must be at least {{minPasswordLength}} characters", "PasswordsMustMatch": "You need to confirm by typing exactly the same as the new password", + "Pattern": "Pattern", + "Pending": "Pending", "PressAgainToDelete": "Press again to delete", "PressAgainToUnblock": "Press again to unblock", + "PrintSpecification": "Print Specification", + "Profile": "Profile", "ResendConfirm": "Resend Confirm", + "Required": "Required", "ResetPassword": "Reset Password", + "RolloverType": "Rollover Type", + "Role": "Role", "RoleAccess": "Role Access", "RoleAccessUpdated": "Role access updated successfully.", + "RoleEdited": "Role edited", "Save": "Save", + "SaveAndClose": "Save and close", "SecurityRoles": "Security Roles", + "Seed": "Seed", "Sequence": "Sequence", + "SequenceEdited": "Sequence edited", + "SequenceFormGlossary": "Sequence/Form/Glossary", "SequenceManager": "Sequence Manager", "ShowJSON": "Show JSON", "ShowStackTrace": "Show stack trace", + "SigmaId": "Sigma Id", + "Site": "Site", + "SiteEdited": "Site edited", "SiteManager": "Site Manager", "SpecificationManager": "Specification Manager", + "Specifications": "Specifications", + "SpecificationsEdited": "Specifications edited", "SsoManager": "Sso Manager", + "SsoProvider": "Sso Provider", + "SsoProviderEdited": "Sso Provider edited", "StackTrace": "Stack Trace", "Status": "Status", + "Step": "Step", + "Subject": "Subject", "Support": "Support", "SupportingData": "Supporting Data", + "TemplateIdCannotBeNull": "Template Id cannot be null", + "TemplateUnknown": "Template unknown", + "Text": "Text", + "TheDetailsBelowAreLoadedFromMasterTemplate": "The details below are loaded from the master template. Saving this template will mean that any changes to the master template will not automatically appear here.", + "ThereAreErrorsOnTheForm": "There are errors on the form", + "ThisTemplateIsCustomForThisDomainOnly": "This template is custom for this domain only", "Timing": "Timing", + "TokenEndpoint": "Token Endpoint", + "TwoFactorAuthentication": "2 Factor Authentication", "Type": "Type", "UnblockedInMinutes": "Unblocked In (Minutes)", "Up": "Up", + "User": "User", + "UserAddedToRole": "User added to role", "UserManager": "User Manager", "UserName": "User Name", "UsernameIsRequired": "Username is required", "UsernameMustBeValidEmail": "Username must be a valid email", "Users": "Users", - "Version": "Version" + "UserEdited": "User edited", + "ValidIssuer": "Valid Issuer", + "Version": "Version", + "VersionCannotBeNull": "Version cannot be null", + "Year": "Year", + "YourProfileSettingsHaveBeenSaved": "Your profile settings have been saved" } diff --git a/public/locales/fr-CA/common.json b/public/locales/fr-CA/common.json index e3bacdf..7d99790 100644 --- a/public/locales/fr-CA/common.json +++ b/public/locales/fr-CA/common.json @@ -1,7 +1,11 @@ { - "Email": "Courriel", + "AnEmailWithPasswordResetLinkHasBeenSent": "Un courriel contenant un lien pour réinitialiser le mot de passe a été envoyé.", "ConfirmEmailResent": "Courriel de confirmation renvoyé", + "Email": "Courriel", + "EmailTemplateSaved": "Modèle de courriel enregistré", + "LoggingOut": "Fermeture de session", + "Mail": "Courriel", "MailTemplates": "Modèles de courriels", - "Support": "Soutien", - "LoggingOut": "Fermeture de session" + "PressAgainToDelete": "Appuyer de nouveau pour supprimer", + "PressAgainToUnblock": "Appuyer de nouveau pour débloquer" } diff --git a/public/locales/fr/common.json b/public/locales/fr/common.json index 1122ee5..5fdb7b6 100644 --- a/public/locales/fr/common.json +++ b/public/locales/fr/common.json @@ -1,5 +1,6 @@ { "Activate": "Activer", + "Active": "Actif", "Add": "Ajouter", "AddDomain": "Ajouter un domaine", "Address": "Adresse", @@ -10,92 +11,185 @@ "AnErrorOccurred": "Une erreur s'est produite", "Application": "Application", "Applications": "Applications", + "AuthorizationEndpoint": "Point de terminaison d’autorisation", "AuditLog": "Journaux d’audit", "AuditLogs": "Journaux d’audit", + "Authenticate": "Authentifier", + "AuthenticationCode": "Code d’authentification", "BlockedIPAddresses": "Adresses IP bloquées", "BlockedIPs": "IPs bloquées", + "Blocked": "Bloqué", "Cancel": "Annuler", "Changes": "Modifications", "ClientDomainManager": "Gestionnaire de domaines clients", "ClientDomains": "Domaines clients", "Close": "Fermer", + "ClientId": "Identifiant client", + "ClientSecret": "Secret client", "Comment": "Commentaire", "Confirm": "Confirmer", "ConfirmEmailResent": "E-mail de confirmation renvoyé", "ConfirmPassword": "Confirmer le mot de passe", + "Continuous": "Continu", "Created": "Créé", + "CustomField": "Champ personnalisé", + "CustomFieldEdited": "Champ personnalisé modifié", + "CustomFieldForChildEntries": "Champ personnalisé pour les entrées enfants", "CustomFieldManager": "Gestionnaire de champs personnalisés", "CustomFields": "Champs personnalisés", + "Day": "Jour", + "DefaultValue": "Valeur par défaut", + "DefaultMustBeGreaterThanOrEqualToMinimumValue": "\"Valeur par défaut\" doit être supérieure ou égale à \"Valeur minimale\"", + "DefaultMustBeLessThanOrEqualToMaximumValue": "\"Valeur par défaut\" doit être inférieure ou égale à \"Valeur maximale\"", + "Definition": "Définition", "DisableAuthenticator": "Désactiver l’authentificateur", "DisplayName": "Nom d’affichage", "Domain": "Domaine", + "DomainEdited": "Domaine modifié", + "Disabled": "Désactivé", + "Enabled": "Activé", "e-print": "e-print", "e-suite": "e-suite", "e-suiteLogo": "Logo e-suite", "Edit": "Modifier", "EditDomain": "Modifier le domaine", "EditUser": "Modifier l’utilisateur", + "EFlowAppId": "ID d’application e-flow", + "EFlowCategoryId": "ID de catégorie e-flow", + "EFlowHostname": "Nom d’hôte e-flow", "Email": "E-mail", + "EmailTemplateSaved": "Modèle d’e-mail enregistré", "EntityDisplayName": "Nom d’affichage de l’entité", "ErrorLogs": "Journaux d’erreurs", "ExceptionJson": "Exception JSON", "ExceptionLogs": "Journaux d’exceptions", "FailedToDisableAuthenticator": "Échec de la désactivation de l’authentificateur :", + "Field": "Champ", + "FailedToSaveFormInstance": "Échec de l’enregistrement de l’instance du formulaire", "FieldType": "Type de champ", + "ForgottenPassword": "Mot de passe oublié", + "FirstName": "Prénom", + "Form": "Formulaire", "Forms": "Formulaires", + "FormTemplate": "Modèle de formulaire", + "FormTemplateEdited": "Modèle de formulaire modifié", "FormTemplateManager": "Gestionnaire de modèles de formulaires", "General": "Général", "Glossaries": "Glossaires", + "Glossary": "Glossaire", + "GlossaryItem": "Élément de glossaire", + "GlossaryItemEdited": "Élément de glossaire modifié", "GlossaryManager": "Gestionnaire de glossaires", "Group": "Groupe", "Home": "Accueil", "Id": "Id", + "Increment": "Incrément", + "IsPublic": "Public", "IPAddress": "Adresse IP", "IPAddressUnblocked": "Adresse IP '{{ip}}' débloquée.", "Items": "Éléments", "LastUpdated": "Dernière mise à jour", "Loading": "Chargement", "LoggingOut": "Déconnexion", + "LastName": "Nom de famille", + "Mail": "Courrier", "MailTemplates": "Modèles d’e-mails", + "MaxEntriesEmptyUnlimited": "Entrées max (vide = illimité)", + "MaximumValue": "Valeur maximale", "Message": "Message", + "MinEntries": "Entrées min", + "MinimumValue": "Valeur minimale", + "MiddleNames": "Deuxième prénom", + "Month": "Mois", + "MultiLine": "Multiligne", "Name": "Nom", + "NewCustomFieldAdded": "Nouveau champ personnalisé ajouté", + "NewDomainAdded": "Nouveau domaine ajouté", + "NewFormTemplateAdded": "Nouveau modèle de formulaire ajouté", + "NewGlossaryItemAdded": "Nouvel élément de glossaire ajouté", + "NewOrganisationAdded": "Nouvelle organisation ajoutée", "NewPassword": "Nouveau mot de passe", + "NewRoleAdded": "Nouveau rôle ajouté", + "NewSequenceAdded": "Nouvelle séquence ajoutée", + "NewSpecificationsAdded": "Nouvelles spécifications ajoutées", + "NewSiteAdded": "Nouveau site ajouté", + "NewSsoProviderAdded": "Nouveau fournisseur SSO ajouté", + "NewUserAdded": "Nouvel utilisateur ajouté", "NewValue": "Nouvelle valeur", "NotFound": "Introuvable", + "Number": "Nombre", "NumberOfAttempts": "Nombre de tentatives", "OccuredAt": "Survenu à", "OldValue": "Ancienne valeur", + "Organisation": "Organisation", + "OrganisationEdited": "Organisation modifiée", "Password": "Mot de passe", "PasswordIsRequired": "Le mot de passe est requis", "PasswordMinLength": "Le mot de passe doit contenir au moins {{minPasswordLength}} caractères", "PasswordsMustMatch": "Vous devez confirmer en saisissant exactement le même nouveau mot de passe", + "Pattern": "Motif", + "Pending": "En attente", "PressAgainToDelete": "Appuyez de nouveau pour supprimer", "PressAgainToUnblock": "Appuyez de nouveau pour débloquer", + "PrintSpecification": "Imprimer la spécification", + "Profile": "Profil", "ResendConfirm": "Renvoyer la confirmation", + "Required": "Requis", "ResetPassword": "Réinitialiser le mot de passe", + "RolloverType": "Type de report", + "Role": "Rôle", "RoleAccess": "Accès par rôle", "RoleAccessUpdated": "Accès par rôle mis à jour avec succès.", + "RoleEdited": "Rôle modifié", "Save": "Enregistrer", + "SaveAndClose": "Enregistrer et fermer", "SecurityRoles": "Rôles de sécurité", + "Seed": "Graine", "Sequence": "Séquence", + "SequenceEdited": "Séquence modifiée", + "SequenceFormGlossary": "Séquence/Formulaire/Glossaire", "SequenceManager": "Gestionnaire de séquences", "ShowJSON": "Afficher le JSON", "ShowStackTrace": "Afficher la trace de pile", - "SiteManager": "Gestionnaire de site", + "SigmaId": "ID Sigma", + "Site": "Site", + "SiteEdited": "Site modifié", + "SiteManager": "Gestionnaire de sites", "SpecificationManager": "Gestionnaire de spécifications", + "Specifications": "Spécifications", + "SpecificationsEdited": "Spécifications modifiées", "SsoManager": "Gestionnaire SSO", + "SsoProvider": "Fournisseur SSO", + "SsoProviderEdited": "Fournisseur SSO modifié", "StackTrace": "Trace de pile", "Status": "Statut", + "Step": "Étape", + "Subject": "Sujet", "Support": "Support", "SupportingData": "Données de support", + "TemplateIdCannotBeNull": "L’ID du modèle ne peut pas être nul", + "TemplateUnknown": "Modèle inconnu", + "Text": "Texte", + "TheDetailsBelowAreLoadedFromMasterTemplate": "Les détails ci-dessous sont chargés depuis le modèle maître. Enregistrer ce modèle signifie que les modifications du modèle maître n’apparaîtront plus automatiquement ici.", + "ThereAreErrorsOnTheForm": "Il y a des erreurs dans le formulaire", + "ThisTemplateIsCustomForThisDomainOnly": "Ce modèle est personnalisé uniquement pour ce domaine", "Timing": "Timing", + "TokenEndpoint": "Point de terminaison du jeton", + "TwoFactorAuthentication": "Authentification à deux facteurs", "Type": "Type", "UnblockedInMinutes": "Débloqué dans (minutes)", "Up": "Haut", + "User": "Utilisateur", + "UserAddedToRole": "Utilisateur ajouté au rôle", "UserManager": "Gestionnaire d’utilisateurs", "UserName": "Nom d’utilisateur", "UsernameIsRequired": "Le nom d’utilisateur est requis", "UsernameMustBeValidEmail": "Le nom d’utilisateur doit être une adresse e-mail valide", "Users": "Utilisateurs", - "Version": "Version" + "UserEdited": "Utilisateur modifié", + "ValidIssuer": "Émetteur valide", + "Version": "Version", + "VersionCannotBeNull": "La version ne peut pas être nulle", + "Year": "Année", + "YourProfileSettingsHaveBeenSaved": "Vos paramètres de profil ont été enregistrés" } diff --git a/src/App.tsx b/src/App.tsx index 6d1d2e2..aac23b5 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -288,7 +288,7 @@ function GetSecureRoutes() { path="/domains/add" element={ - + } /> @@ -296,7 +296,7 @@ function GetSecureRoutes() { path="/domains/edit/:domainId/addRole" element={ - + } /> @@ -304,7 +304,7 @@ function GetSecureRoutes() { path="/domains/edit/:domainId/editRole/:roleId" element={ - + } /> @@ -312,7 +312,7 @@ function GetSecureRoutes() { path="/domains/edit/:domainId/editRole/:roleId/addUserToRole" element={ - + } /> @@ -320,7 +320,7 @@ function GetSecureRoutes() { path="/domains/edit/:domainId" element={ - + } /> diff --git a/src/components/common/TableBody.tsx b/src/components/common/TableBody.tsx index c54da24..9ca8a1e 100644 --- a/src/components/common/TableBody.tsx +++ b/src/components/common/TableBody.tsx @@ -1,5 +1,6 @@ import React from "react"; import { useTranslation } from "react-i18next"; +import { Namespaces } from "../../i18n/i18n"; import deepFind from "../../utils/deepfind"; import Column from "./columns"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; @@ -47,7 +48,7 @@ export default function TableBody({ onSelectRow, showSecondaryAudit, }: TableBodyProps): JSX.Element { - const { t } = useTranslation(); + const { t } = useTranslation(); const resolvePath = (path: string, args: string[]) => { let modifiedPath = path; let index = 0; diff --git a/src/components/common/TemplateFiller.tsx b/src/components/common/TemplateFiller.tsx index b2dcbd1..cae9c81 100644 --- a/src/components/common/TemplateFiller.tsx +++ b/src/components/common/TemplateFiller.tsx @@ -17,6 +17,8 @@ import Loading from "./Loading"; import { useForm } from "./useForm"; import { renderCustomField } from "./formHelpers"; import { CustomFieldValue } from "../../modules/manager/glossary/services/glossaryService"; +import { useTranslation } from "react-i18next"; +import { Namespaces } from "../../i18n/i18n"; interface TemplateFillerProps { templateId?: GeneralIdRef; @@ -204,20 +206,22 @@ const TemplateFiller = forwardRef( return Object.keys(form.state.errors).length > 0; }, [form.state.errors]); + const { t } = useTranslation(Namespaces.Common); + const Save = useCallback(async () => { const { errors } = form.state; if (Object.keys(errors).length > 0) { - toast.error("There are errors on the form"); - throw new Error("There are errors on the form"); + toast.error(t("ThereAreErrorsOnTheForm")); + throw new Error(t("ThereAreErrorsOnTheForm") as string); } const customFieldValues = form.CustomFieldValues(); if (formInstanceId !== undefined) { if (template.templateId === undefined) - throw Error("TemplateId cannot be null"); + throw Error(t("TemplateIdCannotBeNull") as string); if (template.version === undefined) - throw Error("Version cannot be null"); + throw Error(t("VersionCannotBeNull") as string); const editFormInstance: EditFormInstance = { formInstanceId, @@ -238,9 +242,9 @@ const TemplateFiller = forwardRef( }; return await formsService.postFormInstance(formInstance); } - throw new Error("template unknown"); + throw new Error(t("TemplateUnknown") as string); } - }, [form, template, formInstanceId]); + }, [form, template, formInstanceId, t]); useImperativeHandle(ref, () => ({ hasValidationErrors, diff --git a/src/components/common/formHelpers.ts b/src/components/common/formHelpers.ts deleted file mode 100644 index 84be9e7..0000000 --- a/src/components/common/formHelpers.ts +++ /dev/null @@ -1,644 +0,0 @@ -export * from "./formHelpers.tsx"; -/* -import React from "react"; -import Input, { InputType } from "./Input"; -import ToggleSlider from "./ToggleSlider"; -import Select from "./Select"; -import Option from "./option"; -import { GeneralIdRef } from "../../utils/GeneralIdRef"; -import SequencePicker from "../pickers/SequencePicker"; -import GlossaryPicker from "../pickers/GlossaryPicker"; -import CustomFieldsEditor, { CustomFieldEditorAdd, CustomFieldEditorDelete } from "./CustomFieldsEditor"; -import { CustomField, numberParams, textParams } from "../../modules/manager/customfields/services/customFieldsService"; -import FormTemplatePicker from "../pickers/FormTemplatePicker"; -import { CustomFieldValue } from "../../modules/manager/glossary/services/glossaryService"; -import TemplateEditor from "./TemplateEditor"; -import DomainPicker from "../pickers/DomainPicker"; -import UserPicker from "../pickers/UserPicker"; -import Button, { ButtonType } from "./Button"; -import Expando from "./expando"; -import ErrorBlock from "./ErrorBlock"; -import SsoProviderPicker from "../pickers/SsoProviderPicker"; -import { FormData, FormError } from "./useForm"; - -export const renderButton = ( - label: string, - errors: FormError, - name?: string, - onClick?: (keyValue: any) => void, - testid?: string, - enabled: boolean = true, - buttonType: ButtonType = ButtonType.primary, - overrideErrorChecking: boolean = false -) => { - let disabled = !enabled || Object.keys(errors).filter((x) => !x.startsWith("_")).length > 0; - - if (overrideErrorChecking) disabled = !enabled; - - return ( - - ); -}; - -export const renderError = (name: string, errors: FormError) => { - return ; -}; - -export const renderInput = ( - name: string, - label: string, - data: FormData, - errors: FormError, - type: InputType = InputType.text, - readOnly = false, - defaultValue: string = "", - placeHolder: string = "", - maxLength: number = 0, - visible: boolean = true, - autoComplete: string | undefined = undefined, - onChange?: (e: React.ChangeEvent) => void -) => { - let value = data[name]; - - let cleanValue: string | undefined; - if (value === undefined) { - cleanValue = defaultValue; - } else if (typeof value === "string") { - cleanValue = value as string; - } else if (typeof value === "number") { - cleanValue = String(value); - } else if (typeof value === "boolean") { - cleanValue = String(value); - } else if (value as CustomFieldValue) { - cleanValue = (value as CustomFieldValue).displayValue ?? (value as CustomFieldValue).value.toString(); - } - - if (readOnly) { - return ( - - ); - } else { - return ( - - ); - } -}; - -export const renderInputWithChangeEvent = ( - name: string, - label: string, - data: FormData, - errors: FormError, - type: InputType = InputType.text, - readOnly = false, - handleChangeEvent?: (e: React.ChangeEvent) => void, - defaultValue: string = "", - placeHolder: string = "", - maxLength: number = 0 -) => { - let value = data[name]; - - let cleanValue: string | undefined; - if (value === undefined) { - cleanValue = defaultValue; - } else if (typeof value === "string") { - cleanValue = value as string; - } else if (typeof value === "number") { - cleanValue = String(value); - } else if (typeof value === "boolean") { - cleanValue = String(value); - } else if (value as CustomFieldValue) { - cleanValue = (value as CustomFieldValue).displayValue ?? (value as CustomFieldValue).value.toString(); - } - - if (readOnly) { - return ( - - ); - } else { - return ( - - ); - } -}; - -export const renderInputNumber = ( - name: string, - label: string, - data: FormData, - errors: FormError, - readOnly = false, - defaultValue: string = "", - min?: number, - max?: number, - step: number = 1, - onChange?: (e: React.ChangeEvent) => void -) => { - let value = data[name]; - - let cleanValue: string | undefined; - if (value === undefined) { - cleanValue = defaultValue; - } else if (typeof value === "string") { - cleanValue = value as string; - } else if (typeof value === "number") { - cleanValue = String(value); - } else if (typeof value === "boolean") { - cleanValue = String(value); - } else if (value as CustomFieldValue) { - cleanValue = (value as CustomFieldValue).displayValue ?? (value as CustomFieldValue).value.toString(); - } - - if (readOnly) { - return ; - } else { - return ( - - ); - } -}; - -export const renderInputTextarea = ( - includeLabel: boolean, - name: string, - label: string, - data: FormData, - errors: FormError, - readOnly = false, - defaultValue: string = "", - onTextAreaChange?: (e: React.ChangeEvent) => void -) => { - let value = data[name]; - - let cleanValue: string | undefined; - if (value === undefined) { - cleanValue = defaultValue; - } else if (typeof value === "string") { - cleanValue = value as string; - } - - if (readOnly) { - return ( - - ); - } else { - return ( - - ); - } -}; - -export const renderCustomFieldInput = ( - includeLabel: boolean, - name: string, - label: string, - data: FormData, - errors: FormError, - type: InputType = InputType.text, - readOnly = false, - defaultValue: string = "", - onChange?: (e: React.ChangeEvent) => void -) => { - let value = data[name]; - - let cleanValue: string | undefined; - if (value === undefined) { - cleanValue = defaultValue; - } else if (typeof value === "string") { - cleanValue = value as string; - } else if (typeof value === "number") { - cleanValue = String(value); - } else if (typeof value === "boolean") { - cleanValue = String(value); - } else if (value as CustomFieldValue) { - const customFieldValue = value as CustomFieldValue[]; - cleanValue = customFieldValue[0].displayValue ?? customFieldValue[0].value?.toString(); - } - - if (readOnly) { - return ; - } else { - return ( - - ); - } -}; - -export const renderCustomFieldNumber = ( - includeLabel: boolean, - name: string, - label: string, - data: FormData, - errors: FormError, - readOnly = false, - defaultValue: string = "", - min?: number, - max?: number, - step: number = 1, - onChange?: (e: React.ChangeEvent) => void -) => { - let values: CustomFieldValue[] = data[name] as CustomFieldValue[]; - - let value: CustomFieldValue | undefined = undefined; - - if (values) { - if (values.length > 0) { - value = values[0]; - } - } - - let cleanValue: string | undefined; - if (value === undefined) { - cleanValue = defaultValue; - } else if (typeof value === "string") { - cleanValue = value as string; - } else if (typeof value === "number") { - cleanValue = String(value); - } else if (value as CustomFieldValue) { - cleanValue = (value as CustomFieldValue).displayValue ?? (value as CustomFieldValue).value?.toString(); - } - - if (readOnly) { - return ; - } else { - return ( - - ); - } -}; - -export const renderTemplateEditor = ( - className: string, - name: string, - label: string, - data: FormData, - allowCustomFields: boolean, - onChange?: (name: string, value: string) => void -) => { - let value = data[name] as string; - - return ( -
- - -
- ); -}; - -export const renderSelect = ( - name: string, - label: string, - data: FormData, - errors: FormError, - options: Option[], - onChange?: (e: React.ChangeEvent) => void -) => { - return