Upgraded domain picker to make the blank first entry optional

This commit is contained in:
Colin Dawson 2026-02-10 23:22:58 +00:00
parent eec4b334d8
commit 854ba4bf1a
4 changed files with 31 additions and 2 deletions

View File

@ -531,6 +531,7 @@ export const renderDomainPicker = (
errors: FormError, errors: FormError,
minEntries: number, minEntries: number,
maxEntries?: number, maxEntries?: number,
includeBlankFirstEntry?: boolean,
onChange?: (name: string, values: CustomFieldValue[]) => void, onChange?: (name: string, values: CustomFieldValue[]) => void,
) => { ) => {
const domainValues: CustomFieldValue[] | undefined = data[ const domainValues: CustomFieldValue[] | undefined = data[
@ -545,6 +546,7 @@ export const renderDomainPicker = (
minEntries={minEntries} minEntries={minEntries}
maxEntries={maxEntries} maxEntries={maxEntries}
values={domainValues} values={domainValues}
includeBlankFirstEntry={includeBlankFirstEntry}
error={errors[name]} error={errors[name]}
onChange={onChange} onChange={onChange}
/> />

View File

@ -14,6 +14,7 @@ interface DomainPickerProps {
values: CustomFieldValue[]; values: CustomFieldValue[];
minEntries?: number; minEntries?: number;
maxEntries?: number; maxEntries?: number;
includeBlankFirstEntry?: boolean;
onChange?: (name: string, value: CustomFieldValue[]) => void; onChange?: (name: string, value: CustomFieldValue[]) => void;
} }
@ -25,6 +26,7 @@ export default function DomainPicker({
values, values,
minEntries, minEntries,
maxEntries, maxEntries,
includeBlankFirstEntry,
onChange, onChange,
}: DomainPickerProps) { }: DomainPickerProps) {
const [options, setOptions] = useState<Option[]>([]); const [options, setOptions] = useState<Option[]>([]);
@ -114,7 +116,7 @@ export default function DomainPicker({
error={error} error={error}
value={value} value={value}
options={options} options={options}
includeBlankFirstEntry={true} includeBlankFirstEntry={includeBlankFirstEntry ?? true}
onChange={handleChange} onChange={handleChange}
/> />
); );

View File

@ -17,6 +17,8 @@ import {
} from "../../../components/common/formHelpers"; } from "../../../components/common/formHelpers";
import { useForm } from "../../../components/common/useForm"; import { useForm } from "../../../components/common/useForm";
import ErrorBlock from "../../../components/common/ErrorBlock"; import ErrorBlock from "../../../components/common/ErrorBlock";
import authentication from "../../frame/services/authenticationService";
import { MakeGeneralIdRef } from "../../../utils/GeneralIdRef";
const WorkflowTemplateDetails: React.FC<{ editMode: boolean }> = ({ const WorkflowTemplateDetails: React.FC<{ editMode: boolean }> = ({
editMode, editMode,
@ -29,7 +31,7 @@ const WorkflowTemplateDetails: React.FC<{ editMode: boolean }> = ({
loaded: false, loaded: false,
data: { data: {
name: "", name: "",
domainId: {}, domainId: [] as CustomFieldValue[],
activityNameTemplate: "", activityNameTemplate: "",
description: "", description: "",
} as CreateWorkflowTemplateVersion, } as CreateWorkflowTemplateVersion,
@ -51,6 +53,7 @@ const WorkflowTemplateDetails: React.FC<{ editMode: boolean }> = ({
.max(450) .max(450)
.label(t("ActivityNameTemplate")), .label(t("ActivityNameTemplate")),
description: Joi.string().required().label(t("Description")), description: Joi.string().required().label(t("Description")),
domainId: Joi.required(),
}; };
// ----------------------------- // -----------------------------
@ -72,6 +75,11 @@ const WorkflowTemplateDetails: React.FC<{ editMode: boolean }> = ({
} catch (ex: any) { } catch (ex: any) {
form.handleGeneralError(ex); form.handleGeneralError(ex);
} }
} else {
const user = authentication.getCurrentUser();
newData.domainId = [
{ value: MakeGeneralIdRef(user?.domainid) } as CustomFieldValue,
];
} }
form.setState({ ...form.state, loaded: true, data: newData }); form.setState({ ...form.state, loaded: true, data: newData });
@ -121,6 +129,7 @@ const WorkflowTemplateDetails: React.FC<{ editMode: boolean }> = ({
errors={errors} errors={errors}
isEditMode={editMode} isEditMode={editMode}
onFieldChange={form.handleChange} onFieldChange={form.handleChange}
handleDomainPickerChange={form.handleDomainPickerChange}
/> />
</Tab>, </Tab>,

View File

@ -5,20 +5,24 @@ import { InputType } from "../../../../components/common/Input";
import { import {
renderInput, renderInput,
renderError, renderError,
renderDomainPicker,
} from "../../../../components/common/formHelpers"; } from "../../../../components/common/formHelpers";
import { CreateWorkflowTemplateVersion } from "../services/WorkflowTemplateService"; import { CreateWorkflowTemplateVersion } from "../services/WorkflowTemplateService";
import { CustomFieldValue } from "../../glossary/services/glossaryService";
interface GeneralTabProps { interface GeneralTabProps {
data: CreateWorkflowTemplateVersion; data: CreateWorkflowTemplateVersion;
errors: Record<string, string>; errors: Record<string, string>;
isEditMode: boolean; isEditMode: boolean;
onFieldChange: (e: React.ChangeEvent<HTMLInputElement>) => void; onFieldChange: (e: React.ChangeEvent<HTMLInputElement>) => void;
handleDomainPickerChange: (name: string, values: CustomFieldValue[]) => void;
} }
const GeneralTab: React.FC<GeneralTabProps> = ({ const GeneralTab: React.FC<GeneralTabProps> = ({
data, data,
errors, errors,
onFieldChange, onFieldChange,
handleDomainPickerChange,
}) => { }) => {
const { t } = useTranslation<typeof Namespaces.Common>(); const { t } = useTranslation<typeof Namespaces.Common>();
@ -26,6 +30,18 @@ const GeneralTab: React.FC<GeneralTabProps> = ({
<div> <div>
{renderError("_general", errors)} {renderError("_general", errors)}
{renderDomainPicker(
true,
"domainId",
t("Domain"),
data,
errors,
1,
1,
false,
handleDomainPickerChange,
)}
{renderInput( {renderInput(
"name", "name",
t("WorkflowTemplateName"), t("WorkflowTemplateName"),