384 update the input of the record show page inside the command menu (#10213)
Created a new component `RecordTitleCell` with an API close to `RecordInlineCell`. This new component is an autogrowing input. It consumes the `FieldContext`. It uses some hooks and states from `RecordInlineCell` because I didn't want to duplicate all the logic, but this logic could be duplicated. Two issues that I didn't solve in this PR: - There is a flashing glitch inside the input when typing - The input of a workflow isn't focused when creating a new one. This is because of an issue with the `useHotkeyScopeOnMount` hook which is deprecated but still used in some components. Upon redirection on the workflow showpage, the hokey scope of the input is overridden by the hokey scopes of the components which use `useHotkeyScopeOnMount`. I decided not to open the input for now. ## Command menu record show page ### Single input https://github.com/user-attachments/assets/50dc235c-8f34-4445-8b04-586125606bd5 ### Double input https://github.com/user-attachments/assets/bdcfd6eb-d25e-4006-a87f-6e615e8a6e7e ## Workflow breadcrumb https://github.com/user-attachments/assets/ded38dd6-5794-4779-a4ae-b3948567595a ## Record show page ### Single input https://github.com/user-attachments/assets/8ad7a606-556a-416b-8788-93415f7989e1 ### Double input https://github.com/user-attachments/assets/55aae40b-36ae-40f1-8171-06f1a5db3532
This commit is contained in:
@ -1,26 +1,35 @@
|
||||
import { FieldMetadataItem } from '@/object-metadata/types/FieldMetadataItem';
|
||||
import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord';
|
||||
import { useUpdateOneRecord } from '@/object-record/hooks/useUpdateOneRecord';
|
||||
import { EditableBreadcrumbItem } from '@/ui/navigation/bread-crumb/components/EditableBreadcrumbItem';
|
||||
import { FieldContext } from '@/object-record/record-field/contexts/FieldContext';
|
||||
import { InlineCellHotkeyScope } from '@/object-record/record-inline-cell/types/InlineCellHotkeyScope';
|
||||
import { useRecordShowContainerActions } from '@/object-record/record-show/hooks/useRecordShowContainerActions';
|
||||
import { RecordTitleCell } from '@/object-record/record-title-cell/components/RecordTitleCell';
|
||||
import styled from '@emotion/styled';
|
||||
import { capitalize } from 'twenty-shared';
|
||||
import { FieldMetadataType, capitalize } from 'twenty-shared';
|
||||
|
||||
const StyledEditableTitleContainer = styled.div`
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
overflow-x: hidden;
|
||||
width: 100%;
|
||||
`;
|
||||
|
||||
const StyledEditableTitlePrefix = styled.div`
|
||||
color: ${({ theme }) => theme.font.color.tertiary};
|
||||
display: flex;
|
||||
flex: 1 0 auto;
|
||||
flex-direction: row;
|
||||
gap: ${({ theme }) => theme.spacing(1)};
|
||||
padding: ${({ theme }) => theme.spacing(0.75)};
|
||||
`;
|
||||
|
||||
const StyledTitle = styled.div`
|
||||
max-width: 100%;
|
||||
overflow: hidden;
|
||||
padding-right: ${({ theme }) => theme.spacing(1)};
|
||||
width: fit-content;
|
||||
`;
|
||||
|
||||
export const ObjectRecordShowPageBreadcrumb = ({
|
||||
objectNameSingular,
|
||||
objectRecordId,
|
||||
@ -40,22 +49,12 @@ export const ObjectRecordShowPageBreadcrumb = ({
|
||||
},
|
||||
});
|
||||
|
||||
const { updateOneRecord } = useUpdateOneRecord({
|
||||
const { useUpdateOneObjectRecordMutation } = useRecordShowContainerActions({
|
||||
objectNameSingular,
|
||||
recordGqlFields: {
|
||||
[labelIdentifierFieldMetadataItem?.name ?? 'name']: true,
|
||||
},
|
||||
objectRecordId,
|
||||
recordFromStore: record ?? null,
|
||||
});
|
||||
|
||||
const handleSubmit = (value: string) => {
|
||||
updateOneRecord({
|
||||
idToUpdate: objectRecordId,
|
||||
updateOneRecordInput: {
|
||||
name: value,
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
if (loading) {
|
||||
return null;
|
||||
}
|
||||
@ -66,13 +65,35 @@ export const ObjectRecordShowPageBreadcrumb = ({
|
||||
{capitalize(objectLabelPlural)}
|
||||
<span>{' / '}</span>
|
||||
</StyledEditableTitlePrefix>
|
||||
<EditableBreadcrumbItem
|
||||
defaultValue={record?.name ?? ''}
|
||||
noValuePlaceholder={labelIdentifierFieldMetadataItem?.label ?? 'Name'}
|
||||
placeholder={labelIdentifierFieldMetadataItem?.label ?? 'Name'}
|
||||
onSubmit={handleSubmit}
|
||||
hotkeyScope="editable-breadcrumb-item"
|
||||
/>
|
||||
<StyledTitle>
|
||||
<FieldContext.Provider
|
||||
value={{
|
||||
recordId: objectRecordId,
|
||||
recoilScopeId:
|
||||
objectRecordId + labelIdentifierFieldMetadataItem?.id,
|
||||
isLabelIdentifier: false,
|
||||
fieldDefinition: {
|
||||
type:
|
||||
labelIdentifierFieldMetadataItem?.type ||
|
||||
FieldMetadataType.TEXT,
|
||||
iconName: '',
|
||||
fieldMetadataId: labelIdentifierFieldMetadataItem?.id ?? '',
|
||||
label: labelIdentifierFieldMetadataItem?.label || '',
|
||||
metadata: {
|
||||
fieldName: labelIdentifierFieldMetadataItem?.name || '',
|
||||
objectMetadataNameSingular: objectNameSingular,
|
||||
},
|
||||
defaultValue: labelIdentifierFieldMetadataItem?.defaultValue,
|
||||
},
|
||||
useUpdateRecord: useUpdateOneObjectRecordMutation,
|
||||
hotkeyScope: InlineCellHotkeyScope.InlineCell,
|
||||
isCentered: false,
|
||||
isDisplayModeFixHeight: true,
|
||||
}}
|
||||
>
|
||||
<RecordTitleCell sizeVariant="sm" />
|
||||
</FieldContext.Provider>
|
||||
</StyledTitle>
|
||||
</StyledEditableTitleContainer>
|
||||
);
|
||||
};
|
||||
|
||||
@ -7,11 +7,13 @@ import { InlineCellHotkeyScope } from '@/object-record/record-inline-cell/types/
|
||||
import { RightDrawerTitleRecordInlineCell } from '@/object-record/record-right-drawer/components/RightDrawerTitleRecordInlineCell';
|
||||
import { useRecordShowContainerActions } from '@/object-record/record-show/hooks/useRecordShowContainerActions';
|
||||
import { useRecordShowContainerData } from '@/object-record/record-show/hooks/useRecordShowContainerData';
|
||||
import { RecordTitleCell } from '@/object-record/record-title-cell/components/RecordTitleCell';
|
||||
import { ShowPageSummaryCard } from '@/ui/layout/show-page/components/ShowPageSummaryCard';
|
||||
import { ShowPageSummaryCardSkeletonLoader } from '@/ui/layout/show-page/components/ShowPageSummaryCardSkeletonLoader';
|
||||
import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile';
|
||||
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import { FieldMetadataType } from '~/generated/graphql';
|
||||
import { FeatureFlagKey, FieldMetadataType } from '~/generated/graphql';
|
||||
|
||||
type SummaryCardProps = {
|
||||
objectNameSingular: string;
|
||||
@ -53,6 +55,10 @@ export const SummaryCard = ({
|
||||
isRecordDeleted: recordFromStore?.isDeleted,
|
||||
});
|
||||
|
||||
const isCommandMenuV2Enabled = useIsFeatureEnabled(
|
||||
FeatureFlagKey.IsCommandMenuV2Enabled,
|
||||
);
|
||||
|
||||
if (isNewRightDrawerItemLoading || !isDefined(recordFromStore)) {
|
||||
return <ShowPageSummaryCardSkeletonLoader />;
|
||||
}
|
||||
@ -93,7 +99,9 @@ export const SummaryCard = ({
|
||||
isDisplayModeFixHeight: true,
|
||||
}}
|
||||
>
|
||||
{isInRightDrawer ? (
|
||||
{isCommandMenuV2Enabled ? (
|
||||
<RecordTitleCell sizeVariant="md" />
|
||||
) : isInRightDrawer ? (
|
||||
<RightDrawerTitleRecordInlineCell />
|
||||
) : (
|
||||
<RecordInlineCell readonly={isReadOnly} />
|
||||
|
||||
@ -5,7 +5,7 @@ import { DEFAULT_CELL_SCOPE } from '@/object-record/record-table/record-table-ce
|
||||
import { useSelectedTableCellEditMode } from '@/object-record/record-table/record-table-cell/hooks/useSelectedTableCellEditMode';
|
||||
import { recordTablePendingRecordIdByGroupComponentFamilyState } from '@/object-record/record-table/states/recordTablePendingRecordIdByGroupComponentFamilyState';
|
||||
import { recordTablePendingRecordIdComponentState } from '@/object-record/record-table/states/recordTablePendingRecordIdComponentState';
|
||||
import { isUpdatingRecordEditableNameState } from '@/object-record/states/isUpdatingRecordEditableName';
|
||||
import { useRecordTitleCell } from '@/object-record/record-title-cell/hooks/useRecordTitleCell';
|
||||
import { getDropdownFocusIdForRecordField } from '@/object-record/utils/getDropdownFocusIdForRecordField';
|
||||
import { shouldRedirectToShowPageOnCreation } from '@/object-record/utils/shouldRedirectToShowPageOnCreation';
|
||||
import { AppPath } from '@/types/AppPath';
|
||||
@ -60,67 +60,59 @@ export const useCreateNewTableRecord = ({
|
||||
|
||||
const navigate = useNavigateApp();
|
||||
|
||||
const createNewTableRecord = useRecoilCallback(
|
||||
({ set }) =>
|
||||
async () => {
|
||||
const recordId = v4();
|
||||
const { openRecordTitleCell } = useRecordTitleCell();
|
||||
|
||||
if (isCommandMenuV2Enabled) {
|
||||
// TODO: Generalize this behaviour, there will be a view setting to specify
|
||||
// if the new record should be displayed in the side panel or on the record page
|
||||
if (
|
||||
shouldRedirectToShowPageOnCreation(objectMetadataItem.nameSingular)
|
||||
) {
|
||||
await createOneRecord({
|
||||
id: recordId,
|
||||
name: 'Untitled',
|
||||
});
|
||||
const createNewTableRecord = async () => {
|
||||
const recordId = v4();
|
||||
|
||||
navigate(AppPath.RecordShowPage, {
|
||||
objectNameSingular: objectMetadataItem.nameSingular,
|
||||
objectRecordId: recordId,
|
||||
});
|
||||
if (isCommandMenuV2Enabled) {
|
||||
// TODO: Generalize this behaviour, there will be a view setting to specify
|
||||
// if the new record should be displayed in the side panel or on the record page
|
||||
if (shouldRedirectToShowPageOnCreation(objectMetadataItem.nameSingular)) {
|
||||
await createOneRecord({
|
||||
id: recordId,
|
||||
name: 'Untitled',
|
||||
});
|
||||
|
||||
set(isUpdatingRecordEditableNameState, true);
|
||||
return;
|
||||
}
|
||||
navigate(AppPath.RecordShowPage, {
|
||||
objectNameSingular: objectMetadataItem.nameSingular,
|
||||
objectRecordId: recordId,
|
||||
});
|
||||
|
||||
await createOneRecord({ id: recordId });
|
||||
openRecordInCommandMenu(recordId, objectMetadataItem.nameSingular);
|
||||
// TODO: we should open the record title cell here but because
|
||||
// we are redirecting to the record show page, the hotkey scope will
|
||||
// be overridden by the hotkey scope on mount. We need to deprecate
|
||||
// the useHotkeyScopeOnMount hook.
|
||||
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
setPendingRecordId(recordId);
|
||||
setSelectedTableCellEditMode(-1, 0);
|
||||
setHotkeyScope(
|
||||
DEFAULT_CELL_SCOPE.scope,
|
||||
DEFAULT_CELL_SCOPE.customScopes,
|
||||
);
|
||||
await createOneRecord({ id: recordId });
|
||||
|
||||
if (isDefined(objectMetadataItem.labelIdentifierFieldMetadataId)) {
|
||||
setActiveDropdownFocusIdAndMemorizePrevious(
|
||||
getDropdownFocusIdForRecordField(
|
||||
recordId,
|
||||
objectMetadataItem.labelIdentifierFieldMetadataId,
|
||||
'table-cell',
|
||||
),
|
||||
);
|
||||
}
|
||||
},
|
||||
[
|
||||
createOneRecord,
|
||||
isCommandMenuV2Enabled,
|
||||
navigate,
|
||||
objectMetadataItem.labelIdentifierFieldMetadataId,
|
||||
objectMetadataItem.nameSingular,
|
||||
openRecordInCommandMenu,
|
||||
setActiveDropdownFocusIdAndMemorizePrevious,
|
||||
setHotkeyScope,
|
||||
setPendingRecordId,
|
||||
setSelectedTableCellEditMode,
|
||||
],
|
||||
);
|
||||
openRecordInCommandMenu(recordId, objectMetadataItem.nameSingular);
|
||||
|
||||
openRecordTitleCell({
|
||||
recordId,
|
||||
fieldMetadataId: objectMetadataItem.labelIdentifierFieldMetadataId,
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
setPendingRecordId(recordId);
|
||||
setSelectedTableCellEditMode(-1, 0);
|
||||
setHotkeyScope(DEFAULT_CELL_SCOPE.scope, DEFAULT_CELL_SCOPE.customScopes);
|
||||
|
||||
if (isDefined(objectMetadataItem.labelIdentifierFieldMetadataId)) {
|
||||
setActiveDropdownFocusIdAndMemorizePrevious(
|
||||
getDropdownFocusIdForRecordField(
|
||||
recordId,
|
||||
objectMetadataItem.labelIdentifierFieldMetadataId,
|
||||
'table-cell',
|
||||
),
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
const createNewTableRecordInGroup = useRecoilCallback(
|
||||
({ set }) =>
|
||||
|
||||
@ -0,0 +1,109 @@
|
||||
import { useContext } from 'react';
|
||||
|
||||
import { FieldContext } from '@/object-record/record-field/contexts/FieldContext';
|
||||
import { FieldFocusContextProvider } from '@/object-record/record-field/contexts/FieldFocusContextProvider';
|
||||
import { useIsFieldInputOnly } from '@/object-record/record-field/hooks/useIsFieldInputOnly';
|
||||
import { FieldInputEvent } from '@/object-record/record-field/types/FieldInputEvent';
|
||||
|
||||
import { useInlineCell } from '../../record-inline-cell/hooks/useInlineCell';
|
||||
|
||||
import { FieldInputClickOutsideEvent } from '@/object-record/record-field/meta-types/input/components/DateTimeFieldInput';
|
||||
import { RecordTitleCellContainer } from '@/object-record/record-title-cell/components/RecordTitleCellContainer';
|
||||
import {
|
||||
RecordTitleCellContext,
|
||||
RecordTitleCellContextProps,
|
||||
} from '@/object-record/record-title-cell/components/RecordTitleCellContext';
|
||||
import { RecordTitleCellFieldDisplay } from '@/object-record/record-title-cell/components/RecordTitleCellFieldDisplay';
|
||||
import { RecordTitleCellFieldInput } from '@/object-record/record-title-cell/components/RecordTitleCellFieldInput';
|
||||
import { getDropdownFocusIdForRecordField } from '@/object-record/utils/getDropdownFocusIdForRecordField';
|
||||
import { getRecordFieldInputId } from '@/object-record/utils/getRecordFieldInputId';
|
||||
import { activeDropdownFocusIdState } from '@/ui/layout/dropdown/states/activeDropdownFocusIdState';
|
||||
import { useRecoilCallback } from 'recoil';
|
||||
|
||||
type RecordTitleCellProps = {
|
||||
loading?: boolean;
|
||||
sizeVariant?: 'sm' | 'md';
|
||||
};
|
||||
|
||||
export const RecordTitleCell = ({
|
||||
loading,
|
||||
sizeVariant,
|
||||
}: RecordTitleCellProps) => {
|
||||
const { fieldDefinition, recordId } = useContext(FieldContext);
|
||||
|
||||
const isFieldInputOnly = useIsFieldInputOnly();
|
||||
|
||||
const { closeInlineCell } = useInlineCell();
|
||||
|
||||
const handleEnter: FieldInputEvent = (persistField) => {
|
||||
persistField();
|
||||
closeInlineCell();
|
||||
};
|
||||
|
||||
const handleEscape = () => {
|
||||
closeInlineCell();
|
||||
};
|
||||
|
||||
const handleTab: FieldInputEvent = (persistField) => {
|
||||
persistField();
|
||||
closeInlineCell();
|
||||
};
|
||||
|
||||
const handleShiftTab: FieldInputEvent = (persistField) => {
|
||||
persistField();
|
||||
closeInlineCell();
|
||||
};
|
||||
|
||||
const handleClickOutside: FieldInputClickOutsideEvent = useRecoilCallback(
|
||||
({ snapshot }) =>
|
||||
(persistField, event) => {
|
||||
const recordFieldDropdownId = getDropdownFocusIdForRecordField(
|
||||
recordId,
|
||||
fieldDefinition.fieldMetadataId,
|
||||
'inline-cell',
|
||||
);
|
||||
|
||||
const activeDropdownFocusId = snapshot
|
||||
.getLoadable(activeDropdownFocusIdState)
|
||||
.getValue();
|
||||
|
||||
if (recordFieldDropdownId !== activeDropdownFocusId) {
|
||||
return;
|
||||
}
|
||||
|
||||
event.stopImmediatePropagation();
|
||||
|
||||
persistField();
|
||||
closeInlineCell();
|
||||
},
|
||||
[closeInlineCell, fieldDefinition.fieldMetadataId, recordId],
|
||||
);
|
||||
|
||||
const recordTitleCellContextValue: RecordTitleCellContextProps = {
|
||||
editModeContent: (
|
||||
<RecordTitleCellFieldInput
|
||||
recordFieldInputId={getRecordFieldInputId(
|
||||
recordId,
|
||||
fieldDefinition?.metadata?.fieldName,
|
||||
)}
|
||||
onEnter={handleEnter}
|
||||
onEscape={handleEscape}
|
||||
onTab={handleTab}
|
||||
onShiftTab={handleShiftTab}
|
||||
onClickOutside={handleClickOutside}
|
||||
sizeVariant={sizeVariant}
|
||||
/>
|
||||
),
|
||||
displayModeContent: <RecordTitleCellFieldDisplay />,
|
||||
editModeContentOnly: isFieldInputOnly,
|
||||
loading: loading,
|
||||
};
|
||||
|
||||
return (
|
||||
<FieldFocusContextProvider>
|
||||
<RecordTitleCellContext.Provider value={recordTitleCellContextValue}>
|
||||
<RecordTitleCellContainer />
|
||||
</RecordTitleCellContext.Provider>
|
||||
</FieldFocusContextProvider>
|
||||
);
|
||||
};
|
||||
@ -0,0 +1,13 @@
|
||||
import { useInlineCell } from '@/object-record/record-inline-cell/hooks/useInlineCell';
|
||||
import { RecordTitleCellContext } from '@/object-record/record-title-cell/components/RecordTitleCellContext';
|
||||
import { useContext } from 'react';
|
||||
|
||||
export const RecordTitleCellContainer = () => {
|
||||
const { displayModeContent, editModeContent } = useContext(
|
||||
RecordTitleCellContext,
|
||||
);
|
||||
|
||||
const { isInlineCellInEditMode } = useInlineCell();
|
||||
|
||||
return <>{isInlineCellInEditMode ? editModeContent : displayModeContent}</>;
|
||||
};
|
||||
@ -0,0 +1,18 @@
|
||||
import { createContext, ReactElement } from 'react';
|
||||
|
||||
export type RecordTitleCellContextProps = {
|
||||
editModeContent?: ReactElement;
|
||||
editModeContentOnly?: boolean;
|
||||
displayModeContent?: ReactElement;
|
||||
loading?: boolean;
|
||||
};
|
||||
|
||||
const defaultRecordTitleCellContextProp: RecordTitleCellContextProps = {
|
||||
editModeContent: undefined,
|
||||
editModeContentOnly: false,
|
||||
displayModeContent: undefined,
|
||||
loading: false,
|
||||
};
|
||||
|
||||
export const RecordTitleCellContext =
|
||||
createContext<RecordTitleCellContextProps>(defaultRecordTitleCellContextProp);
|
||||
@ -0,0 +1,24 @@
|
||||
import { FieldContext } from '@/object-record/record-field/contexts/FieldContext';
|
||||
import { isFieldFullName } from '@/object-record/record-field/types/guards/isFieldFullName';
|
||||
import { isFieldText } from '@/object-record/record-field/types/guards/isFieldText';
|
||||
import { RecordTitleCellSingleTextDisplayMode } from '@/object-record/record-title-cell/components/RecordTitleCellTextFieldDisplay';
|
||||
import { RecordTitleFullNameFieldDisplay } from '@/object-record/record-title-cell/components/RecordTitleFullNameFieldDisplay';
|
||||
import { useContext } from 'react';
|
||||
|
||||
export const RecordTitleCellFieldDisplay = () => {
|
||||
const { fieldDefinition } = useContext(FieldContext);
|
||||
|
||||
if (!isFieldText(fieldDefinition) && !isFieldFullName(fieldDefinition)) {
|
||||
throw new Error('Field definition is not a text or full name field');
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
{isFieldText(fieldDefinition) ? (
|
||||
<RecordTitleCellSingleTextDisplayMode />
|
||||
) : isFieldFullName(fieldDefinition) ? (
|
||||
<RecordTitleFullNameFieldDisplay />
|
||||
) : null}
|
||||
</>
|
||||
);
|
||||
};
|
||||
@ -0,0 +1,66 @@
|
||||
import { useContext } from 'react';
|
||||
|
||||
import { RecordFieldInputScope } from '@/object-record/record-field/scopes/RecordFieldInputScope';
|
||||
import { getScopeIdFromComponentId } from '@/ui/utilities/recoil-scope/utils/getScopeIdFromComponentId';
|
||||
|
||||
import { FieldContext } from '@/object-record/record-field/contexts/FieldContext';
|
||||
import { FieldInputEvent } from '@/object-record/record-field/types/FieldInputEvent';
|
||||
import { isFieldFullName } from '@/object-record/record-field/types/guards/isFieldFullName';
|
||||
import { isFieldText } from '@/object-record/record-field/types/guards/isFieldText';
|
||||
import { RecordTitleCellTextFieldInput } from '@/object-record/record-title-cell/components/RecordTitleCellTextFieldInput';
|
||||
import { RecordTitleFullNameFieldInput } from '@/object-record/record-title-cell/components/RecordTitleFullNameFieldInput';
|
||||
|
||||
type RecordTitleCellFieldInputProps = {
|
||||
recordFieldInputId: string;
|
||||
onClickOutside?: (
|
||||
persist: () => void,
|
||||
event: MouseEvent | TouchEvent,
|
||||
) => void;
|
||||
onEnter?: FieldInputEvent;
|
||||
onEscape?: FieldInputEvent;
|
||||
onTab?: FieldInputEvent;
|
||||
onShiftTab?: FieldInputEvent;
|
||||
sizeVariant?: 'sm' | 'md';
|
||||
};
|
||||
|
||||
export const RecordTitleCellFieldInput = ({
|
||||
sizeVariant,
|
||||
recordFieldInputId,
|
||||
onEnter,
|
||||
onEscape,
|
||||
onShiftTab,
|
||||
onTab,
|
||||
onClickOutside,
|
||||
}: RecordTitleCellFieldInputProps) => {
|
||||
const { fieldDefinition } = useContext(FieldContext);
|
||||
|
||||
if (!isFieldText(fieldDefinition) && !isFieldFullName(fieldDefinition)) {
|
||||
throw new Error('Field definition is not a text or full name field');
|
||||
}
|
||||
|
||||
return (
|
||||
<RecordFieldInputScope
|
||||
recordFieldInputScopeId={getScopeIdFromComponentId(recordFieldInputId)}
|
||||
>
|
||||
{isFieldText(fieldDefinition) ? (
|
||||
<RecordTitleCellTextFieldInput
|
||||
onEnter={onEnter}
|
||||
onEscape={onEscape}
|
||||
onClickOutside={onClickOutside}
|
||||
onTab={onTab}
|
||||
onShiftTab={onShiftTab}
|
||||
sizeVariant={sizeVariant}
|
||||
/>
|
||||
) : isFieldFullName(fieldDefinition) ? (
|
||||
<RecordTitleFullNameFieldInput
|
||||
onEnter={onEnter}
|
||||
onEscape={onEscape}
|
||||
onClickOutside={onClickOutside}
|
||||
onTab={onTab}
|
||||
onShiftTab={onShiftTab}
|
||||
sizeVariant={sizeVariant}
|
||||
/>
|
||||
) : null}
|
||||
</RecordFieldInputScope>
|
||||
);
|
||||
};
|
||||
@ -0,0 +1,40 @@
|
||||
import { FieldContext } from '@/object-record/record-field/contexts/FieldContext';
|
||||
import { useInlineCell } from '@/object-record/record-inline-cell/hooks/useInlineCell';
|
||||
import { useRecordValue } from '@/object-record/record-store/contexts/RecordFieldValueSelectorContext';
|
||||
import styled from '@emotion/styled';
|
||||
import { useContext } from 'react';
|
||||
import { OverflowingTextWithTooltip } from 'twenty-ui';
|
||||
|
||||
const StyledDiv = styled.div`
|
||||
align-items: center;
|
||||
background: inherit;
|
||||
border: none;
|
||||
border-radius: ${({ theme }) => theme.border.radius.sm};
|
||||
color: ${({ theme }) => theme.font.color.primary};
|
||||
cursor: pointer;
|
||||
overflow: hidden;
|
||||
height: 28px;
|
||||
line-height: 28px;
|
||||
:hover {
|
||||
background: ${({ theme }) => theme.background.transparent.light};
|
||||
}
|
||||
`;
|
||||
|
||||
export const RecordTitleCellSingleTextDisplayMode = () => {
|
||||
const { recordId, fieldDefinition } = useContext(FieldContext);
|
||||
|
||||
const recordValue = useRecordValue(recordId);
|
||||
|
||||
const { openInlineCell } = useInlineCell();
|
||||
|
||||
return (
|
||||
<StyledDiv onClick={() => openInlineCell()}>
|
||||
<OverflowingTextWithTooltip
|
||||
text={
|
||||
recordValue?.[fieldDefinition.metadata.fieldName] ||
|
||||
fieldDefinition.label
|
||||
}
|
||||
/>
|
||||
</StyledDiv>
|
||||
);
|
||||
};
|
||||
@ -0,0 +1,78 @@
|
||||
import { usePersistField } from '@/object-record/record-field/hooks/usePersistField';
|
||||
import { useTextField } from '@/object-record/record-field/meta-types/hooks/useTextField';
|
||||
import { FieldInputClickOutsideEvent } from '@/object-record/record-field/meta-types/input/components/DateTimeFieldInput';
|
||||
import { useRegisterInputEvents } from '@/object-record/record-field/meta-types/input/hooks/useRegisterInputEvents';
|
||||
import { FieldInputEvent } from '@/object-record/record-field/types/FieldInputEvent';
|
||||
import { TextInputV2 } from '@/ui/input/components/TextInputV2';
|
||||
import { useRef } from 'react';
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import { turnIntoUndefinedIfWhitespacesOnly } from '~/utils/string/turnIntoUndefinedIfWhitespacesOnly';
|
||||
|
||||
type RecordTitleCellTextFieldInputProps = {
|
||||
onClickOutside?: FieldInputClickOutsideEvent;
|
||||
onEnter?: FieldInputEvent;
|
||||
onEscape?: FieldInputEvent;
|
||||
onTab?: FieldInputEvent;
|
||||
onShiftTab?: FieldInputEvent;
|
||||
sizeVariant?: 'sm' | 'md';
|
||||
};
|
||||
|
||||
export const RecordTitleCellTextFieldInput = ({
|
||||
sizeVariant,
|
||||
onEnter,
|
||||
onEscape,
|
||||
onClickOutside,
|
||||
onTab,
|
||||
onShiftTab,
|
||||
}: RecordTitleCellTextFieldInputProps) => {
|
||||
const { fieldDefinition, draftValue, hotkeyScope, setDraftValue } =
|
||||
useTextField();
|
||||
|
||||
const wrapperRef = useRef<HTMLInputElement>(null);
|
||||
|
||||
const handleChange = (newText: string) => {
|
||||
setDraftValue(turnIntoUndefinedIfWhitespacesOnly(newText));
|
||||
};
|
||||
|
||||
const persistField = usePersistField();
|
||||
|
||||
useRegisterInputEvents<string>({
|
||||
inputRef: wrapperRef,
|
||||
inputValue: draftValue ?? '',
|
||||
onEnter: (inputValue) => {
|
||||
onEnter?.(() => persistField(inputValue));
|
||||
},
|
||||
onEscape: (inputValue) => {
|
||||
onEscape?.(() => persistField(inputValue));
|
||||
},
|
||||
onClickOutside: (event, inputValue) => {
|
||||
onClickOutside?.(() => persistField(inputValue), event);
|
||||
},
|
||||
onTab: (inputValue) => {
|
||||
onTab?.(() => persistField(inputValue));
|
||||
},
|
||||
onShiftTab: (inputValue) => {
|
||||
onShiftTab?.(() => persistField(inputValue));
|
||||
},
|
||||
hotkeyScope,
|
||||
});
|
||||
|
||||
const handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {
|
||||
if (isDefined(draftValue)) {
|
||||
event.target.select();
|
||||
}
|
||||
};
|
||||
|
||||
return (
|
||||
<TextInputV2
|
||||
autoGrow
|
||||
sizeVariant={sizeVariant}
|
||||
inheritFontStyles
|
||||
value={draftValue ?? ''}
|
||||
onChange={handleChange}
|
||||
placeholder={fieldDefinition.label}
|
||||
onFocus={handleFocus}
|
||||
autoFocus
|
||||
/>
|
||||
);
|
||||
};
|
||||
@ -0,0 +1,235 @@
|
||||
import styled from '@emotion/styled';
|
||||
import { ClipboardEvent, useEffect, useRef, useState } from 'react';
|
||||
import { Key } from 'ts-key-enum';
|
||||
|
||||
import { FieldDoubleText } from '@/object-record/record-field/types/FieldDoubleText';
|
||||
import { TextInputV2 } from '@/ui/input/components/TextInputV2';
|
||||
import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys';
|
||||
import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside';
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import { splitFullName } from '~/utils/format/spiltFullName';
|
||||
import { turnIntoEmptyStringIfWhitespacesOnly } from '~/utils/string/turnIntoEmptyStringIfWhitespacesOnly';
|
||||
|
||||
const StyledContainer = styled.div`
|
||||
display: flex;
|
||||
gap: ${({ theme }) => theme.spacing(1)};
|
||||
justify-content: inherit;
|
||||
width: 100%;
|
||||
`;
|
||||
|
||||
const StyledTextInputWrapper = styled.div`
|
||||
max-width: 50%;
|
||||
`;
|
||||
|
||||
type RecordTitleDoubleTextInputProps = {
|
||||
firstValue: string;
|
||||
secondValue: string;
|
||||
firstValuePlaceholder: string;
|
||||
secondValuePlaceholder: string;
|
||||
hotkeyScope: string;
|
||||
onEnter: (newDoubleTextValue: FieldDoubleText) => void;
|
||||
onEscape: (newDoubleTextValue: FieldDoubleText) => void;
|
||||
onTab?: (newDoubleTextValue: FieldDoubleText) => void;
|
||||
onShiftTab?: (newDoubleTextValue: FieldDoubleText) => void;
|
||||
onClickOutside: (
|
||||
event: MouseEvent | TouchEvent,
|
||||
newDoubleTextValue: FieldDoubleText,
|
||||
) => void;
|
||||
onChange?: (newDoubleTextValue: FieldDoubleText) => void;
|
||||
onPaste?: (newDoubleTextValue: FieldDoubleText) => void;
|
||||
sizeVariant?: 'sm' | 'md';
|
||||
};
|
||||
|
||||
export const RecordTitleDoubleTextInput = ({
|
||||
firstValue,
|
||||
secondValue,
|
||||
firstValuePlaceholder,
|
||||
secondValuePlaceholder,
|
||||
hotkeyScope,
|
||||
onClickOutside,
|
||||
onEnter,
|
||||
onEscape,
|
||||
onShiftTab,
|
||||
onTab,
|
||||
onChange,
|
||||
onPaste,
|
||||
sizeVariant,
|
||||
}: RecordTitleDoubleTextInputProps) => {
|
||||
const [firstInternalValue, setFirstInternalValue] = useState(firstValue);
|
||||
const [secondInternalValue, setSecondInternalValue] = useState(secondValue);
|
||||
|
||||
const firstValueInputRef = useRef<HTMLInputElement>(null);
|
||||
const secondValueInputRef = useRef<HTMLInputElement>(null);
|
||||
const containerRef = useRef<HTMLDivElement>(null);
|
||||
|
||||
useEffect(() => {
|
||||
setFirstInternalValue(firstValue);
|
||||
setSecondInternalValue(secondValue);
|
||||
}, [firstValue, secondValue]);
|
||||
|
||||
const handleChange = (
|
||||
newFirstValue: string,
|
||||
newSecondValue: string,
|
||||
): void => {
|
||||
setFirstInternalValue(newFirstValue);
|
||||
setSecondInternalValue(newSecondValue);
|
||||
|
||||
onChange?.({
|
||||
firstValue: newFirstValue,
|
||||
secondValue: newSecondValue,
|
||||
});
|
||||
};
|
||||
|
||||
const [focusPosition, setFocusPosition] = useState<'left' | 'right'>('left');
|
||||
|
||||
useScopedHotkeys(
|
||||
Key.Enter,
|
||||
() => {
|
||||
onEnter({
|
||||
firstValue: firstInternalValue,
|
||||
secondValue: secondInternalValue,
|
||||
});
|
||||
},
|
||||
hotkeyScope,
|
||||
[onEnter, firstInternalValue, secondInternalValue],
|
||||
);
|
||||
|
||||
useScopedHotkeys(
|
||||
[Key.Escape],
|
||||
() => {
|
||||
onEscape({
|
||||
firstValue: firstInternalValue,
|
||||
secondValue: secondInternalValue,
|
||||
});
|
||||
},
|
||||
hotkeyScope,
|
||||
[onEscape, firstInternalValue, secondInternalValue],
|
||||
);
|
||||
|
||||
useScopedHotkeys(
|
||||
'tab',
|
||||
() => {
|
||||
if (focusPosition === 'left') {
|
||||
setFocusPosition('right');
|
||||
secondValueInputRef.current?.focus();
|
||||
} else {
|
||||
onTab?.({
|
||||
firstValue: firstInternalValue,
|
||||
secondValue: secondInternalValue,
|
||||
});
|
||||
}
|
||||
},
|
||||
hotkeyScope,
|
||||
[onTab, firstInternalValue, secondInternalValue, focusPosition],
|
||||
);
|
||||
|
||||
useScopedHotkeys(
|
||||
'shift+tab',
|
||||
() => {
|
||||
if (focusPosition === 'right') {
|
||||
setFocusPosition('left');
|
||||
firstValueInputRef.current?.focus();
|
||||
} else {
|
||||
onShiftTab?.({
|
||||
firstValue: firstInternalValue,
|
||||
secondValue: secondInternalValue,
|
||||
});
|
||||
}
|
||||
},
|
||||
hotkeyScope,
|
||||
[onShiftTab, firstInternalValue, secondInternalValue, focusPosition],
|
||||
);
|
||||
|
||||
useListenClickOutside({
|
||||
refs: [containerRef],
|
||||
callback: (event) => {
|
||||
onClickOutside?.(event, {
|
||||
firstValue: firstInternalValue,
|
||||
secondValue: secondInternalValue,
|
||||
});
|
||||
},
|
||||
enabled: isDefined(onClickOutside),
|
||||
listenerId: 'record-title-double-text-input',
|
||||
});
|
||||
|
||||
const handleOnPaste = (event: ClipboardEvent<HTMLInputElement>) => {
|
||||
if (firstInternalValue.length > 0 || secondInternalValue.length > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
event.preventDefault();
|
||||
|
||||
const name = event.clipboardData.getData('Text');
|
||||
|
||||
const splittedName = splitFullName(name);
|
||||
|
||||
onPaste?.({
|
||||
firstValue: splittedName[0],
|
||||
secondValue: splittedName[1],
|
||||
});
|
||||
};
|
||||
|
||||
const handleClickToPreventParentClickEvents = (
|
||||
event: React.MouseEvent<HTMLInputElement>,
|
||||
) => {
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
};
|
||||
|
||||
return (
|
||||
<StyledContainer ref={containerRef}>
|
||||
<StyledTextInputWrapper>
|
||||
<TextInputV2
|
||||
autoGrow
|
||||
sizeVariant={sizeVariant}
|
||||
autoComplete="off"
|
||||
inheritFontStyles
|
||||
autoFocus
|
||||
onFocus={(event: React.FocusEvent<HTMLInputElement>) => {
|
||||
if (isDefined(firstInternalValue)) {
|
||||
event.target.select();
|
||||
}
|
||||
setFocusPosition('left');
|
||||
}}
|
||||
ref={firstValueInputRef}
|
||||
placeholder={firstValuePlaceholder}
|
||||
value={firstInternalValue}
|
||||
onChange={(text: string) => {
|
||||
handleChange(
|
||||
turnIntoEmptyStringIfWhitespacesOnly(text),
|
||||
secondInternalValue,
|
||||
);
|
||||
}}
|
||||
onPaste={(event: ClipboardEvent<HTMLInputElement>) =>
|
||||
handleOnPaste(event)
|
||||
}
|
||||
onClick={handleClickToPreventParentClickEvents}
|
||||
/>
|
||||
</StyledTextInputWrapper>
|
||||
<StyledTextInputWrapper>
|
||||
<TextInputV2
|
||||
autoGrow
|
||||
sizeVariant={sizeVariant}
|
||||
autoComplete="off"
|
||||
inheritFontStyles
|
||||
onFocus={(event: React.FocusEvent<HTMLInputElement>) => {
|
||||
if (isDefined(secondInternalValue)) {
|
||||
event.target.select();
|
||||
}
|
||||
setFocusPosition('right');
|
||||
}}
|
||||
ref={secondValueInputRef}
|
||||
placeholder={secondValuePlaceholder}
|
||||
value={secondInternalValue}
|
||||
onChange={(text: string) => {
|
||||
handleChange(
|
||||
firstInternalValue,
|
||||
turnIntoEmptyStringIfWhitespacesOnly(text),
|
||||
);
|
||||
}}
|
||||
onClick={handleClickToPreventParentClickEvents}
|
||||
/>
|
||||
</StyledTextInputWrapper>
|
||||
</StyledContainer>
|
||||
);
|
||||
};
|
||||
@ -0,0 +1,43 @@
|
||||
import { FieldContext } from '@/object-record/record-field/contexts/FieldContext';
|
||||
import { useFullNameFieldDisplay } from '@/object-record/record-field/meta-types/hooks/useFullNameFieldDisplay';
|
||||
import { useInlineCell } from '@/object-record/record-inline-cell/hooks/useInlineCell';
|
||||
import styled from '@emotion/styled';
|
||||
import { isNonEmptyString } from '@sniptt/guards';
|
||||
import { useContext } from 'react';
|
||||
import { OverflowingTextWithTooltip } from 'twenty-ui';
|
||||
|
||||
const StyledDiv = styled.div`
|
||||
align-items: center;
|
||||
background: inherit;
|
||||
border: none;
|
||||
border-radius: ${({ theme }) => theme.border.radius.sm};
|
||||
color: ${({ theme }) => theme.font.color.primary};
|
||||
cursor: pointer;
|
||||
overflow: hidden;
|
||||
height: 28px;
|
||||
line-height: 28px;
|
||||
:hover {
|
||||
background: ${({ theme }) => theme.background.transparent.light};
|
||||
}
|
||||
`;
|
||||
|
||||
export const RecordTitleFullNameFieldDisplay = () => {
|
||||
const { fieldDefinition } = useContext(FieldContext);
|
||||
|
||||
const { openInlineCell } = useInlineCell();
|
||||
|
||||
const { fieldValue } = useFullNameFieldDisplay();
|
||||
|
||||
const content = [fieldValue?.firstName, fieldValue?.lastName]
|
||||
.filter(isNonEmptyString)
|
||||
.join(' ')
|
||||
.trim();
|
||||
|
||||
return (
|
||||
<StyledDiv onClick={() => openInlineCell()}>
|
||||
<OverflowingTextWithTooltip
|
||||
text={isNonEmptyString(content) ? content : fieldDefinition.label}
|
||||
/>
|
||||
</StyledDiv>
|
||||
);
|
||||
};
|
||||
@ -0,0 +1,102 @@
|
||||
import { useFullNameField } from '@/object-record/record-field/meta-types/hooks/useFullNameField';
|
||||
import {
|
||||
FieldInputClickOutsideEvent,
|
||||
FieldInputEvent,
|
||||
} from '@/object-record/record-field/meta-types/input/components/DateTimeFieldInput';
|
||||
import { FIRST_NAME_PLACEHOLDER_WITH_SPECIAL_CHARACTER_TO_AVOID_PASSWORD_MANAGERS } from '@/object-record/record-field/meta-types/input/constants/FirstNamePlaceholder';
|
||||
import { LAST_NAME_PLACEHOLDER_WITH_SPECIAL_CHARACTER_TO_AVOID_PASSWORD_MANAGERS } from '@/object-record/record-field/meta-types/input/constants/LastNamePlaceholder';
|
||||
import { isDoubleTextFieldEmpty } from '@/object-record/record-field/meta-types/input/utils/isDoubleTextFieldEmpty';
|
||||
import { FieldDoubleText } from '@/object-record/record-field/types/FieldDoubleText';
|
||||
import { RecordTitleDoubleTextInput } from './RecordTitleDoubleTextInput';
|
||||
|
||||
type RecordTitleFullNameFieldInputProps = {
|
||||
onClickOutside?: FieldInputClickOutsideEvent;
|
||||
onEnter?: FieldInputEvent;
|
||||
onEscape?: FieldInputEvent;
|
||||
onTab?: FieldInputEvent;
|
||||
onShiftTab?: FieldInputEvent;
|
||||
sizeVariant?: 'sm' | 'md';
|
||||
};
|
||||
|
||||
export const RecordTitleFullNameFieldInput = ({
|
||||
onEnter,
|
||||
onEscape,
|
||||
onClickOutside,
|
||||
onTab,
|
||||
onShiftTab,
|
||||
sizeVariant,
|
||||
}: RecordTitleFullNameFieldInputProps) => {
|
||||
const { hotkeyScope, draftValue, setDraftValue, persistFullNameField } =
|
||||
useFullNameField();
|
||||
|
||||
const convertToFullName = (newDoubleText: FieldDoubleText) => {
|
||||
return {
|
||||
firstName: newDoubleText.firstValue.trim(),
|
||||
lastName: newDoubleText.secondValue.trim(),
|
||||
};
|
||||
};
|
||||
|
||||
const getRequiredDraftValueFromDoubleText = (
|
||||
newDoubleText: FieldDoubleText,
|
||||
) => {
|
||||
return isDoubleTextFieldEmpty(newDoubleText)
|
||||
? undefined
|
||||
: convertToFullName(newDoubleText);
|
||||
};
|
||||
|
||||
const handleEnter = (newDoubleText: FieldDoubleText) => {
|
||||
onEnter?.(() => persistFullNameField(convertToFullName(newDoubleText)));
|
||||
};
|
||||
|
||||
const handleEscape = (newDoubleText: FieldDoubleText) => {
|
||||
onEscape?.(() => persistFullNameField(convertToFullName(newDoubleText)));
|
||||
};
|
||||
|
||||
const handleClickOutside = (
|
||||
event: MouseEvent | TouchEvent,
|
||||
newDoubleText: FieldDoubleText,
|
||||
) => {
|
||||
onClickOutside?.(
|
||||
() => persistFullNameField(convertToFullName(newDoubleText)),
|
||||
event,
|
||||
);
|
||||
};
|
||||
|
||||
const handleTab = (newDoubleText: FieldDoubleText) => {
|
||||
onTab?.(() => persistFullNameField(convertToFullName(newDoubleText)));
|
||||
};
|
||||
|
||||
const handleShiftTab = (newDoubleText: FieldDoubleText) => {
|
||||
onShiftTab?.(() => persistFullNameField(convertToFullName(newDoubleText)));
|
||||
};
|
||||
|
||||
const handleChange = (newDoubleText: FieldDoubleText) => {
|
||||
setDraftValue(getRequiredDraftValueFromDoubleText(newDoubleText));
|
||||
};
|
||||
|
||||
const handlePaste = (newDoubleText: FieldDoubleText) => {
|
||||
setDraftValue(getRequiredDraftValueFromDoubleText(newDoubleText));
|
||||
};
|
||||
|
||||
return (
|
||||
<RecordTitleDoubleTextInput
|
||||
firstValue={draftValue?.firstName ?? ''}
|
||||
secondValue={draftValue?.lastName ?? ''}
|
||||
firstValuePlaceholder={
|
||||
FIRST_NAME_PLACEHOLDER_WITH_SPECIAL_CHARACTER_TO_AVOID_PASSWORD_MANAGERS
|
||||
}
|
||||
secondValuePlaceholder={
|
||||
LAST_NAME_PLACEHOLDER_WITH_SPECIAL_CHARACTER_TO_AVOID_PASSWORD_MANAGERS
|
||||
}
|
||||
onClickOutside={handleClickOutside}
|
||||
onEnter={handleEnter}
|
||||
onEscape={handleEscape}
|
||||
onShiftTab={handleShiftTab}
|
||||
onTab={handleTab}
|
||||
onPaste={handlePaste}
|
||||
hotkeyScope={hotkeyScope}
|
||||
onChange={handleChange}
|
||||
sizeVariant={sizeVariant}
|
||||
/>
|
||||
);
|
||||
};
|
||||
@ -0,0 +1,73 @@
|
||||
import { isInlineCellInEditModeScopedState } from '@/object-record/record-inline-cell/states/isInlineCellInEditModeScopedState';
|
||||
import { InlineCellHotkeyScope } from '@/object-record/record-inline-cell/types/InlineCellHotkeyScope';
|
||||
import { useGoBackToPreviousDropdownFocusId } from '@/ui/layout/dropdown/hooks/useGoBackToPreviousDropdownFocusId';
|
||||
import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousHotkeyScope';
|
||||
import { HotkeyScope } from '@/ui/utilities/hotkey/types/HotkeyScope';
|
||||
import { useRecoilCallback } from 'recoil';
|
||||
import { isDefined } from 'twenty-shared';
|
||||
|
||||
export const useRecordTitleCell = () => {
|
||||
const { goBackToPreviousDropdownFocusId } =
|
||||
useGoBackToPreviousDropdownFocusId();
|
||||
|
||||
const {
|
||||
setHotkeyScopeAndMemorizePreviousScope,
|
||||
goBackToPreviousHotkeyScope,
|
||||
} = usePreviousHotkeyScope();
|
||||
|
||||
const closeRecordTitleCell = useRecoilCallback(
|
||||
({ set }) =>
|
||||
({
|
||||
recordId,
|
||||
fieldMetadataId,
|
||||
}: {
|
||||
recordId: string;
|
||||
fieldMetadataId: string;
|
||||
}) => {
|
||||
set(
|
||||
isInlineCellInEditModeScopedState(recordId + fieldMetadataId),
|
||||
false,
|
||||
);
|
||||
|
||||
goBackToPreviousHotkeyScope();
|
||||
|
||||
goBackToPreviousDropdownFocusId();
|
||||
},
|
||||
[goBackToPreviousDropdownFocusId, goBackToPreviousHotkeyScope],
|
||||
);
|
||||
|
||||
const openRecordTitleCell = useRecoilCallback(
|
||||
({ set }) =>
|
||||
({
|
||||
recordId,
|
||||
fieldMetadataId,
|
||||
customEditHotkeyScopeForField,
|
||||
}: {
|
||||
recordId: string;
|
||||
fieldMetadataId: string;
|
||||
customEditHotkeyScopeForField?: HotkeyScope;
|
||||
}) => {
|
||||
set(
|
||||
isInlineCellInEditModeScopedState(recordId + fieldMetadataId),
|
||||
true,
|
||||
);
|
||||
|
||||
if (isDefined(customEditHotkeyScopeForField)) {
|
||||
setHotkeyScopeAndMemorizePreviousScope(
|
||||
customEditHotkeyScopeForField.scope,
|
||||
customEditHotkeyScopeForField.customScopes,
|
||||
);
|
||||
} else {
|
||||
setHotkeyScopeAndMemorizePreviousScope(
|
||||
InlineCellHotkeyScope.InlineCell,
|
||||
);
|
||||
}
|
||||
},
|
||||
[setHotkeyScopeAndMemorizePreviousScope],
|
||||
);
|
||||
|
||||
return {
|
||||
closeRecordTitleCell,
|
||||
openRecordTitleCell,
|
||||
};
|
||||
};
|
||||
@ -1,6 +0,0 @@
|
||||
import { createState } from 'twenty-ui';
|
||||
|
||||
export const isUpdatingRecordEditableNameState = createState<boolean>({
|
||||
key: 'isUpdatingRecordEditableNameState',
|
||||
defaultValue: false,
|
||||
});
|
||||
@ -1,10 +1,10 @@
|
||||
import { InputErrorHelper } from '@/ui/input/components/InputErrorHelper';
|
||||
import { InputLabel } from '@/ui/input/components/InputLabel';
|
||||
import { useTheme } from '@emotion/react';
|
||||
import styled from '@emotion/styled';
|
||||
import {
|
||||
ChangeEvent,
|
||||
FocusEventHandler,
|
||||
ForwardedRef,
|
||||
InputHTMLAttributes,
|
||||
forwardRef,
|
||||
useId,
|
||||
@ -19,7 +19,6 @@ import {
|
||||
} from 'twenty-ui';
|
||||
import { useCombinedRefs } from '~/hooks/useCombinedRefs';
|
||||
import { turnIntoEmptyStringIfWhitespacesOnly } from '~/utils/string/turnIntoEmptyStringIfWhitespacesOnly';
|
||||
import { InputErrorHelper } from '@/ui/input/components/InputErrorHelper';
|
||||
|
||||
const StyledContainer = styled.div<
|
||||
Pick<TextInputV2ComponentProps, 'fullWidth'>
|
||||
@ -40,7 +39,12 @@ const StyledInputContainer = styled.div`
|
||||
const StyledInput = styled.input<
|
||||
Pick<
|
||||
TextInputV2ComponentProps,
|
||||
'LeftIcon' | 'error' | 'sizeVariant' | 'width'
|
||||
| 'LeftIcon'
|
||||
| 'error'
|
||||
| 'sizeVariant'
|
||||
| 'width'
|
||||
| 'inheritFontStyles'
|
||||
| 'autoGrow'
|
||||
>
|
||||
>`
|
||||
background-color: ${({ theme }) => theme.background.transparent.lighter};
|
||||
@ -52,17 +56,30 @@ const StyledInput = styled.input<
|
||||
color: ${({ theme }) => theme.font.color.primary};
|
||||
display: flex;
|
||||
flex-grow: 1;
|
||||
font-family: ${({ theme }) => theme.font.family};
|
||||
font-weight: ${({ theme }) => theme.font.weight.regular};
|
||||
font-family: ${({ theme, inheritFontStyles }) =>
|
||||
inheritFontStyles ? 'inherit' : theme.font.family};
|
||||
font-size: ${({ theme, inheritFontStyles }) =>
|
||||
inheritFontStyles ? 'inherit' : theme.font.size.md};
|
||||
font-weight: ${({ theme, inheritFontStyles }) =>
|
||||
inheritFontStyles ? 'inherit' : theme.font.weight.regular};
|
||||
height: ${({ sizeVariant }) =>
|
||||
sizeVariant === 'sm' ? '20px' : sizeVariant === 'md' ? '28px' : '32px'};
|
||||
outline: none;
|
||||
padding: ${({ theme, sizeVariant }) =>
|
||||
sizeVariant === 'sm' ? `${theme.spacing(2)} 0` : theme.spacing(2)};
|
||||
padding-left: ${({ theme, LeftIcon }) =>
|
||||
LeftIcon ? `calc(${theme.spacing(3)} + 16px)` : theme.spacing(2)};
|
||||
padding: ${({ theme, sizeVariant, autoGrow }) =>
|
||||
autoGrow
|
||||
? theme.spacing(1)
|
||||
: sizeVariant === 'sm'
|
||||
? `${theme.spacing(2)} 0`
|
||||
: theme.spacing(2)};
|
||||
padding-left: ${({ theme, LeftIcon, autoGrow }) =>
|
||||
autoGrow
|
||||
? theme.spacing(1)
|
||||
: LeftIcon
|
||||
? `calc(${theme.spacing(3)} + 16px)`
|
||||
: theme.spacing(2)};
|
||||
width: ${({ theme, width }) =>
|
||||
width ? `calc(${width}px + ${theme.spacing(5)})` : '100%'};
|
||||
width ? `calc(${width}px + ${theme.spacing(0.5)})` : '100%'};
|
||||
max-width: ${({ autoGrow }) => (autoGrow ? '100%' : 'none')};
|
||||
|
||||
&::placeholder,
|
||||
&::-webkit-input-placeholder {
|
||||
@ -144,149 +161,180 @@ export type TextInputV2ComponentProps = Omit<
|
||||
onBlur?: FocusEventHandler<HTMLInputElement>;
|
||||
dataTestId?: string;
|
||||
sizeVariant?: TextInputV2Size;
|
||||
inheritFontStyles?: boolean;
|
||||
};
|
||||
|
||||
type TextInputV2WithAutoGrowWrapperProps = TextInputV2ComponentProps;
|
||||
|
||||
const TextInputV2Component = (
|
||||
{
|
||||
className,
|
||||
label,
|
||||
value,
|
||||
onChange,
|
||||
onFocus,
|
||||
onBlur,
|
||||
onKeyDown,
|
||||
fullWidth,
|
||||
width,
|
||||
error,
|
||||
noErrorHelper = false,
|
||||
required,
|
||||
type,
|
||||
autoFocus,
|
||||
placeholder,
|
||||
disabled,
|
||||
tabIndex,
|
||||
RightIcon,
|
||||
LeftIcon,
|
||||
autoComplete,
|
||||
maxLength,
|
||||
sizeVariant = 'lg',
|
||||
dataTestId,
|
||||
}: TextInputV2ComponentProps,
|
||||
// eslint-disable-next-line @nx/workspace-component-props-naming
|
||||
ref: ForwardedRef<HTMLInputElement>,
|
||||
): JSX.Element => {
|
||||
const theme = useTheme();
|
||||
const TextInputV2Component = forwardRef<
|
||||
HTMLInputElement,
|
||||
TextInputV2ComponentProps
|
||||
>(
|
||||
(
|
||||
{
|
||||
className,
|
||||
label,
|
||||
value,
|
||||
onChange,
|
||||
onFocus,
|
||||
onBlur,
|
||||
onKeyDown,
|
||||
fullWidth,
|
||||
width,
|
||||
error,
|
||||
noErrorHelper = false,
|
||||
required,
|
||||
type,
|
||||
autoFocus,
|
||||
placeholder,
|
||||
disabled,
|
||||
tabIndex,
|
||||
RightIcon,
|
||||
LeftIcon,
|
||||
autoComplete,
|
||||
maxLength,
|
||||
sizeVariant = 'md',
|
||||
inheritFontStyles = false,
|
||||
dataTestId,
|
||||
autoGrow = false,
|
||||
},
|
||||
ref,
|
||||
) => {
|
||||
const theme = useTheme();
|
||||
const inputRef = useRef<HTMLInputElement>(null);
|
||||
const combinedRef = useCombinedRefs(ref, inputRef);
|
||||
|
||||
const inputRef = useRef<HTMLInputElement>(null);
|
||||
const combinedRef = useCombinedRefs(ref, inputRef);
|
||||
const [passwordVisible, setPasswordVisible] = useState(false);
|
||||
const [isFocused, setIsFocused] = useState(false);
|
||||
|
||||
const [passwordVisible, setPasswordVisible] = useState(false);
|
||||
const [isFocused, setIsFocused] = useState(false);
|
||||
const handleTogglePasswordVisibility = () => {
|
||||
setPasswordVisible(!passwordVisible);
|
||||
};
|
||||
|
||||
const handleTogglePasswordVisibility = () => {
|
||||
setPasswordVisible(!passwordVisible);
|
||||
};
|
||||
const handleFocus: FocusEventHandler<HTMLInputElement> = (event) => {
|
||||
setIsFocused(true);
|
||||
onFocus?.(event);
|
||||
};
|
||||
|
||||
const handleFocus: FocusEventHandler<HTMLInputElement> = (event) => {
|
||||
setIsFocused(true);
|
||||
onFocus?.(event);
|
||||
};
|
||||
const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {
|
||||
setIsFocused(false);
|
||||
onBlur?.(event);
|
||||
};
|
||||
|
||||
const handleBlur: FocusEventHandler<HTMLInputElement> = (event) => {
|
||||
setIsFocused(false);
|
||||
onBlur?.(event);
|
||||
};
|
||||
const inputId = useId();
|
||||
|
||||
const inputId = useId();
|
||||
|
||||
return (
|
||||
<StyledContainer className={className} fullWidth={fullWidth ?? false}>
|
||||
{label && (
|
||||
<InputLabel htmlFor={inputId}>
|
||||
{label + (required ? '*' : '')}
|
||||
</InputLabel>
|
||||
)}
|
||||
<StyledInputContainer>
|
||||
{!!LeftIcon && (
|
||||
<StyledLeftIconContainer sizeVariant={sizeVariant}>
|
||||
<StyledTrailingIcon isFocused={isFocused}>
|
||||
<LeftIcon size={theme.icon.size.md} />
|
||||
</StyledTrailingIcon>
|
||||
</StyledLeftIconContainer>
|
||||
return (
|
||||
<StyledContainer className={className} fullWidth={fullWidth ?? false}>
|
||||
{label && (
|
||||
<InputLabel htmlFor={inputId}>
|
||||
{label + (required ? '*' : '')}
|
||||
</InputLabel>
|
||||
)}
|
||||
|
||||
<StyledInput
|
||||
id={inputId}
|
||||
width={width}
|
||||
data-testid={dataTestId}
|
||||
autoComplete={autoComplete || 'off'}
|
||||
ref={combinedRef}
|
||||
tabIndex={tabIndex ?? 0}
|
||||
onFocus={handleFocus}
|
||||
onBlur={handleBlur}
|
||||
type={passwordVisible ? 'text' : type}
|
||||
onChange={(event: ChangeEvent<HTMLInputElement>) => {
|
||||
onChange?.(
|
||||
turnIntoEmptyStringIfWhitespacesOnly(event.target.value),
|
||||
);
|
||||
}}
|
||||
onKeyDown={onKeyDown}
|
||||
{...{
|
||||
autoFocus,
|
||||
disabled,
|
||||
placeholder,
|
||||
required,
|
||||
value,
|
||||
LeftIcon,
|
||||
maxLength,
|
||||
error,
|
||||
sizeVariant,
|
||||
}}
|
||||
/>
|
||||
|
||||
<StyledTrailingIconContainer {...{ error }}>
|
||||
{!error && type === INPUT_TYPE_PASSWORD && (
|
||||
<StyledTrailingIcon
|
||||
onClick={handleTogglePasswordVisibility}
|
||||
data-testid="reveal-password-button"
|
||||
>
|
||||
{passwordVisible ? (
|
||||
<IconEyeOff size={theme.icon.size.md} />
|
||||
) : (
|
||||
<IconEye size={theme.icon.size.md} />
|
||||
)}
|
||||
</StyledTrailingIcon>
|
||||
<StyledInputContainer>
|
||||
{!!LeftIcon && (
|
||||
<StyledLeftIconContainer sizeVariant={sizeVariant}>
|
||||
<StyledTrailingIcon isFocused={isFocused}>
|
||||
<LeftIcon size={theme.icon.size.md} />
|
||||
</StyledTrailingIcon>
|
||||
</StyledLeftIconContainer>
|
||||
)}
|
||||
{!error && type !== INPUT_TYPE_PASSWORD && !!RightIcon && (
|
||||
<StyledTrailingIcon>
|
||||
<RightIcon size={theme.icon.size.md} />
|
||||
</StyledTrailingIcon>
|
||||
)}
|
||||
</StyledTrailingIconContainer>
|
||||
</StyledInputContainer>
|
||||
<InputErrorHelper isVisible={!noErrorHelper}>{error}</InputErrorHelper>
|
||||
</StyledContainer>
|
||||
);
|
||||
};
|
||||
|
||||
const TextInputV2WithAutoGrowWrapper = (
|
||||
props: TextInputV2WithAutoGrowWrapperProps,
|
||||
) => (
|
||||
<>
|
||||
{props.autoGrow ? (
|
||||
<ComputeNodeDimensions node={props.value || props.placeholder}>
|
||||
{(nodeDimensions) => (
|
||||
// eslint-disable-next-line
|
||||
<TextInputV2Component {...props} width={nodeDimensions?.width} />
|
||||
)}
|
||||
</ComputeNodeDimensions>
|
||||
) : (
|
||||
// eslint-disable-next-line
|
||||
<TextInputV2Component {...props} />
|
||||
)}
|
||||
</>
|
||||
<StyledInput
|
||||
id={inputId}
|
||||
width={width}
|
||||
data-testid={dataTestId}
|
||||
autoComplete={autoComplete || 'off'}
|
||||
ref={combinedRef}
|
||||
tabIndex={tabIndex ?? 0}
|
||||
onFocus={handleFocus}
|
||||
onBlur={handleBlur}
|
||||
type={passwordVisible ? 'text' : type}
|
||||
onChange={(event: ChangeEvent<HTMLInputElement>) => {
|
||||
onChange?.(
|
||||
turnIntoEmptyStringIfWhitespacesOnly(event.target.value),
|
||||
);
|
||||
}}
|
||||
onKeyDown={onKeyDown}
|
||||
{...{
|
||||
autoFocus,
|
||||
disabled,
|
||||
placeholder,
|
||||
required,
|
||||
value,
|
||||
LeftIcon,
|
||||
maxLength,
|
||||
error,
|
||||
sizeVariant,
|
||||
inheritFontStyles,
|
||||
autoGrow,
|
||||
}}
|
||||
/>
|
||||
|
||||
<StyledTrailingIconContainer {...{ error }}>
|
||||
{!error && type === INPUT_TYPE_PASSWORD && (
|
||||
<StyledTrailingIcon
|
||||
onClick={handleTogglePasswordVisibility}
|
||||
data-testid="reveal-password-button"
|
||||
>
|
||||
{passwordVisible ? (
|
||||
<IconEyeOff size={theme.icon.size.md} />
|
||||
) : (
|
||||
<IconEye size={theme.icon.size.md} />
|
||||
)}
|
||||
</StyledTrailingIcon>
|
||||
)}
|
||||
{!error && type !== INPUT_TYPE_PASSWORD && !!RightIcon && (
|
||||
<StyledTrailingIcon>
|
||||
<RightIcon size={theme.icon.size.md} />
|
||||
</StyledTrailingIcon>
|
||||
)}
|
||||
</StyledTrailingIconContainer>
|
||||
</StyledInputContainer>
|
||||
<InputErrorHelper isVisible={!noErrorHelper}>{error}</InputErrorHelper>
|
||||
</StyledContainer>
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
export const TextInputV2 = forwardRef(TextInputV2WithAutoGrowWrapper);
|
||||
const StyledComputeNodeDimensions = styled(ComputeNodeDimensions)<{
|
||||
sizeVariant?: TextInputV2Size;
|
||||
}>`
|
||||
border: 1px solid transparent;
|
||||
height: ${({ sizeVariant }) =>
|
||||
sizeVariant === 'sm' ? '20px' : sizeVariant === 'md' ? '28px' : '32px'};
|
||||
padding: 0 ${({ theme }) => theme.spacing(1)};
|
||||
box-sizing: border-box;
|
||||
`;
|
||||
|
||||
const TextInputV2WithAutoGrowWrapper = forwardRef<
|
||||
HTMLInputElement,
|
||||
TextInputV2WithAutoGrowWrapperProps
|
||||
>((props, ref) => {
|
||||
return (
|
||||
<>
|
||||
{props.autoGrow ? (
|
||||
<StyledComputeNodeDimensions
|
||||
sizeVariant={props.sizeVariant}
|
||||
node={props.value || props.placeholder}
|
||||
>
|
||||
{(nodeDimensions) => (
|
||||
<TextInputV2Component
|
||||
// eslint-disable-next-line react/jsx-props-no-spreading
|
||||
{...props}
|
||||
ref={ref}
|
||||
width={nodeDimensions?.width}
|
||||
/>
|
||||
)}
|
||||
</StyledComputeNodeDimensions>
|
||||
) : (
|
||||
<TextInputV2Component
|
||||
// eslint-disable-next-line react/jsx-props-no-spreading
|
||||
{...props}
|
||||
ref={ref}
|
||||
/>
|
||||
)}
|
||||
</>
|
||||
);
|
||||
});
|
||||
|
||||
export const TextInputV2 = TextInputV2WithAutoGrowWrapper;
|
||||
|
||||
@ -49,7 +49,7 @@ const StyledLeftContainer = styled.div`
|
||||
gap: ${({ theme }) => theme.spacing(1)};
|
||||
padding-left: ${({ theme }) => theme.spacing(1)};
|
||||
overflow-x: hidden;
|
||||
|
||||
width: 100%;
|
||||
@media (max-width: ${MOBILE_VIEWPORT}px) {
|
||||
padding-left: ${({ theme }) => theme.spacing(1)};
|
||||
}
|
||||
@ -60,6 +60,8 @@ const StyledTitleContainer = styled.div`
|
||||
font-size: ${({ theme }) => theme.font.size.md};
|
||||
font-weight: ${({ theme }) => theme.font.weight.medium};
|
||||
margin-left: ${({ theme }) => theme.spacing(1)};
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
`;
|
||||
|
||||
const StyledTopBarIconStyledTitleContainer = styled.div`
|
||||
@ -67,6 +69,8 @@ const StyledTopBarIconStyledTitleContainer = styled.div`
|
||||
display: flex;
|
||||
gap: ${({ theme }) => theme.spacing(1)};
|
||||
flex-direction: row;
|
||||
width: 100%;
|
||||
overflow: hidden;
|
||||
`;
|
||||
|
||||
const StyledPageActionContainer = styled.div`
|
||||
@ -81,10 +85,9 @@ const StyledTopBarButtonContainer = styled.div`
|
||||
`;
|
||||
|
||||
const StyledIconContainer = styled.div`
|
||||
flex: 1 0 1;
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
`;
|
||||
|
||||
type PageHeaderProps = {
|
||||
|
||||
@ -62,7 +62,7 @@ const StyledTitle = styled.div<{ isMobile: boolean }>`
|
||||
font-size: ${({ theme }) => theme.font.size.xl};
|
||||
font-weight: ${({ theme }) => theme.font.weight.semiBold};
|
||||
justify-content: ${({ isMobile }) => (isMobile ? 'flex-start' : 'center')};
|
||||
max-width: 90%;
|
||||
width: 90%;
|
||||
`;
|
||||
|
||||
const StyledAvatarWrapper = styled.div<{ isAvatarEditable: boolean }>`
|
||||
|
||||
@ -1,119 +0,0 @@
|
||||
import { isUpdatingRecordEditableNameState } from '@/object-record/states/isUpdatingRecordEditableName';
|
||||
import { TextInputV2 } from '@/ui/input/components/TextInputV2';
|
||||
import { useOpenEditableBreadCrumbItem } from '@/ui/navigation/bread-crumb/hooks/useOpenEditableBreadCrumbItem';
|
||||
import { EditableBreadcrumbItemHotkeyScope } from '@/ui/navigation/bread-crumb/types/EditableBreadcrumbItemHotkeyScope';
|
||||
import { useScopedHotkeys } from '@/ui/utilities/hotkey/hooks/useScopedHotkeys';
|
||||
import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useListenClickOutside';
|
||||
import styled from '@emotion/styled';
|
||||
import { useRef, useState } from 'react';
|
||||
import { useRecoilState } from 'recoil';
|
||||
import { Key } from 'ts-key-enum';
|
||||
import { isDefined } from 'twenty-shared';
|
||||
import { useHotkeyScopeOnMount } from '~/hooks/useHotkeyScopeOnMount';
|
||||
|
||||
type EditableBreadcrumbItemProps = {
|
||||
className?: string;
|
||||
defaultValue: string;
|
||||
noValuePlaceholder?: string;
|
||||
placeholder: string;
|
||||
onSubmit: (value: string) => void;
|
||||
hotkeyScope: string;
|
||||
};
|
||||
|
||||
const StyledButton = styled('button')`
|
||||
align-items: center;
|
||||
background: inherit;
|
||||
border: none;
|
||||
border-radius: ${({ theme }) => theme.border.radius.sm};
|
||||
box-sizing: content-box;
|
||||
color: ${({ theme }) => theme.font.color.primary};
|
||||
cursor: pointer;
|
||||
display: flex;
|
||||
font-family: ${({ theme }) => theme.font.family};
|
||||
font-size: ${({ theme }) => theme.font.size.md};
|
||||
height: 20px;
|
||||
overflow: hidden;
|
||||
text-decoration: none;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
:hover {
|
||||
background: ${({ theme }) => theme.background.transparent.light};
|
||||
}
|
||||
`;
|
||||
|
||||
export const EditableBreadcrumbItem = ({
|
||||
className,
|
||||
defaultValue,
|
||||
noValuePlaceholder,
|
||||
placeholder,
|
||||
onSubmit,
|
||||
}: EditableBreadcrumbItemProps) => {
|
||||
const inputRef = useRef<HTMLInputElement>(null);
|
||||
const buttonRef = useRef<HTMLButtonElement>(null);
|
||||
|
||||
const [isUpdatingRecordEditableName, setIsUpdatingRecordEditableName] =
|
||||
useRecoilState(isUpdatingRecordEditableNameState);
|
||||
|
||||
// TODO: remove this and set the hokey scopes synchronously on page change inside the useNavigateApp hook
|
||||
useHotkeyScopeOnMount(
|
||||
EditableBreadcrumbItemHotkeyScope.EditableBreadcrumbItem,
|
||||
);
|
||||
|
||||
useScopedHotkeys(
|
||||
[Key.Escape],
|
||||
() => {
|
||||
setIsUpdatingRecordEditableName(false);
|
||||
},
|
||||
EditableBreadcrumbItemHotkeyScope.EditableBreadcrumbItem,
|
||||
);
|
||||
|
||||
useScopedHotkeys(
|
||||
[Key.Enter],
|
||||
() => {
|
||||
onSubmit(value);
|
||||
setIsUpdatingRecordEditableName(false);
|
||||
},
|
||||
EditableBreadcrumbItemHotkeyScope.EditableBreadcrumbItem,
|
||||
);
|
||||
|
||||
const clickOutsideRefs: Array<React.RefObject<HTMLElement>> = [
|
||||
inputRef,
|
||||
buttonRef,
|
||||
];
|
||||
|
||||
useListenClickOutside({
|
||||
refs: clickOutsideRefs,
|
||||
callback: () => {
|
||||
setIsUpdatingRecordEditableName(false);
|
||||
},
|
||||
listenerId: 'editable-breadcrumb-item',
|
||||
});
|
||||
|
||||
const handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {
|
||||
if (isDefined(value)) {
|
||||
event.target.select();
|
||||
}
|
||||
};
|
||||
|
||||
const [value, setValue] = useState<string>(defaultValue);
|
||||
|
||||
const { openEditableBreadCrumbItem } = useOpenEditableBreadCrumbItem();
|
||||
|
||||
return isUpdatingRecordEditableName ? (
|
||||
<TextInputV2
|
||||
className={className}
|
||||
autoGrow
|
||||
sizeVariant="sm"
|
||||
ref={inputRef}
|
||||
value={value}
|
||||
onChange={setValue}
|
||||
placeholder={placeholder}
|
||||
onFocus={handleFocus}
|
||||
autoFocus
|
||||
/>
|
||||
) : (
|
||||
<StyledButton ref={buttonRef} onClick={openEditableBreadCrumbItem}>
|
||||
{value || noValuePlaceholder}
|
||||
</StyledButton>
|
||||
);
|
||||
};
|
||||
@ -1,68 +0,0 @@
|
||||
import { expect, jest } from '@storybook/jest';
|
||||
import { Meta, StoryObj } from '@storybook/react';
|
||||
import { RecoilRoot } from 'recoil';
|
||||
|
||||
import { EditableBreadcrumbItemHotkeyScope } from '@/ui/navigation/bread-crumb/types/EditableBreadcrumbItemHotkeyScope';
|
||||
|
||||
import { findByText, userEvent } from '@storybook/test';
|
||||
import { ComponentDecorator } from 'twenty-ui';
|
||||
import { EditableBreadcrumbItem } from '../EditableBreadcrumbItem';
|
||||
|
||||
const onSubmit = jest.fn();
|
||||
|
||||
const meta: Meta<typeof EditableBreadcrumbItem> = {
|
||||
title: 'UI/Navigation/BreadCrumb/EditableBreadcrumbItem',
|
||||
component: EditableBreadcrumbItem,
|
||||
decorators: [
|
||||
(Story) => (
|
||||
<RecoilRoot>
|
||||
<Story />
|
||||
</RecoilRoot>
|
||||
),
|
||||
ComponentDecorator,
|
||||
],
|
||||
args: {
|
||||
defaultValue: 'Company Name',
|
||||
placeholder: 'Enter name',
|
||||
hotkeyScope: EditableBreadcrumbItemHotkeyScope.EditableBreadcrumbItem,
|
||||
onSubmit,
|
||||
},
|
||||
};
|
||||
|
||||
export default meta;
|
||||
type Story = StoryObj<typeof EditableBreadcrumbItem>;
|
||||
|
||||
export const Default: Story = {
|
||||
args: {},
|
||||
play: async ({ canvasElement }) => {
|
||||
const button = await findByText(canvasElement, 'Company Name');
|
||||
expect(button).toBeInTheDocument();
|
||||
},
|
||||
};
|
||||
|
||||
export const Editing: Story = {
|
||||
args: {},
|
||||
play: async ({ canvasElement }) => {
|
||||
const button = canvasElement.querySelector('button');
|
||||
await userEvent.click(button);
|
||||
|
||||
await new Promise((resolve) => setTimeout(resolve, 100));
|
||||
|
||||
await userEvent.keyboard('New Name');
|
||||
await userEvent.keyboard('{Enter}');
|
||||
|
||||
expect(onSubmit).toHaveBeenCalledWith('New Name');
|
||||
},
|
||||
};
|
||||
|
||||
export const WithNoValue: Story = {
|
||||
args: {
|
||||
defaultValue: '',
|
||||
noValuePlaceholder: 'Untitled',
|
||||
},
|
||||
play: async ({ canvasElement }) => {
|
||||
const button = await findByText(canvasElement, 'Untitled');
|
||||
|
||||
expect(button).toBeInTheDocument();
|
||||
},
|
||||
};
|
||||
@ -1,19 +0,0 @@
|
||||
import { isUpdatingRecordEditableNameState } from '@/object-record/states/isUpdatingRecordEditableName';
|
||||
import { EditableBreadcrumbItemHotkeyScope } from '@/ui/navigation/bread-crumb/types/EditableBreadcrumbItemHotkeyScope';
|
||||
import { useSetHotkeyScope } from '@/ui/utilities/hotkey/hooks/useSetHotkeyScope';
|
||||
import { useSetRecoilState } from 'recoil';
|
||||
|
||||
export const useOpenEditableBreadCrumbItem = () => {
|
||||
const setIsUpdatingRecordEditableName = useSetRecoilState(
|
||||
isUpdatingRecordEditableNameState,
|
||||
);
|
||||
|
||||
const setHotkeyScope = useSetHotkeyScope();
|
||||
|
||||
const openEditableBreadCrumbItem = () => {
|
||||
setIsUpdatingRecordEditableName(true);
|
||||
setHotkeyScope(EditableBreadcrumbItemHotkeyScope.EditableBreadcrumbItem);
|
||||
};
|
||||
|
||||
return { openEditableBreadCrumbItem };
|
||||
};
|
||||
@ -1,3 +0,0 @@
|
||||
export enum EditableBreadcrumbItemHotkeyScope {
|
||||
EditableBreadcrumbItem = 'editable-breadcrumb-item',
|
||||
}
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: af\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Afrikaans\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr ""
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Jou spanlid verantwoordelik vir die bestuur van die maatskappy rekening"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: ar\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Arabic\n"
|
||||
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5);\n"
|
||||
@ -1582,7 +1582,9 @@ msgstr "مؤشر التزامن"
|
||||
|
||||
#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:269
|
||||
msgid "Sync Cursor. Used for syncing events from the calendar provider"
|
||||
msgstr "\n"
|
||||
msgstr ""
|
||||
"\n"
|
||||
""
|
||||
|
||||
#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:291
|
||||
#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:292
|
||||
@ -2251,4 +2253,3 @@ msgstr ""
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "العضو في فريقك المسئول عن إدارة حساب الشركة"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: ca\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Catalan\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr ""
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "El teu membre de l'equip responsable de la gestió del compte de l'empresa"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: cs\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Czech\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 3;\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Člen vašeho týmu odpovědný za správu firemního účtu"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: da\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Danish\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -1538,7 +1538,8 @@ msgstr "Køringer"
|
||||
#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:104
|
||||
#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:105
|
||||
msgid "Scopes"
|
||||
msgstr "R\n"
|
||||
msgstr ""
|
||||
"R\n"
|
||||
"ettigheder"
|
||||
|
||||
#: src/engine/metadata-modules/constants/search-vector-field.constants.ts:5
|
||||
@ -2252,4 +2253,3 @@ msgstr ""
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Dit teammedlem ansvarlig for at forvalte virksomhedens konto"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: de\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: German\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Ihr Teammitglied, das für die Verwaltung des Unternehmenskontos verantwortlich ist"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: el\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Greek\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "Χ"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Το μέλος της ομάδας σας υπεύθυνο για τη διαχείριση του λογαριασμού της εταιρείας"
|
||||
|
||||
|
||||
@ -37,7 +37,7 @@ msgstr "(System) View Sorts"
|
||||
msgid "(System) Views"
|
||||
msgstr "(System) Views"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:55
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:56
|
||||
msgid "A company"
|
||||
msgstr "A company"
|
||||
|
||||
@ -69,7 +69,7 @@ msgstr "A note"
|
||||
msgid "A note target"
|
||||
msgstr "A note target"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:59
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:60
|
||||
msgid "A person"
|
||||
msgstr "A person"
|
||||
|
||||
@ -111,7 +111,7 @@ msgstr "Access Token"
|
||||
|
||||
#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:114
|
||||
#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:115
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:176
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:178
|
||||
msgid "Account Owner"
|
||||
msgstr "Account Owner"
|
||||
|
||||
@ -123,19 +123,19 @@ msgstr "Account owner for companies"
|
||||
msgid "Account Owner For Companies"
|
||||
msgstr "Account Owner For Companies"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:123
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:125
|
||||
msgid "Address"
|
||||
msgstr "Address"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:264
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:266
|
||||
msgid "Address (deprecated) "
|
||||
msgstr "Address (deprecated) "
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:124
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:126
|
||||
msgid "Address of the company"
|
||||
msgstr "Address of the company"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:265
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:267
|
||||
msgid "Address of the company - deprecated in favor of new address field"
|
||||
msgstr "Address of the company - deprecated in favor of new address field"
|
||||
|
||||
@ -172,7 +172,7 @@ msgstr "An event related to user behavior"
|
||||
msgid "An opportunity"
|
||||
msgstr "An opportunity"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:114
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:116
|
||||
msgid "Annual Recurring Revenue: The actual or estimated annual revenue of the company"
|
||||
msgstr "Annual Recurring Revenue: The actual or estimated annual revenue of the company"
|
||||
|
||||
@ -196,7 +196,7 @@ msgstr "ApiKey name"
|
||||
msgid "ApiKey revocation date"
|
||||
msgstr "ApiKey revocation date"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:113
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:115
|
||||
msgid "ARR"
|
||||
msgstr "ARR"
|
||||
|
||||
@ -253,10 +253,10 @@ msgid "Attachment type"
|
||||
msgstr "Attachment type"
|
||||
|
||||
#: src/modules/task/standard-objects/task.workspace-entity.ts:156
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:238
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:244
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:199
|
||||
#: src/modules/note/standard-objects/note.workspace-entity.ts:118
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:239
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:241
|
||||
#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:31
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:118
|
||||
msgid "Attachments"
|
||||
@ -266,11 +266,11 @@ msgstr "Attachments"
|
||||
msgid "Attachments created by the workspace member"
|
||||
msgstr "Attachments created by the workspace member"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:240
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:242
|
||||
msgid "Attachments linked to the company"
|
||||
msgstr "Attachments linked to the company"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:239
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:245
|
||||
msgid "Attachments linked to the contact."
|
||||
msgstr "Attachments linked to the contact."
|
||||
|
||||
@ -316,7 +316,7 @@ msgstr "Automatically create People records when receiving or sending emails"
|
||||
msgid "Automatically create records for people you participated with in an event."
|
||||
msgstr "Automatically create records for people you participated with in an event."
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:146
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:152
|
||||
msgid "Avatar"
|
||||
msgstr "Avatar"
|
||||
|
||||
@ -396,8 +396,8 @@ msgstr "Calendar event participants"
|
||||
|
||||
#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:228
|
||||
#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:229
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:262
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:263
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:268
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:269
|
||||
msgid "Calendar Event Participants"
|
||||
msgstr "Calendar Event Participants"
|
||||
|
||||
@ -415,7 +415,7 @@ msgstr "Channel ID"
|
||||
msgid "Channel Type"
|
||||
msgstr "Channel Type"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:137
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:143
|
||||
msgid "City"
|
||||
msgstr "City"
|
||||
|
||||
@ -431,22 +431,22 @@ msgstr "Color Scheme"
|
||||
msgid "Compact View"
|
||||
msgstr "Compact View"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:54
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:55
|
||||
msgid "Companies"
|
||||
msgstr "Companies"
|
||||
|
||||
#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:134
|
||||
#: src/modules/task/standard-objects/task-target.workspace-entity.ts:65
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:177
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:183
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:148
|
||||
#: src/modules/note/standard-objects/note-target.workspace-entity.ts:65
|
||||
#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:88
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:53
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:54
|
||||
#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:128
|
||||
msgid "Company"
|
||||
msgstr "Company"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:144
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:146
|
||||
msgid "Company record position"
|
||||
msgstr "Company record position"
|
||||
|
||||
@ -477,52 +477,57 @@ msgstr "Connected Accounts"
|
||||
msgid "Contact auto creation policy"
|
||||
msgstr "Contact auto creation policy"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:147
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:153
|
||||
msgid "Contact’s avatar"
|
||||
msgstr "Contact’s avatar"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:138
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:144
|
||||
msgid "Contact’s city"
|
||||
msgstr "Contact’s city"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:178
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:184
|
||||
msgid "Contact’s company"
|
||||
msgstr "Contact’s company"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:80
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:86
|
||||
msgid "Contact’s Emails"
|
||||
msgstr "Contact’s Emails"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:110
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:116
|
||||
msgid "Contact’s job title"
|
||||
msgstr "Contact’s job title"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:90
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:96
|
||||
msgid "Contact’s Linkedin account"
|
||||
msgstr "Contact’s Linkedin account"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:70
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:76
|
||||
msgid "Contact’s name"
|
||||
msgstr "Contact’s name"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:119
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:125
|
||||
msgid "Contact’s phone number"
|
||||
msgstr "Contact’s phone number"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:129
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:135
|
||||
msgid "Contact’s phone numbers"
|
||||
msgstr "Contact’s phone numbers"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:100
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:106
|
||||
msgid "Contact’s X/Twitter account"
|
||||
msgstr "Contact’s X/Twitter account"
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:146
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:147
|
||||
msgid "Context"
|
||||
msgstr "Context"
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:166
|
||||
#: src/modules/task/standard-objects/task.workspace-entity.ts:136
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:167
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:173
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:123
|
||||
#: src/modules/note/standard-objects/note.workspace-entity.ts:98
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:154
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:156
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:61
|
||||
msgid "Created by"
|
||||
msgstr "Created by"
|
||||
@ -577,7 +582,7 @@ msgstr "Display Name"
|
||||
msgid "Display Value"
|
||||
msgstr "Display Value"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:73
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:75
|
||||
msgid "Domain Name"
|
||||
msgstr "Domain Name"
|
||||
|
||||
@ -585,11 +590,11 @@ msgstr "Domain Name"
|
||||
msgid "Due Date"
|
||||
msgstr "Due Date"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:79
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:85
|
||||
msgid "Emails"
|
||||
msgstr "Emails"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:83
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:85
|
||||
msgid "Employees"
|
||||
msgstr "Employees"
|
||||
|
||||
@ -681,11 +686,11 @@ msgid "Event workspace member"
|
||||
msgstr "Event workspace member"
|
||||
|
||||
#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:242
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:276
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:282
|
||||
msgid "Events"
|
||||
msgstr "Events"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:277
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:283
|
||||
msgid "Events linked to the person"
|
||||
msgstr "Events linked to the person"
|
||||
|
||||
@ -775,15 +780,15 @@ msgstr "Favorite workspace member"
|
||||
#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:157
|
||||
#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:143
|
||||
#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:154
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:186
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:196
|
||||
#: src/modules/view/standard-objects/view.workspace-entity.ts:177
|
||||
#: src/modules/task/standard-objects/task.workspace-entity.ts:197
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:226
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:232
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:164
|
||||
#: src/modules/note/standard-objects/note.workspace-entity.ts:143
|
||||
#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:52
|
||||
#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:36
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:226
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:228
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:101
|
||||
msgid "Favorites"
|
||||
msgstr "Favorites"
|
||||
@ -792,11 +797,11 @@ msgstr "Favorites"
|
||||
msgid "Favorites in this folder"
|
||||
msgstr "Favorites in this folder"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:227
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:229
|
||||
msgid "Favorites linked to the company"
|
||||
msgstr "Favorites linked to the company"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:227
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:233
|
||||
msgid "Favorites linked to the contact"
|
||||
msgstr "Favorites linked to the contact"
|
||||
|
||||
@ -820,7 +825,7 @@ msgstr "Favorites linked to the view"
|
||||
msgid "Favorites linked to the workflow"
|
||||
msgstr "Favorites linked to the workflow"
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:187
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:197
|
||||
msgid "Favorites linked to the workflow run"
|
||||
msgstr "Favorites linked to the workflow run"
|
||||
|
||||
@ -907,7 +912,7 @@ msgstr "iCal UID"
|
||||
msgid "Icon"
|
||||
msgstr "Icon"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:133
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:135
|
||||
msgid "ICP"
|
||||
msgstr "ICP"
|
||||
|
||||
@ -916,7 +921,7 @@ msgstr "ICP"
|
||||
msgid "Id"
|
||||
msgstr "Id"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:134
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:136
|
||||
msgid "Ideal Customer Profile: Indicates whether the company is the most suitable and valuable customer for you"
|
||||
msgstr "Ideal Customer Profile: Indicates whether the company is the most suitable and valuable customer for you"
|
||||
|
||||
@ -953,7 +958,7 @@ msgstr "Is Organizer"
|
||||
msgid "Is Sync Enabled"
|
||||
msgstr "Is Sync Enabled"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:109
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:115
|
||||
msgid "Job Title"
|
||||
msgstr "Job Title"
|
||||
|
||||
@ -1026,7 +1031,7 @@ msgstr "Last update"
|
||||
msgid "Linked Object Metadata Id"
|
||||
msgstr "Linked Object Metadata Id"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:192
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:198
|
||||
msgid "Linked Opportunities"
|
||||
msgstr "Linked Opportunities"
|
||||
|
||||
@ -1039,12 +1044,12 @@ msgstr "Linked Record cached name"
|
||||
msgid "Linked Record id"
|
||||
msgstr "Linked Record id"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:89
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:93
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:95
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:95
|
||||
msgid "Linkedin"
|
||||
msgstr "Linkedin"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:193
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:199
|
||||
msgid "List of opportunities for which that person is the point of contact"
|
||||
msgstr "List of opportunities for which that person is the point of contact"
|
||||
|
||||
@ -1140,8 +1145,8 @@ msgstr "Message Participant"
|
||||
|
||||
#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:204
|
||||
#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:205
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:249
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:250
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:255
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:256
|
||||
#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:93
|
||||
#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:94
|
||||
#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:26
|
||||
@ -1194,11 +1199,11 @@ msgstr "Messaging provider refresh token"
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:62
|
||||
#: src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts:34
|
||||
#: src/modules/view/standard-objects/view.workspace-entity.ts:43
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:69
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:75
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:60
|
||||
#: src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts:32
|
||||
#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:43
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:64
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:66
|
||||
#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:42
|
||||
#: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:29
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:40
|
||||
@ -1251,10 +1256,10 @@ msgstr "Note Targets"
|
||||
msgid "Note title"
|
||||
msgstr "Note title"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:215
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:221
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:188
|
||||
#: src/modules/note/standard-objects/note.workspace-entity.ts:45
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:203
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:205
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:69
|
||||
msgid "Notes"
|
||||
msgstr "Notes"
|
||||
@ -1263,11 +1268,11 @@ msgstr "Notes"
|
||||
msgid "Notes tied to the {label}"
|
||||
msgstr "Notes tied to the {label}"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:204
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:206
|
||||
msgid "Notes tied to the company"
|
||||
msgstr "Notes tied to the company"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:216
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:222
|
||||
msgid "Notes tied to the contact"
|
||||
msgstr "Notes tied to the contact"
|
||||
|
||||
@ -1291,7 +1296,7 @@ msgstr "NoteTarget opportunity"
|
||||
msgid "NoteTarget person"
|
||||
msgstr "NoteTarget person"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:84
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:86
|
||||
msgid "Number of employees in the company"
|
||||
msgstr "Number of employees in the company"
|
||||
|
||||
@ -1327,11 +1332,11 @@ msgid "Operations"
|
||||
msgstr "Operations"
|
||||
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:49
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:214
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:216
|
||||
msgid "Opportunities"
|
||||
msgstr "Opportunities"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:215
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:217
|
||||
msgid "Opportunities linked to the company."
|
||||
msgstr "Opportunities linked to the company."
|
||||
|
||||
@ -1393,18 +1398,18 @@ msgstr "Parent View Filter Group"
|
||||
msgid "Parent View Filter Group Id"
|
||||
msgstr "Parent View Filter Group Id"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:58
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:164
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:59
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:166
|
||||
msgid "People"
|
||||
msgstr "People"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:165
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:167
|
||||
msgid "People linked to the company."
|
||||
msgstr "People linked to the company."
|
||||
|
||||
#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:119
|
||||
#: src/modules/task/standard-objects/task-target.workspace-entity.ts:50
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:57
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:58
|
||||
#: src/modules/note/standard-objects/note-target.workspace-entity.ts:50
|
||||
#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:85
|
||||
#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:86
|
||||
@ -1415,15 +1420,15 @@ msgstr "People linked to the company."
|
||||
msgid "Person"
|
||||
msgstr "Person"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:157
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:163
|
||||
msgid "Person record Position"
|
||||
msgstr "Person record Position"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:118
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:124
|
||||
msgid "Phone"
|
||||
msgstr "Phone"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:128
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:134
|
||||
msgid "Phones"
|
||||
msgstr "Phones"
|
||||
|
||||
@ -1433,17 +1438,17 @@ msgstr "Point of Contact"
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:98
|
||||
#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:115
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:146
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:156
|
||||
#: src/modules/view/standard-objects/view.workspace-entity.ts:98
|
||||
#: src/modules/view/standard-objects/view-group.workspace-entity.ts:59
|
||||
#: src/modules/view/standard-objects/view-field.workspace-entity.ts:74
|
||||
#: src/modules/task/standard-objects/task.workspace-entity.ts:57
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:156
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:162
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:112
|
||||
#: src/modules/note/standard-objects/note.workspace-entity.ts:55
|
||||
#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:32
|
||||
#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:46
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:143
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:145
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:49
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:50
|
||||
msgid "Position"
|
||||
@ -1648,9 +1653,9 @@ msgid "Task title"
|
||||
msgstr "Task title"
|
||||
|
||||
#: src/modules/task/standard-objects/task.workspace-entity.ts:47
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:204
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:210
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:177
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:192
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:194
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:85
|
||||
msgid "Tasks"
|
||||
msgstr "Tasks"
|
||||
@ -1663,11 +1668,11 @@ msgstr "Tasks assigned to the workspace member"
|
||||
msgid "Tasks tied to the {label}"
|
||||
msgstr "Tasks tied to the {label}"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:193
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:195
|
||||
msgid "Tasks tied to the company"
|
||||
msgstr "Tasks tied to the company"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:205
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:211
|
||||
msgid "Tasks tied to the contact"
|
||||
msgstr "Tasks tied to the contact"
|
||||
|
||||
@ -1704,28 +1709,28 @@ msgstr "The account handle (email, username, phone number, etc.)"
|
||||
msgid "The account provider"
|
||||
msgstr "The account provider"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:94
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:96
|
||||
msgid "The company Linkedin account"
|
||||
msgstr "The company Linkedin account"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:65
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:67
|
||||
msgid "The company name"
|
||||
msgstr "The company name"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:104
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:106
|
||||
msgid "The company Twitter/X account"
|
||||
msgstr "The company Twitter/X account"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:74
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:76
|
||||
msgid "The company website URL. We use this url to fetch the company icon"
|
||||
msgstr "The company website URL. We use this url to fetch the company icon"
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:168
|
||||
#: src/modules/task/standard-objects/task.workspace-entity.ts:138
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:169
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:175
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:125
|
||||
#: src/modules/note/standard-objects/note.workspace-entity.ts:100
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:156
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:158
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:63
|
||||
msgid "The creator of the record"
|
||||
msgstr "The creator of the record"
|
||||
@ -1795,17 +1800,17 @@ msgstr "Time zone"
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:155
|
||||
#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:166
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:198
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:208
|
||||
#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:34
|
||||
#: src/modules/task/standard-objects/task.workspace-entity.ts:185
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:211
|
||||
#: src/modules/note/standard-objects/note.workspace-entity.ts:131
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:251
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:253
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:134
|
||||
msgid "Timeline Activities"
|
||||
msgstr "Timeline Activities"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:252
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:254
|
||||
msgid "Timeline Activities linked to the company"
|
||||
msgstr "Timeline Activities linked to the company"
|
||||
|
||||
@ -1817,7 +1822,7 @@ msgstr "Timeline Activities linked to the note."
|
||||
msgid "Timeline Activities linked to the opportunity."
|
||||
msgstr "Timeline Activities linked to the opportunity."
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:199
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:209
|
||||
msgid "Timeline activities linked to the run"
|
||||
msgstr "Timeline activities linked to the run"
|
||||
|
||||
@ -2096,7 +2101,7 @@ msgstr "Webhooks"
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:57
|
||||
#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:127
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:172
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:182
|
||||
#: src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts:43
|
||||
#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:194
|
||||
#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:133
|
||||
@ -2109,7 +2114,7 @@ msgstr "Workflow"
|
||||
msgid "Workflow event listeners linked to the workflow."
|
||||
msgstr "Workflow event listeners linked to the workflow."
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:173
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:183
|
||||
msgid "Workflow linked to the run."
|
||||
msgstr "Workflow linked to the run."
|
||||
|
||||
@ -2127,7 +2132,7 @@ msgstr "Workflow Run"
|
||||
msgid "Workflow run ended at"
|
||||
msgstr "Workflow run ended at"
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:147
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:157
|
||||
msgid "Workflow run position"
|
||||
msgstr "Workflow run position"
|
||||
|
||||
@ -2153,7 +2158,7 @@ msgstr "Workflow runs linked to the version."
|
||||
msgid "Workflow runs linked to the workflow."
|
||||
msgstr "Workflow runs linked to the workflow."
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:158
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:168
|
||||
msgid "Workflow version"
|
||||
msgstr "Workflow version"
|
||||
|
||||
@ -2161,7 +2166,7 @@ msgstr "Workflow version"
|
||||
msgid "Workflow Version"
|
||||
msgstr "Workflow Version"
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:159
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:169
|
||||
msgid "Workflow version linked to the run."
|
||||
msgstr "Workflow version linked to the run."
|
||||
|
||||
@ -2232,11 +2237,11 @@ msgstr "Workspace Members"
|
||||
msgid "WorkspaceMember"
|
||||
msgstr "WorkspaceMember"
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:99
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:103
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:105
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:105
|
||||
msgid "X"
|
||||
msgstr "X"
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:177
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Your team member responsible for managing the company account"
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: es\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Spanish\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Miembro de su equipo responsable de gestionar la cuenta de la empresa"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: fi\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Finnish\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr ""
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Tiimin jäsen vastuussa yritystilin hallinnasta"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: fr\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: French\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Le membre de votre équipe responsable de la gestion du compte entreprise"
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: he\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Hebrew\n"
|
||||
"Plural-Forms: nplurals=4; plural=n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3;\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "חבר הצוות שלך אחראי על ניהול חשבון החברה"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: hu\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Hungarian\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Az Ön csapatának megbízott tagja, aki a cégfiókot kezeli"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: it\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Italian\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Il membro del team responsabile della gestione dell'account aziendale"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: ja\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Japanese\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "会社のアカウントを管理する責任のあるチームメンバー"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: ko\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Korean\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "회사 계정을 관리하는 팀원"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: nl\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Dutch\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Uw teamlid verantwoordelijk voor het beheer van het bedrijfsaccount"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: no\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Norwegian\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Ditt teammedlem ansvarlig for å administrere bedriftskontoen"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: pl\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Polish\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Twój członek zespołu odpowiedzialny za zarządzanie kontem firmy"
|
||||
|
||||
|
||||
@ -37,7 +37,7 @@ msgstr ""
|
||||
msgid "(System) Views"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:55
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:56
|
||||
msgid "A company"
|
||||
msgstr ""
|
||||
|
||||
@ -69,7 +69,7 @@ msgstr ""
|
||||
msgid "A note target"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:59
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:60
|
||||
msgid "A person"
|
||||
msgstr ""
|
||||
|
||||
@ -111,7 +111,7 @@ msgstr ""
|
||||
|
||||
#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:114
|
||||
#: src/modules/connected-account/standard-objects/connected-account.workspace-entity.ts:115
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:176
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:178
|
||||
msgid "Account Owner"
|
||||
msgstr ""
|
||||
|
||||
@ -123,19 +123,19 @@ msgstr ""
|
||||
msgid "Account Owner For Companies"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:123
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:125
|
||||
msgid "Address"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:264
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:266
|
||||
msgid "Address (deprecated) "
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:124
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:126
|
||||
msgid "Address of the company"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:265
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:267
|
||||
msgid "Address of the company - deprecated in favor of new address field"
|
||||
msgstr ""
|
||||
|
||||
@ -172,7 +172,7 @@ msgstr ""
|
||||
msgid "An opportunity"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:114
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:116
|
||||
msgid "Annual Recurring Revenue: The actual or estimated annual revenue of the company"
|
||||
msgstr ""
|
||||
|
||||
@ -196,7 +196,7 @@ msgstr ""
|
||||
msgid "ApiKey revocation date"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:113
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:115
|
||||
msgid "ARR"
|
||||
msgstr ""
|
||||
|
||||
@ -253,10 +253,10 @@ msgid "Attachment type"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/task/standard-objects/task.workspace-entity.ts:156
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:238
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:244
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:199
|
||||
#: src/modules/note/standard-objects/note.workspace-entity.ts:118
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:239
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:241
|
||||
#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:31
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:118
|
||||
msgid "Attachments"
|
||||
@ -266,11 +266,11 @@ msgstr ""
|
||||
msgid "Attachments created by the workspace member"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:240
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:242
|
||||
msgid "Attachments linked to the company"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:239
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:245
|
||||
msgid "Attachments linked to the contact."
|
||||
msgstr ""
|
||||
|
||||
@ -316,7 +316,7 @@ msgstr ""
|
||||
msgid "Automatically create records for people you participated with in an event."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:146
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:152
|
||||
msgid "Avatar"
|
||||
msgstr ""
|
||||
|
||||
@ -396,8 +396,8 @@ msgstr ""
|
||||
|
||||
#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:228
|
||||
#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:229
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:262
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:263
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:268
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:269
|
||||
msgid "Calendar Event Participants"
|
||||
msgstr ""
|
||||
|
||||
@ -415,7 +415,7 @@ msgstr ""
|
||||
msgid "Channel Type"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:137
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:143
|
||||
msgid "City"
|
||||
msgstr ""
|
||||
|
||||
@ -431,22 +431,22 @@ msgstr ""
|
||||
msgid "Compact View"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:54
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:55
|
||||
msgid "Companies"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:134
|
||||
#: src/modules/task/standard-objects/task-target.workspace-entity.ts:65
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:177
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:183
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:148
|
||||
#: src/modules/note/standard-objects/note-target.workspace-entity.ts:65
|
||||
#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:88
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:53
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:54
|
||||
#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:128
|
||||
msgid "Company"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:144
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:146
|
||||
msgid "Company record position"
|
||||
msgstr ""
|
||||
|
||||
@ -477,52 +477,57 @@ msgstr ""
|
||||
msgid "Contact auto creation policy"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:147
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:153
|
||||
msgid "Contact’s avatar"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:138
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:144
|
||||
msgid "Contact’s city"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:178
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:184
|
||||
msgid "Contact’s company"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:80
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:86
|
||||
msgid "Contact’s Emails"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:110
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:116
|
||||
msgid "Contact’s job title"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:90
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:96
|
||||
msgid "Contact’s Linkedin account"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:70
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:76
|
||||
msgid "Contact’s name"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:119
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:125
|
||||
msgid "Contact’s phone number"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:129
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:135
|
||||
msgid "Contact’s phone numbers"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:100
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:106
|
||||
msgid "Contact’s X/Twitter account"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:146
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:147
|
||||
msgid "Context"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:166
|
||||
#: src/modules/task/standard-objects/task.workspace-entity.ts:136
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:167
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:173
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:123
|
||||
#: src/modules/note/standard-objects/note.workspace-entity.ts:98
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:154
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:156
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:61
|
||||
msgid "Created by"
|
||||
msgstr ""
|
||||
@ -577,7 +582,7 @@ msgstr ""
|
||||
msgid "Display Value"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:73
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:75
|
||||
msgid "Domain Name"
|
||||
msgstr ""
|
||||
|
||||
@ -585,11 +590,11 @@ msgstr ""
|
||||
msgid "Due Date"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:79
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:85
|
||||
msgid "Emails"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:83
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:85
|
||||
msgid "Employees"
|
||||
msgstr ""
|
||||
|
||||
@ -681,11 +686,11 @@ msgid "Event workspace member"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:242
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:276
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:282
|
||||
msgid "Events"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:277
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:283
|
||||
msgid "Events linked to the person"
|
||||
msgstr ""
|
||||
|
||||
@ -775,15 +780,15 @@ msgstr ""
|
||||
#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:157
|
||||
#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:143
|
||||
#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:154
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:186
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:196
|
||||
#: src/modules/view/standard-objects/view.workspace-entity.ts:177
|
||||
#: src/modules/task/standard-objects/task.workspace-entity.ts:197
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:226
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:232
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:164
|
||||
#: src/modules/note/standard-objects/note.workspace-entity.ts:143
|
||||
#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:52
|
||||
#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:36
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:226
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:228
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:101
|
||||
msgid "Favorites"
|
||||
msgstr ""
|
||||
@ -792,11 +797,11 @@ msgstr ""
|
||||
msgid "Favorites in this folder"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:227
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:229
|
||||
msgid "Favorites linked to the company"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:227
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:233
|
||||
msgid "Favorites linked to the contact"
|
||||
msgstr ""
|
||||
|
||||
@ -820,7 +825,7 @@ msgstr ""
|
||||
msgid "Favorites linked to the workflow"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:187
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:197
|
||||
msgid "Favorites linked to the workflow run"
|
||||
msgstr ""
|
||||
|
||||
@ -907,7 +912,7 @@ msgstr ""
|
||||
msgid "Icon"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:133
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:135
|
||||
msgid "ICP"
|
||||
msgstr ""
|
||||
|
||||
@ -916,7 +921,7 @@ msgstr ""
|
||||
msgid "Id"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:134
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:136
|
||||
msgid "Ideal Customer Profile: Indicates whether the company is the most suitable and valuable customer for you"
|
||||
msgstr ""
|
||||
|
||||
@ -953,7 +958,7 @@ msgstr ""
|
||||
msgid "Is Sync Enabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:109
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:115
|
||||
msgid "Job Title"
|
||||
msgstr ""
|
||||
|
||||
@ -1026,7 +1031,7 @@ msgstr ""
|
||||
msgid "Linked Object Metadata Id"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:192
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:198
|
||||
msgid "Linked Opportunities"
|
||||
msgstr ""
|
||||
|
||||
@ -1039,12 +1044,12 @@ msgstr ""
|
||||
msgid "Linked Record id"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:89
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:93
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:95
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:95
|
||||
msgid "Linkedin"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:193
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:199
|
||||
msgid "List of opportunities for which that person is the point of contact"
|
||||
msgstr ""
|
||||
|
||||
@ -1140,8 +1145,8 @@ msgstr ""
|
||||
|
||||
#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:204
|
||||
#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:205
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:249
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:250
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:255
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:256
|
||||
#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:93
|
||||
#: src/modules/messaging/common/standard-objects/message.workspace-entity.ts:94
|
||||
#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:26
|
||||
@ -1194,11 +1199,11 @@ msgstr ""
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:62
|
||||
#: src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts:34
|
||||
#: src/modules/view/standard-objects/view.workspace-entity.ts:43
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:69
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:75
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:60
|
||||
#: src/modules/messaging/common/standard-objects/message-folder.workspace-entity.ts:32
|
||||
#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:43
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:64
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:66
|
||||
#: src/modules/attachment/standard-objects/attachment.workspace-entity.ts:42
|
||||
#: src/modules/api-key/standard-objects/api-key.workspace-entity.ts:29
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:40
|
||||
@ -1251,10 +1256,10 @@ msgstr ""
|
||||
msgid "Note title"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:215
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:221
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:188
|
||||
#: src/modules/note/standard-objects/note.workspace-entity.ts:45
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:203
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:205
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:69
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
@ -1263,11 +1268,11 @@ msgstr ""
|
||||
msgid "Notes tied to the {label}"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:204
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:206
|
||||
msgid "Notes tied to the company"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:216
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:222
|
||||
msgid "Notes tied to the contact"
|
||||
msgstr ""
|
||||
|
||||
@ -1291,7 +1296,7 @@ msgstr ""
|
||||
msgid "NoteTarget person"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:84
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:86
|
||||
msgid "Number of employees in the company"
|
||||
msgstr ""
|
||||
|
||||
@ -1327,11 +1332,11 @@ msgid "Operations"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:49
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:214
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:216
|
||||
msgid "Opportunities"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:215
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:217
|
||||
msgid "Opportunities linked to the company."
|
||||
msgstr ""
|
||||
|
||||
@ -1393,18 +1398,18 @@ msgstr ""
|
||||
msgid "Parent View Filter Group Id"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:58
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:164
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:59
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:166
|
||||
msgid "People"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:165
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:167
|
||||
msgid "People linked to the company."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:119
|
||||
#: src/modules/task/standard-objects/task-target.workspace-entity.ts:50
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:57
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:58
|
||||
#: src/modules/note/standard-objects/note-target.workspace-entity.ts:50
|
||||
#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:85
|
||||
#: src/modules/messaging/common/standard-objects/message-participant.workspace-entity.ts:86
|
||||
@ -1415,15 +1420,15 @@ msgstr ""
|
||||
msgid "Person"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:157
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:163
|
||||
msgid "Person record Position"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:118
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:124
|
||||
msgid "Phone"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:128
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:134
|
||||
msgid "Phones"
|
||||
msgstr ""
|
||||
|
||||
@ -1433,17 +1438,17 @@ msgstr ""
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:98
|
||||
#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:115
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:146
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:156
|
||||
#: src/modules/view/standard-objects/view.workspace-entity.ts:98
|
||||
#: src/modules/view/standard-objects/view-group.workspace-entity.ts:59
|
||||
#: src/modules/view/standard-objects/view-field.workspace-entity.ts:74
|
||||
#: src/modules/task/standard-objects/task.workspace-entity.ts:57
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:156
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:162
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:112
|
||||
#: src/modules/note/standard-objects/note.workspace-entity.ts:55
|
||||
#: src/modules/favorite-folder/standard-objects/favorite-folder.workspace-entity.ts:32
|
||||
#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:46
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:143
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:145
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:49
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:50
|
||||
msgid "Position"
|
||||
@ -1648,9 +1653,9 @@ msgid "Task title"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/task/standard-objects/task.workspace-entity.ts:47
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:204
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:210
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:177
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:192
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:194
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:85
|
||||
msgid "Tasks"
|
||||
msgstr ""
|
||||
@ -1663,11 +1668,11 @@ msgstr ""
|
||||
msgid "Tasks tied to the {label}"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:193
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:195
|
||||
msgid "Tasks tied to the company"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:205
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:211
|
||||
msgid "Tasks tied to the contact"
|
||||
msgstr ""
|
||||
|
||||
@ -1704,28 +1709,28 @@ msgstr ""
|
||||
msgid "The account provider"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:94
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:96
|
||||
msgid "The company Linkedin account"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:65
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:67
|
||||
msgid "The company name"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:104
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:106
|
||||
msgid "The company Twitter/X account"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:74
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:76
|
||||
msgid "The company website URL. We use this url to fetch the company icon"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:168
|
||||
#: src/modules/task/standard-objects/task.workspace-entity.ts:138
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:169
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:175
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:125
|
||||
#: src/modules/note/standard-objects/note.workspace-entity.ts:100
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:156
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:158
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:63
|
||||
msgid "The creator of the record"
|
||||
msgstr ""
|
||||
@ -1795,17 +1800,17 @@ msgstr ""
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:155
|
||||
#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:166
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:198
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:208
|
||||
#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:34
|
||||
#: src/modules/task/standard-objects/task.workspace-entity.ts:185
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:211
|
||||
#: src/modules/note/standard-objects/note.workspace-entity.ts:131
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:251
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:253
|
||||
#: src/engine/twenty-orm/custom.workspace-entity.ts:134
|
||||
msgid "Timeline Activities"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:252
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:254
|
||||
msgid "Timeline Activities linked to the company"
|
||||
msgstr ""
|
||||
|
||||
@ -1817,7 +1822,7 @@ msgstr ""
|
||||
msgid "Timeline Activities linked to the opportunity."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:199
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:209
|
||||
msgid "Timeline activities linked to the run"
|
||||
msgstr ""
|
||||
|
||||
@ -2096,7 +2101,7 @@ msgstr ""
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow.workspace-entity.ts:57
|
||||
#: src/modules/workflow/common/standard-objects/workflow-version.workspace-entity.ts:127
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:172
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:182
|
||||
#: src/modules/workflow/common/standard-objects/workflow-event-listener.workspace-entity.ts:43
|
||||
#: src/modules/timeline/standard-objects/timeline-activity.workspace-entity.ts:194
|
||||
#: src/modules/favorite/standard-objects/favorite.workspace-entity.ts:133
|
||||
@ -2109,7 +2114,7 @@ msgstr ""
|
||||
msgid "Workflow event listeners linked to the workflow."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:173
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:183
|
||||
msgid "Workflow linked to the run."
|
||||
msgstr ""
|
||||
|
||||
@ -2127,7 +2132,7 @@ msgstr ""
|
||||
msgid "Workflow run ended at"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:147
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:157
|
||||
msgid "Workflow run position"
|
||||
msgstr ""
|
||||
|
||||
@ -2153,7 +2158,7 @@ msgstr ""
|
||||
msgid "Workflow runs linked to the workflow."
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:158
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:168
|
||||
msgid "Workflow version"
|
||||
msgstr ""
|
||||
|
||||
@ -2161,7 +2166,7 @@ msgstr ""
|
||||
msgid "Workflow Version"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:159
|
||||
#: src/modules/workflow/common/standard-objects/workflow-run.workspace-entity.ts:169
|
||||
msgid "Workflow version linked to the run."
|
||||
msgstr ""
|
||||
|
||||
@ -2232,11 +2237,11 @@ msgstr ""
|
||||
msgid "WorkspaceMember"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:99
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:103
|
||||
#: src/modules/person/standard-objects/person.workspace-entity.ts:105
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:105
|
||||
msgid "X"
|
||||
msgstr ""
|
||||
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:177
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr ""
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: pt\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Portuguese, Brazilian\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Seu membro da equipe responsável por gerenciar a conta da empresa"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: pt\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Portuguese\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "O membro da sua equipa responsável pela gestão da conta da empresa"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: ro\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Romanian\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100>0 && n%100<20)) ? 1 : 2);\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Membrul echipei dumneavoastră responsabil de gestionarea contului companiei"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: ru\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Russian\n"
|
||||
"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Ваш член команды, ответственный за управление корпоративным аккаунтом"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: sr_Cyrl\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Serbian (Cyrillic)\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "Х"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Ваш тимски члан задужен за управљање налогом компаније"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: sv\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Swedish\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -1479,7 +1479,8 @@ msgstr "F\"or\"aldrade f\"argschema"
|
||||
|
||||
#: src/modules/workspace-member/standard-objects/workspace-member.workspace-entity.ts:108
|
||||
msgid "Preferred language"
|
||||
msgstr "F\"or\"aldrat spr\n"
|
||||
msgstr ""
|
||||
"F\"or\"aldrat spr\n"
|
||||
"k"
|
||||
|
||||
#: src/modules/opportunity/standard-objects/opportunity.workspace-entity.ts:223
|
||||
@ -1583,7 +1584,8 @@ msgstr "Synkkurs"
|
||||
|
||||
#: src/modules/calendar/common/standard-objects/calendar-channel.workspace-entity.ts:269
|
||||
msgid "Sync Cursor. Used for syncing events from the calendar provider"
|
||||
msgstr "Synkkurs. Anv\"ands f\"or att synkronisera h\"andelser fr\n"
|
||||
msgstr ""
|
||||
"Synkkurs. Anv\"ands f\"or att synkronisera h\"andelser fr\n"
|
||||
"n kalenderleverant\"oren"
|
||||
|
||||
#: src/modules/messaging/common/standard-objects/message-channel.workspace-entity.ts:291
|
||||
@ -2253,4 +2255,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Ditt teammedlem ansvarig för att hantera företagskontot"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: tr\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Turkish\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr ""
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Şirket hesabını yönetmekten sorumlu ekip üyeniz"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: uk\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Ukrainian\n"
|
||||
"Plural-Forms: nplurals=4; plural=((n%10==1 && n%100!=11) ? 0 : ((n%10 >= 2 && n%10 <=4 && (n%100 < 12 || n%100 > 14)) ? 1 : ((n%10 == 0 || (n%10 >= 5 && n%10 <=9)) || (n%100 >= 11 && n%100 <= 14)) ? 2 : 3));\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "Х"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Ваш колега з команди, відповідальний за управління обліковим записом компанії"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: vi\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Vietnamese\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "Thành viên trong nhóm của bạn phụ trách quản lý tài khoản công ty"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: zh\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Chinese Simplified\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "负责管理公司账户的团队成员"
|
||||
|
||||
|
||||
@ -8,8 +8,8 @@ msgstr ""
|
||||
"Language: zh\n"
|
||||
"Project-Id-Version: cf448e737e0d6d7b78742f963d761c61\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"PO-Revision-Date: 2025-01-01 00:00
|
||||
"
|
||||
"PO-Revision-Date: 2025-01-01 00:00\n"
|
||||
": \n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: Chinese Traditional\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
@ -2251,4 +2251,3 @@ msgstr "X"
|
||||
#: src/modules/company/standard-objects/company.workspace-entity.ts:179
|
||||
msgid "Your team member responsible for managing the company account"
|
||||
msgstr "負責管理公司帳戶的團隊成員"
|
||||
|
||||
|
||||
@ -7,19 +7,31 @@ type ComputeNodeDimensionsProps = {
|
||||
dimensions: { height: number; width: number } | undefined,
|
||||
) => ReactNode;
|
||||
node?: ReactNode;
|
||||
className?: string;
|
||||
};
|
||||
|
||||
const StyledNodeWrapper = styled.span`
|
||||
pointer-events: none;
|
||||
position: fixed;
|
||||
visibility: hidden;
|
||||
`;
|
||||
|
||||
const StyledDiv = styled.div`
|
||||
max-width: 100%;
|
||||
position: relative;
|
||||
`;
|
||||
|
||||
const StyledChildWrapper = styled.div`
|
||||
left: 0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
`;
|
||||
|
||||
export const ComputeNodeDimensions = ({
|
||||
children,
|
||||
node = children(undefined),
|
||||
className,
|
||||
}: ComputeNodeDimensionsProps) => {
|
||||
const nodeWrapperRef = useRef<HTMLSpanElement>(null);
|
||||
const nodeWrapperRef = useRef<HTMLDivElement>(null);
|
||||
const [nodeDimensions, setNodeDimensions] = useState<
|
||||
| {
|
||||
width: number;
|
||||
@ -45,9 +57,11 @@ export const ComputeNodeDimensions = ({
|
||||
}, [nodeWrapperRef]);
|
||||
|
||||
return (
|
||||
<>
|
||||
<StyledNodeWrapper ref={nodeWrapperRef}>{node}</StyledNodeWrapper>
|
||||
{nodeDimensions && children(nodeDimensions)}
|
||||
</>
|
||||
<StyledDiv ref={nodeWrapperRef} className={className}>
|
||||
<StyledNodeWrapper>{node}</StyledNodeWrapper>
|
||||
<StyledChildWrapper>
|
||||
{nodeDimensions && children(nodeDimensions)}
|
||||
</StyledChildWrapper>
|
||||
</StyledDiv>
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user