diff --git a/public/locales/en/common.json b/public/locales/en/common.json index c15fe15..3c925f7 100644 --- a/public/locales/en/common.json +++ b/public/locales/en/common.json @@ -37,6 +37,7 @@ "ConfirmEmailResent": "Confirm e-mail resent", "ConfirmPassword": "Confirm Password", "Continuous": "Continuous", + "CreateActivity": "Create Activity", "Created": "Created", "CustomField": "Custom Field", "CustomFieldEdited": "Custom Field edited", diff --git a/src/App.tsx b/src/App.tsx index 8ddda54..0903d47 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -46,6 +46,7 @@ import SsoProviderDetails from "./modules/manager/ssoManager/SsoProviderDetails" import { Namespaces } from "./i18n/i18n"; import WorkflowTemplateManager from "./modules/manager/workflowTemplates/WorkflowTemplateManager"; import WorkflowTemplateDetails from "./modules/manager/workflowTemplates/WorkflowTemplateDetails"; +import CreateActivity from "./modules/manager/activity/CreateActivity"; function GetSecureRoutes() { const { t } = useTranslation(Namespaces.Common); @@ -84,7 +85,6 @@ function GetSecureRoutes() { } /> - } /> - } /> - } /> - } /> } /> - } /> - } /> - } /> - } /> - } /> - } /> + + + + } + /> void, +) => { + const templateValue: GeneralIdRef = data[name] as any as GeneralIdRef; + + return ( + + ); +}; + export const renderUserPicker = ( name: string, label: string, diff --git a/src/components/common/useForm.ts b/src/components/common/useForm.ts index c8bb7ca..457cebd 100644 --- a/src/components/common/useForm.ts +++ b/src/components/common/useForm.ts @@ -87,6 +87,10 @@ interface UseFormReturn { ) => void; handleTemplateFormPickerChange: (name: string, value: GeneralIdRef) => void; handleUserPickerChange: (name: string, value: GeneralIdRef) => void; + handleWorkflowTemplatePickerChange: ( + name: string, + value: GeneralIdRef, + ) => void; handleSsoProviderPickerChange: (name: string, value: GeneralIdRef) => void; handleToggleChange: (e: React.ChangeEvent) => void; setState: (updates: Partial) => void; @@ -529,6 +533,17 @@ export const useForm = (initialState: FormState): UseFormReturn => { [state.data, validate, setState], ); + const handleWorkflowTemplatePickerChange = useCallback( + (name: string, value: GeneralIdRef) => { + const data: FormData = { ...state.data }; + data[name] = value; + const errors = validate(data); + + setState({ data, errors }); + }, + [state.data, validate, setState], + ); + const handleUserPickerChange = useCallback( (name: string, value: GeneralIdRef) => { const data: FormData = { ...state.data }; @@ -663,6 +678,7 @@ export const useForm = (initialState: FormState): UseFormReturn => { handleTemplateFormPickerChange, handleUserPickerChange, handleSsoProviderPickerChange, + handleWorkflowTemplatePickerChange, handleToggleChange, handleTasksChange, setState, @@ -693,6 +709,7 @@ export const useForm = (initialState: FormState): UseFormReturn => { handleTemplateFormPickerChange, handleUserPickerChange, handleSsoProviderPickerChange, + handleWorkflowTemplatePickerChange, handleToggleChange, handleTasksChange, setState, diff --git a/src/components/pickers/WorkflowTemplatePicker.tsx b/src/components/pickers/WorkflowTemplatePicker.tsx new file mode 100644 index 0000000..e9c6662 --- /dev/null +++ b/src/components/pickers/WorkflowTemplatePicker.tsx @@ -0,0 +1,83 @@ +import React, { useEffect, useState, useCallback } from "react"; +import Select from "../common/Select"; +import Option from "../common/option"; +import { GeneralIdRef, MakeGeneralIdRef } from "../../utils/GeneralIdRef"; +import templateVersionsService from "../../modules/manager/workflowTemplates/services/WorkflowTemplateService"; +import ErrorBlock from "../common/ErrorBlock"; + +interface WorkflowTemplatePickerProps { + includeLabel?: boolean; + name: string; + label: string; + error?: string; + value?: GeneralIdRef; + onChange?: (name: string, value: GeneralIdRef) => void; +} + +export default function WorkflowTemplatePicker({ + includeLabel, + name, + label, + error, + value, + onChange, +}: WorkflowTemplatePickerProps) { + const [options, setOptions] = useState([]); + + useEffect(() => { + async function load() { + const workflowTemplates = await templateVersionsService.getTemplates( + 0, + 10, + "name", + true, + ); + if (workflowTemplates) { + const opts: Option[] = (workflowTemplates.data as any[]).map((x) => ({ + _id: x.id, + name: x.workflowName, + })); + setOptions(opts); + } + } + + load(); + }, []); + + const doOnChange = useCallback( + (n: string, v: bigint) => { + const generalIdRef = MakeGeneralIdRef(v); + if (onChange) onChange(n, generalIdRef); + }, + [onChange], + ); + + const handleChange = useCallback( + (e: React.ChangeEvent) => { + const input = e.currentTarget; + doOnChange(input.name, BigInt(input.value)); + }, + [doOnChange], + ); + + let id = ""; + if (value !== undefined && !Number.isNaN(value.id)) { + id = String(value.id); + } + + return ( + <> +