From 592befe09a60d1e3bfe92590f022795ef0cb6036 Mon Sep 17 00:00:00 2001 From: Ephraim Atta-Duncan Date: Sat, 23 Aug 2025 04:40:58 +0000 Subject: [PATCH] feat: change direction of radio field --- .../document-signing-radio-field.tsx | 17 ++++++- packages/lib/types/field-meta.ts | 1 + .../document-flow/field-content.tsx | 11 +++- .../field-item-advanced-settings.tsx | 1 + .../radio-field.tsx | 50 ++++++++++++++++++- 5 files changed, 74 insertions(+), 6 deletions(-) diff --git a/apps/remix/app/components/general/document-signing/document-signing-radio-field.tsx b/apps/remix/app/components/general/document-signing/document-signing-radio-field.tsx index c0c60af79..7771609c4 100644 --- a/apps/remix/app/components/general/document-signing/document-signing-radio-field.tsx +++ b/apps/remix/app/components/general/document-signing/document-signing-radio-field.tsx @@ -14,6 +14,7 @@ import type { TRemovedSignedFieldWithTokenMutationSchema, TSignFieldWithTokenMutationSchema, } from '@documenso/trpc/server/field-router/schema'; +import { cn } from '@documenso/ui/lib/utils'; import { Label } from '@documenso/ui/primitives/label'; import { RadioGroup, RadioGroupItem } from '@documenso/ui/primitives/radio-group'; import { useToast } from '@documenso/ui/primitives/use-toast'; @@ -156,7 +157,12 @@ export const DocumentSigningRadioField = ({ {!field.inserted && ( handleSelectItem(value)} - className="z-10 my-0.5 gap-y-1" + className={cn( + 'z-10 my-0.5 gap-1', + parsedFieldMeta.direction === 'horizontal' + ? 'flex flex-row flex-wrap' + : 'flex flex-col gap-y-1', + )} > {values?.map((item, index) => (
@@ -181,7 +187,14 @@ export const DocumentSigningRadioField = ({ )} {field.inserted && ( - + {values?.map((item, index) => (
; diff --git a/packages/ui/primitives/document-flow/field-content.tsx b/packages/ui/primitives/document-flow/field-content.tsx index f8eec0092..2a48de2e0 100644 --- a/packages/ui/primitives/document-flow/field-content.tsx +++ b/packages/ui/primitives/document-flow/field-content.tsx @@ -108,8 +108,15 @@ export const FieldContent = ({ field, documentMeta }: FieldIconProps) => { field.fieldMeta.values.length > 0 ) { return ( -
- +
+ {field.fieldMeta.values.map((item, index) => (
{ values: [], required: false, readOnly: false, + direction: 'vertical', }; case FieldType.CHECKBOX: return { diff --git a/packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx b/packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx index cca9aaf8d..620f32e6d 100644 --- a/packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx +++ b/packages/ui/primitives/document-flow/field-items-advanced-settings/radio-field.tsx @@ -11,6 +11,13 @@ import { Button } from '@documenso/ui/primitives/button'; import { Checkbox } from '@documenso/ui/primitives/checkbox'; import { Input } from '@documenso/ui/primitives/input'; import { Label } from '@documenso/ui/primitives/label'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@documenso/ui/primitives/select'; import { Switch } from '@documenso/ui/primitives/switch'; export type RadioFieldAdvancedSettingsProps = { @@ -35,6 +42,9 @@ export const RadioFieldAdvancedSettings = ({ ); const [readOnly, setReadOnly] = useState(fieldState.readOnly ?? false); const [required, setRequired] = useState(fieldState.required ?? false); + const [direction, setDirection] = useState<'vertical' | 'horizontal'>( + fieldState.direction ?? 'vertical', + ); const addValue = () => { const newId = values.length > 0 ? Math.max(...values.map((val) => val.id)) + 1 : 1; @@ -69,10 +79,19 @@ export const RadioFieldAdvancedSettings = ({ const handleToggleChange = (field: keyof RadioFieldMeta, value: string | boolean) => { const readOnly = field === 'readOnly' ? Boolean(value) : Boolean(fieldState.readOnly); const required = field === 'required' ? Boolean(value) : Boolean(fieldState.required); + const currentDirection = + field === 'direction' && String(value) === 'horizontal' ? 'horizontal' : 'vertical'; setReadOnly(readOnly); setRequired(required); + setDirection(currentDirection); - const errors = validateRadioField(String(value), { readOnly, required, values, type: 'radio' }); + const errors = validateRadioField(String(value), { + readOnly, + required, + values, + type: 'radio', + direction: currentDirection, + }); handleErrors(errors); handleFieldChange(field, value); @@ -97,7 +116,13 @@ export const RadioFieldAdvancedSettings = ({ }, [fieldState.values]); useEffect(() => { - const errors = validateRadioField(undefined, { readOnly, required, values, type: 'radio' }); + const errors = validateRadioField(undefined, { + readOnly, + required, + values, + type: 'radio', + direction, + }); handleErrors(errors); }, [values]); @@ -116,6 +141,27 @@ export const RadioFieldAdvancedSettings = ({ onChange={(e) => handleFieldChange('label', e.target.value)} />
+
+ + +