Remove ID field + fix relations + remove runs (#12796)
- id field should only be available for search records action
- create record action does not work for relations. Requires to send
`accountOwner: { id: string }` instead of `accountOwner: string`
- hidding `runs` for version views as we did for workflows
This commit is contained in:
@ -2,7 +2,9 @@ import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilte
|
||||
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
|
||||
import { formatFieldMetadataItemAsFieldDefinition } from '@/object-metadata/utils/formatFieldMetadataItemAsFieldDefinition';
|
||||
import { FormFieldInput } from '@/object-record/record-field/components/FormFieldInput';
|
||||
import { isFieldRelation } from '@/object-record/record-field/types/guards/isFieldRelation';
|
||||
import { Select } from '@/ui/input/components/Select';
|
||||
import { GenericDropdownContentWidth } from '@/ui/layout/dropdown/constants/GenericDropdownContentWidth';
|
||||
import { useViewOrDefaultViewFromPrefetchedViews } from '@/views/hooks/useViewOrDefaultViewFromPrefetchedViews';
|
||||
import { WorkflowCreateRecordAction } from '@/workflow/types/Workflow';
|
||||
import { WorkflowStepBody } from '@/workflow/workflow-steps/components/WorkflowStepBody';
|
||||
@ -10,14 +12,14 @@ import { WorkflowStepHeader } from '@/workflow/workflow-steps/components/Workflo
|
||||
import { useWorkflowActionHeader } from '@/workflow/workflow-steps/workflow-actions/hooks/useWorkflowActionHeader';
|
||||
import { shouldDisplayFormField } from '@/workflow/workflow-steps/workflow-actions/utils/shouldDisplayFormField';
|
||||
import { WorkflowVariablePicker } from '@/workflow/workflow-variables/components/WorkflowVariablePicker';
|
||||
import { useTheme } from '@emotion/react';
|
||||
import { useEffect, useState } from 'react';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { HorizontalSeparator, useIcons } from 'twenty-ui/display';
|
||||
import { SelectOption } from 'twenty-ui/input';
|
||||
import { JsonValue } from 'type-fest';
|
||||
import { useDebouncedCallback } from 'use-debounce';
|
||||
import { GenericDropdownContentWidth } from '@/ui/layout/dropdown/constants/GenericDropdownContentWidth';
|
||||
import { useTheme } from '@emotion/react';
|
||||
import { RelationType } from '~/generated-metadata/graphql';
|
||||
|
||||
type WorkflowEditActionCreateRecordProps = {
|
||||
action: WorkflowCreateRecordAction;
|
||||
@ -31,9 +33,13 @@ type WorkflowEditActionCreateRecordProps = {
|
||||
};
|
||||
};
|
||||
|
||||
type RelationManyToOneField = {
|
||||
id: string;
|
||||
};
|
||||
|
||||
type CreateRecordFormData = {
|
||||
objectName: string;
|
||||
[field: string]: unknown;
|
||||
[field: string]: RelationManyToOneField | JsonValue;
|
||||
};
|
||||
|
||||
const sortByViewFieldPosition = (
|
||||
@ -77,6 +83,7 @@ export const WorkflowEditActionCreateRecord = ({
|
||||
objectName: action.settings.input.objectName,
|
||||
...action.settings.input.objectRecord,
|
||||
});
|
||||
|
||||
const isFormDisabled = actionOptions.readonly;
|
||||
|
||||
const objectNameSingular = formData.objectName;
|
||||
@ -123,9 +130,27 @@ export const WorkflowEditActionCreateRecord = ({
|
||||
fieldName: keyof CreateRecordFormData,
|
||||
updatedValue: JsonValue,
|
||||
) => {
|
||||
const fieldDefinition = inlineFieldDefinitions?.find(
|
||||
(definition) => definition.metadata.fieldName === fieldName,
|
||||
);
|
||||
|
||||
if (!isDefined(fieldDefinition)) {
|
||||
return;
|
||||
}
|
||||
|
||||
const isFieldRelationManyToOne =
|
||||
isFieldRelation(fieldDefinition) &&
|
||||
fieldDefinition.metadata.relationType === RelationType.MANY_TO_ONE;
|
||||
|
||||
const fieldValue = isFieldRelationManyToOne
|
||||
? {
|
||||
id: updatedValue,
|
||||
}
|
||||
: updatedValue;
|
||||
|
||||
const newFormData: CreateRecordFormData = {
|
||||
...formData,
|
||||
[fieldName]: updatedValue,
|
||||
[fieldName]: fieldValue,
|
||||
};
|
||||
|
||||
setFormData(newFormData);
|
||||
@ -211,16 +236,26 @@ export const WorkflowEditActionCreateRecord = ({
|
||||
|
||||
<HorizontalSeparator noMargin />
|
||||
|
||||
{inlineFieldDefinitions?.map((field) => {
|
||||
const currentValue = formData[field.metadata.fieldName] as JsonValue;
|
||||
{inlineFieldDefinitions?.map((fieldDefinition) => {
|
||||
const isFieldRelationManyToOne =
|
||||
isFieldRelation(fieldDefinition) &&
|
||||
fieldDefinition.metadata.relationType === RelationType.MANY_TO_ONE;
|
||||
|
||||
const currentValue = isFieldRelationManyToOne
|
||||
? (
|
||||
formData[
|
||||
fieldDefinition.metadata.fieldName
|
||||
] as RelationManyToOneField
|
||||
)?.id
|
||||
: (formData[fieldDefinition.metadata.fieldName] as JsonValue);
|
||||
|
||||
return (
|
||||
<FormFieldInput
|
||||
key={field.metadata.fieldName}
|
||||
key={fieldDefinition.metadata.fieldName}
|
||||
defaultValue={currentValue}
|
||||
field={field}
|
||||
field={fieldDefinition}
|
||||
onChange={(value) => {
|
||||
handleFieldChange(field.metadata.fieldName, value);
|
||||
handleFieldChange(fieldDefinition.metadata.fieldName, value);
|
||||
}}
|
||||
VariablePicker={WorkflowVariablePicker}
|
||||
readonly={isFormDisabled}
|
||||
|
||||
@ -7,20 +7,20 @@ import { formatFieldMetadataItemAsFieldDefinition } from '@/object-metadata/util
|
||||
import { FormFieldInput } from '@/object-record/record-field/components/FormFieldInput';
|
||||
import { FormSingleRecordPicker } from '@/object-record/record-field/form-types/components/FormSingleRecordPicker';
|
||||
import { isFieldRelation } from '@/object-record/record-field/types/guards/isFieldRelation';
|
||||
import { GenericDropdownContentWidth } from '@/ui/layout/dropdown/constants/GenericDropdownContentWidth';
|
||||
import { WorkflowFieldsMultiSelect } from '@/workflow/components/WorkflowEditUpdateEventFieldsMultiSelect';
|
||||
import { WorkflowStepBody } from '@/workflow/workflow-steps/components/WorkflowStepBody';
|
||||
import { WorkflowStepHeader } from '@/workflow/workflow-steps/components/WorkflowStepHeader';
|
||||
import { useWorkflowActionHeader } from '@/workflow/workflow-steps/workflow-actions/hooks/useWorkflowActionHeader';
|
||||
import { shouldDisplayFormField } from '@/workflow/workflow-steps/workflow-actions/utils/shouldDisplayFormField';
|
||||
import { WorkflowVariablePicker } from '@/workflow/workflow-variables/components/WorkflowVariablePicker';
|
||||
import { useTheme } from '@emotion/react';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { HorizontalSeparator, useIcons } from 'twenty-ui/display';
|
||||
import { SelectOption } from 'twenty-ui/input';
|
||||
import { JsonValue } from 'type-fest';
|
||||
import { useDebouncedCallback } from 'use-debounce';
|
||||
import { RelationType } from '~/generated-metadata/graphql';
|
||||
import { useTheme } from '@emotion/react';
|
||||
import { GenericDropdownContentWidth } from '@/ui/layout/dropdown/constants/GenericDropdownContentWidth';
|
||||
|
||||
type WorkflowEditActionUpdateRecordProps = {
|
||||
action: WorkflowUpdateRecordAction;
|
||||
@ -65,6 +65,7 @@ export const WorkflowEditActionUpdateRecord = ({
|
||||
fieldsToUpdate: action.settings.input.fieldsToUpdate ?? [],
|
||||
...action.settings.input.objectRecord,
|
||||
});
|
||||
|
||||
const isFormDisabled = actionOptions.readonly;
|
||||
|
||||
const handleFieldChange = (
|
||||
|
||||
@ -41,24 +41,30 @@ export const shouldDisplayFormField = ({
|
||||
isTypeAllowedForAction =
|
||||
fieldMetadataItem.type !== FieldMetadataType.RELATION ||
|
||||
fieldMetadataItem.settings?.['relationType'] === 'MANY_TO_ONE';
|
||||
break;
|
||||
return (
|
||||
isTypeAllowedForAction &&
|
||||
!fieldMetadataItem.isSystem &&
|
||||
fieldMetadataItem.isActive
|
||||
);
|
||||
case 'UPDATE_RECORD':
|
||||
isTypeAllowedForAction =
|
||||
COMMON_DISPLAYABLE_FIELD_TYPES.includes(fieldMetadataItem.type) ||
|
||||
fieldMetadataItem.settings?.['relationType'] === 'MANY_TO_ONE';
|
||||
break;
|
||||
return (
|
||||
isTypeAllowedForAction &&
|
||||
!fieldMetadataItem.isSystem &&
|
||||
fieldMetadataItem.isActive
|
||||
);
|
||||
case 'FIND_RECORDS':
|
||||
isTypeAllowedForAction = FIND_RECORDS_DISPLAYABLE_FIELD_TYPES.includes(
|
||||
fieldMetadataItem.type,
|
||||
);
|
||||
break;
|
||||
return (
|
||||
isTypeAllowedForAction &&
|
||||
(!fieldMetadataItem.isSystem || isIdField) &&
|
||||
fieldMetadataItem.isActive
|
||||
);
|
||||
default:
|
||||
throw new Error(`Action "${actionType}" is not supported`);
|
||||
}
|
||||
|
||||
return (
|
||||
isTypeAllowedForAction &&
|
||||
(!fieldMetadataItem.isSystem || isIdField) &&
|
||||
fieldMetadataItem.isActive
|
||||
);
|
||||
};
|
||||
|
||||
@ -75,7 +75,7 @@ export const workflowVersionsAllView = (
|
||||
field.standardId === WORKFLOW_VERSION_STANDARD_FIELD_IDS.runs,
|
||||
)?.id ?? '',
|
||||
position: 4,
|
||||
isVisible: true,
|
||||
isVisible: false,
|
||||
size: 150,
|
||||
},
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user