Convert metadata tables to camelCase (#2400)
* Convert metadata tables to camelCase * datasourcemetadataid to datasourceid * refactor metadata folders * fix command * move commands out of metadata * fix seed * rename objectId and fieldId in objectMetadataId and fieldMetadataId in FE * fix field-metadata * Fix * Fix * remove logs --------- Co-authored-by: Charles Bochet <charles@twenty.com>
This commit is contained in:
@ -173,7 +173,7 @@ export type CreateFieldInput = {
|
|||||||
icon?: InputMaybe<Scalars['String']['input']>;
|
icon?: InputMaybe<Scalars['String']['input']>;
|
||||||
label: Scalars['String']['input'];
|
label: Scalars['String']['input'];
|
||||||
name: Scalars['String']['input'];
|
name: Scalars['String']['input'];
|
||||||
objectId: Scalars['String']['input'];
|
objectMetadataId: Scalars['String']['input'];
|
||||||
type: FieldMetadataType;
|
type: FieldMetadataType;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -196,6 +196,21 @@ export type CreateOneObjectInput = {
|
|||||||
object: CreateObjectInput;
|
object: CreateObjectInput;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type CreateOneRelationInput = {
|
||||||
|
/** The record to create */
|
||||||
|
relation: CreateRelationInput;
|
||||||
|
};
|
||||||
|
|
||||||
|
export type CreateRelationInput = {
|
||||||
|
description?: InputMaybe<Scalars['String']['input']>;
|
||||||
|
fromObjectMetadataId: Scalars['String']['input'];
|
||||||
|
icon?: InputMaybe<Scalars['String']['input']>;
|
||||||
|
label: Scalars['String']['input'];
|
||||||
|
name: Scalars['String']['input'];
|
||||||
|
relationType: Scalars['String']['input'];
|
||||||
|
toObjectMetadataId: Scalars['String']['input'];
|
||||||
|
};
|
||||||
|
|
||||||
export enum Currency {
|
export enum Currency {
|
||||||
Aed = 'AED',
|
Aed = 'AED',
|
||||||
Afn = 'AFN',
|
Afn = 'AFN',
|
||||||
@ -437,6 +452,7 @@ export enum FieldMetadataType {
|
|||||||
Money = 'MONEY',
|
Money = 'MONEY',
|
||||||
Number = 'NUMBER',
|
Number = 'NUMBER',
|
||||||
Phone = 'PHONE',
|
Phone = 'PHONE',
|
||||||
|
Relation = 'RELATION',
|
||||||
Text = 'TEXT',
|
Text = 'TEXT',
|
||||||
Url = 'URL',
|
Url = 'URL',
|
||||||
Uuid = 'UUID'
|
Uuid = 'UUID'
|
||||||
@ -446,6 +462,7 @@ export type Mutation = {
|
|||||||
__typename?: 'Mutation';
|
__typename?: 'Mutation';
|
||||||
createOneField: Field;
|
createOneField: Field;
|
||||||
createOneObject: Object;
|
createOneObject: Object;
|
||||||
|
createOneRelation: Relation;
|
||||||
deleteOneField: FieldDeleteResponse;
|
deleteOneField: FieldDeleteResponse;
|
||||||
deleteOneObject: ObjectDeleteResponse;
|
deleteOneObject: ObjectDeleteResponse;
|
||||||
updateOneField: Field;
|
updateOneField: Field;
|
||||||
@ -463,6 +480,11 @@ export type MutationCreateOneObjectArgs = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
export type MutationCreateOneRelationArgs = {
|
||||||
|
input: CreateOneRelationInput;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
export type MutationDeleteOneFieldArgs = {
|
export type MutationDeleteOneFieldArgs = {
|
||||||
input: DeleteOneFieldInput;
|
input: DeleteOneFieldInput;
|
||||||
};
|
};
|
||||||
@ -611,6 +633,7 @@ export type Query = {
|
|||||||
fields: FieldConnection;
|
fields: FieldConnection;
|
||||||
object: Object;
|
object: Object;
|
||||||
objects: ObjectConnection;
|
objects: ObjectConnection;
|
||||||
|
relation: Relation;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -633,6 +656,11 @@ export type QueryObjectsArgs = {
|
|||||||
paging?: CursorPaging;
|
paging?: CursorPaging;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
export type QueryRelationArgs = {
|
||||||
|
id: Scalars['ID']['input'];
|
||||||
|
};
|
||||||
|
|
||||||
export type Support = {
|
export type Support = {
|
||||||
__typename?: 'Support';
|
__typename?: 'Support';
|
||||||
supportDriver: Scalars['String']['output'];
|
supportDriver: Scalars['String']['output'];
|
||||||
@ -769,6 +797,7 @@ export type Field = {
|
|||||||
__typename?: 'field';
|
__typename?: 'field';
|
||||||
createdAt: Scalars['DateTime']['output'];
|
createdAt: Scalars['DateTime']['output'];
|
||||||
description?: Maybe<Scalars['String']['output']>;
|
description?: Maybe<Scalars['String']['output']>;
|
||||||
|
fromRelationMetadata?: Maybe<Relation>;
|
||||||
icon?: Maybe<Scalars['String']['output']>;
|
icon?: Maybe<Scalars['String']['output']>;
|
||||||
id: Scalars['ID']['output'];
|
id: Scalars['ID']['output'];
|
||||||
isActive: Scalars['Boolean']['output'];
|
isActive: Scalars['Boolean']['output'];
|
||||||
@ -778,6 +807,7 @@ export type Field = {
|
|||||||
name: Scalars['String']['output'];
|
name: Scalars['String']['output'];
|
||||||
/** @deprecated Use label name instead */
|
/** @deprecated Use label name instead */
|
||||||
placeholder?: Maybe<Scalars['String']['output']>;
|
placeholder?: Maybe<Scalars['String']['output']>;
|
||||||
|
toRelationMetadata?: Maybe<Relation>;
|
||||||
type: FieldMetadataType;
|
type: FieldMetadataType;
|
||||||
updatedAt: Scalars['DateTime']['output'];
|
updatedAt: Scalars['DateTime']['output'];
|
||||||
};
|
};
|
||||||
@ -820,6 +850,28 @@ export type ObjectEdge = {
|
|||||||
node: Object;
|
node: Object;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type Relation = {
|
||||||
|
__typename?: 'relation';
|
||||||
|
createdAt: Scalars['DateTime']['output'];
|
||||||
|
fromFieldMetadataId: Scalars['String']['output'];
|
||||||
|
fromObjectMetadata: Object;
|
||||||
|
fromObjectMetadataId: Scalars['String']['output'];
|
||||||
|
id: Scalars['ID']['output'];
|
||||||
|
relationType: Scalars['String']['output'];
|
||||||
|
toFieldMetadataId: Scalars['String']['output'];
|
||||||
|
toObjectMetadata: Object;
|
||||||
|
toObjectMetadataId: Scalars['String']['output'];
|
||||||
|
updatedAt: Scalars['DateTime']['output'];
|
||||||
|
};
|
||||||
|
|
||||||
|
export type RelationEdge = {
|
||||||
|
__typename?: 'relationEdge';
|
||||||
|
/** Cursor for this node. */
|
||||||
|
cursor: Scalars['ConnectionCursor']['output'];
|
||||||
|
/** The node containing the relation */
|
||||||
|
node: Relation;
|
||||||
|
};
|
||||||
|
|
||||||
export type CreateOneObjectMetadataItemMutationVariables = Exact<{
|
export type CreateOneObjectMetadataItemMutationVariables = Exact<{
|
||||||
input: CreateOneObjectInput;
|
input: CreateOneObjectInput;
|
||||||
}>;
|
}>;
|
||||||
|
|||||||
@ -1322,6 +1322,7 @@ export enum FieldMetadataType {
|
|||||||
Money = 'MONEY',
|
Money = 'MONEY',
|
||||||
Number = 'NUMBER',
|
Number = 'NUMBER',
|
||||||
Phone = 'PHONE',
|
Phone = 'PHONE',
|
||||||
|
Relation = 'RELATION',
|
||||||
Text = 'TEXT',
|
Text = 'TEXT',
|
||||||
Url = 'URL',
|
Url = 'URL',
|
||||||
Uuid = 'UUID'
|
Uuid = 'UUID'
|
||||||
@ -1391,6 +1392,7 @@ export type Mutation = {
|
|||||||
createOneApiKey: ApiKeyToken;
|
createOneApiKey: ApiKeyToken;
|
||||||
createOneComment: Comment;
|
createOneComment: Comment;
|
||||||
createOneCompany: Company;
|
createOneCompany: Company;
|
||||||
|
createOneField: Field;
|
||||||
createOneObject: Object;
|
createOneObject: Object;
|
||||||
createOnePerson: Person;
|
createOnePerson: Person;
|
||||||
createOnePipelineProgress: PipelineProgress;
|
createOnePipelineProgress: PipelineProgress;
|
||||||
@ -1402,6 +1404,7 @@ export type Mutation = {
|
|||||||
deleteManyCompany: AffectedRows;
|
deleteManyCompany: AffectedRows;
|
||||||
deleteManyPerson: AffectedRows;
|
deleteManyPerson: AffectedRows;
|
||||||
deleteManyPipelineProgress: AffectedRows;
|
deleteManyPipelineProgress: AffectedRows;
|
||||||
|
deleteOneField: FieldDeleteResponse;
|
||||||
deleteOneObject: ObjectDeleteResponse;
|
deleteOneObject: ObjectDeleteResponse;
|
||||||
deleteOnePipelineStage: PipelineStage;
|
deleteOnePipelineStage: PipelineStage;
|
||||||
deleteOneWebHook: WebHook;
|
deleteOneWebHook: WebHook;
|
||||||
@ -1414,6 +1417,7 @@ export type Mutation = {
|
|||||||
updateOneActivity: Activity;
|
updateOneActivity: Activity;
|
||||||
updateOneCompany?: Maybe<Company>;
|
updateOneCompany?: Maybe<Company>;
|
||||||
updateOneFavorites: Favorite;
|
updateOneFavorites: Favorite;
|
||||||
|
updateOneField: Field;
|
||||||
updateOneObject: Object;
|
updateOneObject: Object;
|
||||||
updateOnePerson?: Maybe<Person>;
|
updateOnePerson?: Maybe<Person>;
|
||||||
updateOnePipelineProgress?: Maybe<PipelineProgress>;
|
updateOnePipelineProgress?: Maybe<PipelineProgress>;
|
||||||
@ -2404,6 +2408,8 @@ export type Query = {
|
|||||||
clientConfig: ClientConfig;
|
clientConfig: ClientConfig;
|
||||||
currentUser: User;
|
currentUser: User;
|
||||||
currentWorkspace: Workspace;
|
currentWorkspace: Workspace;
|
||||||
|
field: Field;
|
||||||
|
fields: FieldConnection;
|
||||||
findFavorites: Array<Favorite>;
|
findFavorites: Array<Favorite>;
|
||||||
findManyActivities: Array<Activity>;
|
findManyActivities: Array<Activity>;
|
||||||
findManyApiKey: Array<ApiKey>;
|
findManyApiKey: Array<ApiKey>;
|
||||||
@ -2593,6 +2599,15 @@ export type Support = {
|
|||||||
supportFrontChatId?: Maybe<Scalars['String']>;
|
supportFrontChatId?: Maybe<Scalars['String']>;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type TUser = {
|
||||||
|
__typename?: 'TUser';
|
||||||
|
email: Scalars['String'];
|
||||||
|
emailVerified: Scalars['Boolean'];
|
||||||
|
firstName?: Maybe<Scalars['String']>;
|
||||||
|
id: Scalars['ID'];
|
||||||
|
lastName?: Maybe<Scalars['String']>;
|
||||||
|
};
|
||||||
|
|
||||||
export type Telemetry = {
|
export type Telemetry = {
|
||||||
__typename?: 'Telemetry';
|
__typename?: 'Telemetry';
|
||||||
anonymizationEnabled: Scalars['Boolean'];
|
anonymizationEnabled: Scalars['Boolean'];
|
||||||
@ -3093,6 +3108,7 @@ export type Field = {
|
|||||||
__typename?: 'field';
|
__typename?: 'field';
|
||||||
createdAt: Scalars['DateTime'];
|
createdAt: Scalars['DateTime'];
|
||||||
description?: Maybe<Scalars['String']>;
|
description?: Maybe<Scalars['String']>;
|
||||||
|
fromRelationMetadata?: Maybe<Relation>;
|
||||||
icon?: Maybe<Scalars['String']>;
|
icon?: Maybe<Scalars['String']>;
|
||||||
id: Scalars['ID'];
|
id: Scalars['ID'];
|
||||||
isActive: Scalars['Boolean'];
|
isActive: Scalars['Boolean'];
|
||||||
@ -3102,6 +3118,7 @@ export type Field = {
|
|||||||
name: Scalars['String'];
|
name: Scalars['String'];
|
||||||
/** @deprecated Use label name instead */
|
/** @deprecated Use label name instead */
|
||||||
placeholder?: Maybe<Scalars['String']>;
|
placeholder?: Maybe<Scalars['String']>;
|
||||||
|
toRelationMetadata?: Maybe<Relation>;
|
||||||
type: FieldMetadataType;
|
type: FieldMetadataType;
|
||||||
updatedAt: Scalars['DateTime'];
|
updatedAt: Scalars['DateTime'];
|
||||||
};
|
};
|
||||||
@ -3144,6 +3161,28 @@ export type ObjectEdge = {
|
|||||||
node: Object;
|
node: Object;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export type Relation = {
|
||||||
|
__typename?: 'relation';
|
||||||
|
createdAt: Scalars['DateTime'];
|
||||||
|
fromFieldMetadataId: Scalars['String'];
|
||||||
|
fromObjectMetadata: Object;
|
||||||
|
fromObjectMetadataId: Scalars['String'];
|
||||||
|
id: Scalars['ID'];
|
||||||
|
relationType: Scalars['String'];
|
||||||
|
toFieldMetadataId: Scalars['String'];
|
||||||
|
toObjectMetadata: Object;
|
||||||
|
toObjectMetadataId: Scalars['String'];
|
||||||
|
updatedAt: Scalars['DateTime'];
|
||||||
|
};
|
||||||
|
|
||||||
|
export type RelationEdge = {
|
||||||
|
__typename?: 'relationEdge';
|
||||||
|
/** Cursor for this node. */
|
||||||
|
cursor: Scalars['ConnectionCursor'];
|
||||||
|
/** The node containing the relation */
|
||||||
|
node: Relation;
|
||||||
|
};
|
||||||
|
|
||||||
export type ActivityWithTargetsFragment = { __typename?: 'Activity', id: string, createdAt: string, updatedAt: string, activityTargets?: Array<{ __typename?: 'ActivityTarget', id: string, createdAt: string, updatedAt: string, companyId?: string | null, personId?: string | null }> | null };
|
export type ActivityWithTargetsFragment = { __typename?: 'Activity', id: string, createdAt: string, updatedAt: string, activityTargets?: Array<{ __typename?: 'ActivityTarget', id: string, createdAt: string, updatedAt: string, companyId?: string | null, personId?: string | null }> | null };
|
||||||
|
|
||||||
export type ActivityQueryFragmentFragment = { __typename?: 'Activity', id: string, createdAt: string, title?: string | null, body?: string | null, type: ActivityType, completedAt?: string | null, dueAt?: string | null, assignee?: { __typename?: 'User', id: string, firstName?: string | null, lastName?: string | null, displayName: string, avatarUrl?: string | null } | null, author: { __typename?: 'User', id: string, firstName?: string | null, lastName?: string | null, displayName: string }, comments?: Array<{ __typename?: 'Comment', id: string, body: string, createdAt: string, updatedAt: string, author: { __typename?: 'User', id: string, displayName: string, firstName?: string | null, lastName?: string | null, avatarUrl?: string | null } }> | null, activityTargets?: Array<{ __typename?: 'ActivityTarget', id: string, companyId?: string | null, personId?: string | null, company?: { __typename?: 'Company', id: string, name: string, domainName: string } | null, person?: { __typename?: 'Person', id: string, displayName: string, avatarUrl?: string | null } | null }> | null };
|
export type ActivityQueryFragmentFragment = { __typename?: 'Activity', id: string, createdAt: string, title?: string | null, body?: string | null, type: ActivityType, completedAt?: string | null, dueAt?: string | null, assignee?: { __typename?: 'User', id: string, firstName?: string | null, lastName?: string | null, displayName: string, avatarUrl?: string | null } | null, author: { __typename?: 'User', id: string, firstName?: string | null, lastName?: string | null, displayName: string }, comments?: Array<{ __typename?: 'Comment', id: string, body: string, createdAt: string, updatedAt: string, author: { __typename?: 'User', id: string, displayName: string, firstName?: string | null, lastName?: string | null, avatarUrl?: string | null } }> | null, activityTargets?: Array<{ __typename?: 'ActivityTarget', id: string, companyId?: string | null, personId?: string | null, company?: { __typename?: 'Company', id: string, name: string, domainName: string } | null, person?: { __typename?: 'Person', id: string, displayName: string, avatarUrl?: string | null } | null }> | null };
|
||||||
|
|||||||
@ -23,7 +23,7 @@ export const ActivityAssigneeEditableField = ({
|
|||||||
entityId: activity.id,
|
entityId: activity.id,
|
||||||
recoilScopeId: 'assignee',
|
recoilScopeId: 'assignee',
|
||||||
fieldDefinition: {
|
fieldDefinition: {
|
||||||
fieldId: 'assignee',
|
fieldMetadataId: 'assignee',
|
||||||
label: 'Assignee',
|
label: 'Assignee',
|
||||||
Icon: IconUserCircle,
|
Icon: IconUserCircle,
|
||||||
type: 'RELATION',
|
type: 'RELATION',
|
||||||
|
|||||||
@ -21,7 +21,7 @@ export const ActivityEditorDateField = ({
|
|||||||
entityId: activityId,
|
entityId: activityId,
|
||||||
recoilScopeId: 'activityDueAt',
|
recoilScopeId: 'activityDueAt',
|
||||||
fieldDefinition: {
|
fieldDefinition: {
|
||||||
fieldId: 'activityDueAt',
|
fieldMetadataId: 'activityDueAt',
|
||||||
label: 'Due date',
|
label: 'Due date',
|
||||||
Icon: IconCalendar,
|
Icon: IconCalendar,
|
||||||
type: 'DATE',
|
type: 'DATE',
|
||||||
|
|||||||
@ -17,7 +17,7 @@ export const useCurrentUserTaskCount = () => {
|
|||||||
completedAt: { equals: null },
|
completedAt: { equals: null },
|
||||||
...(currentUser
|
...(currentUser
|
||||||
? turnFilterIntoWhereClause({
|
? turnFilterIntoWhereClause({
|
||||||
fieldId: 'assigneeId',
|
fieldMetadataId: 'assigneeId',
|
||||||
value: currentUser.id,
|
value: currentUser.id,
|
||||||
operand: ViewFilterOperand.Is,
|
operand: ViewFilterOperand.Is,
|
||||||
displayValue: currentUser.displayName,
|
displayValue: currentUser.displayName,
|
||||||
|
|||||||
@ -222,13 +222,13 @@ export const CompanyBoardCard = () => {
|
|||||||
<StyledBoardCardBody>
|
<StyledBoardCardBody>
|
||||||
<AnimatedEaseInOut isOpen={!showCompactView}>
|
<AnimatedEaseInOut isOpen={!showCompactView}>
|
||||||
{visibleBoardCardFields.map((viewField) => (
|
{visibleBoardCardFields.map((viewField) => (
|
||||||
<PreventSelectOnClickContainer key={viewField.fieldId}>
|
<PreventSelectOnClickContainer key={viewField.fieldMetadataId}>
|
||||||
<FieldContext.Provider
|
<FieldContext.Provider
|
||||||
value={{
|
value={{
|
||||||
entityId: boardCardId,
|
entityId: boardCardId,
|
||||||
recoilScopeId: boardCardId + viewField.fieldId,
|
recoilScopeId: boardCardId + viewField.fieldMetadataId,
|
||||||
fieldDefinition: {
|
fieldDefinition: {
|
||||||
fieldId: viewField.fieldId,
|
fieldMetadataId: viewField.fieldMetadataId,
|
||||||
label: viewField.label,
|
label: viewField.label,
|
||||||
Icon: viewField.Icon,
|
Icon: viewField.Icon,
|
||||||
type: viewField.type,
|
type: viewField.type,
|
||||||
|
|||||||
@ -28,7 +28,7 @@ import { User } from '~/generated/graphql';
|
|||||||
export const companiesAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>[] =
|
export const companiesAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>[] =
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
fieldId: 'name',
|
fieldMetadataId: 'name',
|
||||||
label: 'Name',
|
label: 'Name',
|
||||||
Icon: IconBuildingSkyscraper,
|
Icon: IconBuildingSkyscraper,
|
||||||
size: 180,
|
size: 180,
|
||||||
@ -45,7 +45,7 @@ export const companiesAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>
|
|||||||
basePathToShowPage: '/companies/',
|
basePathToShowPage: '/companies/',
|
||||||
} satisfies ColumnDefinition<FieldChipMetadata>,
|
} satisfies ColumnDefinition<FieldChipMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'domainName',
|
fieldMetadataId: 'domainName',
|
||||||
label: 'URL',
|
label: 'URL',
|
||||||
Icon: IconLink,
|
Icon: IconLink,
|
||||||
size: 100,
|
size: 100,
|
||||||
@ -60,7 +60,7 @@ export const companiesAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>
|
|||||||
'The company website URL. We use this url to fetch the company icon.',
|
'The company website URL. We use this url to fetch the company icon.',
|
||||||
} satisfies ColumnDefinition<FieldURLMetadata>,
|
} satisfies ColumnDefinition<FieldURLMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'accountOwner',
|
fieldMetadataId: 'accountOwner',
|
||||||
label: 'Account Owner',
|
label: 'Account Owner',
|
||||||
Icon: IconUserCircle,
|
Icon: IconUserCircle,
|
||||||
size: 150,
|
size: 150,
|
||||||
@ -82,7 +82,7 @@ export const companiesAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>
|
|||||||
},
|
},
|
||||||
} satisfies ColumnDefinition<FieldRelationMetadata>,
|
} satisfies ColumnDefinition<FieldRelationMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'createdAt',
|
fieldMetadataId: 'createdAt',
|
||||||
label: 'Creation',
|
label: 'Creation',
|
||||||
Icon: IconCalendarEvent,
|
Icon: IconCalendarEvent,
|
||||||
size: 150,
|
size: 150,
|
||||||
@ -95,7 +95,7 @@ export const companiesAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>
|
|||||||
infoTooltipContent: "Date when the company's record was created.",
|
infoTooltipContent: "Date when the company's record was created.",
|
||||||
} satisfies ColumnDefinition<FieldDateMetadata>,
|
} satisfies ColumnDefinition<FieldDateMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'employees',
|
fieldMetadataId: 'employees',
|
||||||
label: 'Employees',
|
label: 'Employees',
|
||||||
Icon: IconUsers,
|
Icon: IconUsers,
|
||||||
size: 150,
|
size: 150,
|
||||||
@ -110,7 +110,7 @@ export const companiesAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>
|
|||||||
infoTooltipContent: 'Number of employees in the company.',
|
infoTooltipContent: 'Number of employees in the company.',
|
||||||
} satisfies ColumnDefinition<FieldNumberMetadata>,
|
} satisfies ColumnDefinition<FieldNumberMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'linkedin',
|
fieldMetadataId: 'linkedin',
|
||||||
label: 'LinkedIn',
|
label: 'LinkedIn',
|
||||||
Icon: IconBrandLinkedin,
|
Icon: IconBrandLinkedin,
|
||||||
size: 170,
|
size: 170,
|
||||||
@ -124,7 +124,7 @@ export const companiesAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>
|
|||||||
infoTooltipContent: 'The company Linkedin account.',
|
infoTooltipContent: 'The company Linkedin account.',
|
||||||
} satisfies ColumnDefinition<FieldURLMetadata>,
|
} satisfies ColumnDefinition<FieldURLMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'address',
|
fieldMetadataId: 'address',
|
||||||
label: 'Address',
|
label: 'Address',
|
||||||
Icon: IconMap,
|
Icon: IconMap,
|
||||||
size: 170,
|
size: 170,
|
||||||
@ -138,7 +138,7 @@ export const companiesAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>
|
|||||||
infoTooltipContent: 'The company address.',
|
infoTooltipContent: 'The company address.',
|
||||||
} satisfies ColumnDefinition<FieldTextMetadata>,
|
} satisfies ColumnDefinition<FieldTextMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'idealCustomerProfile',
|
fieldMetadataId: 'idealCustomerProfile',
|
||||||
label: 'ICP',
|
label: 'ICP',
|
||||||
Icon: IconTarget,
|
Icon: IconTarget,
|
||||||
size: 150,
|
size: 150,
|
||||||
@ -152,7 +152,7 @@ export const companiesAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>
|
|||||||
'Ideal Customer Profile: Indicates whether the company is the most suitable and valuable customer for you.',
|
'Ideal Customer Profile: Indicates whether the company is the most suitable and valuable customer for you.',
|
||||||
} satisfies ColumnDefinition<FieldBooleanMetadata>,
|
} satisfies ColumnDefinition<FieldBooleanMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'annualRecurringRevenue',
|
fieldMetadataId: 'annualRecurringRevenue',
|
||||||
label: 'ARR',
|
label: 'ARR',
|
||||||
Icon: IconMoneybag,
|
Icon: IconMoneybag,
|
||||||
size: 150,
|
size: 150,
|
||||||
@ -166,7 +166,7 @@ export const companiesAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>
|
|||||||
'Annual Recurring Revenue: The actual or estimated annual revenue of the company.',
|
'Annual Recurring Revenue: The actual or estimated annual revenue of the company.',
|
||||||
} satisfies ColumnDefinition<FieldMoneyMetadata>,
|
} satisfies ColumnDefinition<FieldMoneyMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'xUrl',
|
fieldMetadataId: 'xUrl',
|
||||||
label: 'Twitter',
|
label: 'Twitter',
|
||||||
Icon: IconBrandX,
|
Icon: IconBrandX,
|
||||||
size: 150,
|
size: 150,
|
||||||
@ -184,7 +184,7 @@ export const companiesAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>
|
|||||||
export const suppliersAvailableColumnDefinitions: ColumnDefinition<FieldMetadata>[] =
|
export const suppliersAvailableColumnDefinitions: ColumnDefinition<FieldMetadata>[] =
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
fieldId: 'name',
|
fieldMetadataId: 'name',
|
||||||
label: 'Name',
|
label: 'Name',
|
||||||
Icon: IconBuildingSkyscraper,
|
Icon: IconBuildingSkyscraper,
|
||||||
size: 180,
|
size: 180,
|
||||||
@ -199,7 +199,7 @@ export const suppliersAvailableColumnDefinitions: ColumnDefinition<FieldMetadata
|
|||||||
basePathToShowPage: '/companies/',
|
basePathToShowPage: '/companies/',
|
||||||
} satisfies ColumnDefinition<FieldTextMetadata>,
|
} satisfies ColumnDefinition<FieldTextMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'city',
|
fieldMetadataId: 'city',
|
||||||
label: 'City',
|
label: 'City',
|
||||||
Icon: IconBuildingSkyscraper,
|
Icon: IconBuildingSkyscraper,
|
||||||
size: 180,
|
size: 180,
|
||||||
|
|||||||
@ -29,9 +29,9 @@ import { useUpdateOneObject } from '../hooks/useUpdateOneObject';
|
|||||||
import { formatMetadataFieldAsColumnDefinition } from '../utils/formatMetadataFieldAsColumnDefinition';
|
import { formatMetadataFieldAsColumnDefinition } from '../utils/formatMetadataFieldAsColumnDefinition';
|
||||||
|
|
||||||
export const RecordShowPage = () => {
|
export const RecordShowPage = () => {
|
||||||
const { objectNameSingular, objectId } = useParams<{
|
const { objectNameSingular, objectMetadataId } = useParams<{
|
||||||
objectNameSingular: string;
|
objectNameSingular: string;
|
||||||
objectId: string;
|
objectMetadataId: string;
|
||||||
}>();
|
}>();
|
||||||
|
|
||||||
const { icons } = useLazyLoadIcons();
|
const { icons } = useLazyLoadIcons();
|
||||||
@ -41,11 +41,11 @@ export const RecordShowPage = () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const [, setEntityFields] = useRecoilState(
|
const [, setEntityFields] = useRecoilState(
|
||||||
entityFieldsFamilyState(objectId ?? ''),
|
entityFieldsFamilyState(objectMetadataId ?? ''),
|
||||||
);
|
);
|
||||||
|
|
||||||
const { object } = useFindOneObject({
|
const { object } = useFindOneObject({
|
||||||
objectId: objectId,
|
objectMetadataId: objectMetadataId,
|
||||||
objectNameSingular,
|
objectNameSingular,
|
||||||
onCompleted: (data) => {
|
onCompleted: (data) => {
|
||||||
setEntityFields(data);
|
setEntityFields(data);
|
||||||
|
|||||||
@ -14,6 +14,7 @@ const defaultFieldValues: Record<FieldMetadataType, unknown> = {
|
|||||||
[FieldMetadataType.Email]: '',
|
[FieldMetadataType.Email]: '',
|
||||||
[FieldMetadataType.Enum]: null,
|
[FieldMetadataType.Enum]: null,
|
||||||
[FieldMetadataType.Number]: null,
|
[FieldMetadataType.Number]: null,
|
||||||
|
[FieldMetadataType.Relation]: null,
|
||||||
[FieldMetadataType.Phone]: '',
|
[FieldMetadataType.Phone]: '',
|
||||||
[FieldMetadataType.Text]: '',
|
[FieldMetadataType.Text]: '',
|
||||||
[FieldMetadataType.Url]: { link: '', text: '' },
|
[FieldMetadataType.Url]: { link: '', text: '' },
|
||||||
|
|||||||
@ -8,10 +8,10 @@ export const useFindOneObject = <
|
|||||||
ObjectType extends { id: string } & Record<string, any>,
|
ObjectType extends { id: string } & Record<string, any>,
|
||||||
>({
|
>({
|
||||||
objectNameSingular,
|
objectNameSingular,
|
||||||
objectId,
|
objectMetadataId,
|
||||||
onCompleted,
|
onCompleted,
|
||||||
}: Pick<ObjectMetadataItemIdentifier, 'objectNameSingular'> & {
|
}: Pick<ObjectMetadataItemIdentifier, 'objectNameSingular'> & {
|
||||||
objectId: string | undefined;
|
objectMetadataId: string | undefined;
|
||||||
onCompleted?: (data: ObjectType) => void;
|
onCompleted?: (data: ObjectType) => void;
|
||||||
}) => {
|
}) => {
|
||||||
const { foundObjectMetadataItem, objectNotFoundInMetadata, findOneQuery } =
|
const { foundObjectMetadataItem, objectNotFoundInMetadata, findOneQuery } =
|
||||||
@ -21,11 +21,11 @@ export const useFindOneObject = <
|
|||||||
|
|
||||||
const { data, loading, error } = useQuery<
|
const { data, loading, error } = useQuery<
|
||||||
{ [nameSingular: string]: ObjectType },
|
{ [nameSingular: string]: ObjectType },
|
||||||
{ objectId: string }
|
{ objectMetadataId: string }
|
||||||
>(findOneQuery, {
|
>(findOneQuery, {
|
||||||
skip: !foundObjectMetadataItem || !objectId,
|
skip: !foundObjectMetadataItem || !objectMetadataId,
|
||||||
variables: {
|
variables: {
|
||||||
objectId: objectId ?? '',
|
objectMetadataId: objectMetadataId ?? '',
|
||||||
},
|
},
|
||||||
onCompleted: (data) => {
|
onCompleted: (data) => {
|
||||||
if (onCompleted && objectNameSingular) {
|
if (onCompleted && objectNameSingular) {
|
||||||
|
|||||||
@ -14,13 +14,13 @@ export const useMetadataField = () => {
|
|||||||
|
|
||||||
const createMetadataField = (
|
const createMetadataField = (
|
||||||
input: Pick<Field, 'label' | 'icon' | 'description'> & {
|
input: Pick<Field, 'label' | 'icon' | 'description'> & {
|
||||||
objectId: string;
|
objectMetadataId: string;
|
||||||
type: MetadataFieldDataType;
|
type: MetadataFieldDataType;
|
||||||
},
|
},
|
||||||
) =>
|
) =>
|
||||||
createOneMetadataField({
|
createOneMetadataField({
|
||||||
...formatMetadataFieldInput(input),
|
...formatMetadataFieldInput(input),
|
||||||
objectId: input.objectId,
|
objectMetadataId: input.objectMetadataId,
|
||||||
type: input.type,
|
type: input.type,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -28,19 +28,19 @@ export const useMetadataField = () => {
|
|||||||
input: Pick<Field, 'id' | 'label' | 'icon' | 'description'>,
|
input: Pick<Field, 'id' | 'label' | 'icon' | 'description'>,
|
||||||
) =>
|
) =>
|
||||||
updateOneMetadataField({
|
updateOneMetadataField({
|
||||||
fieldIdToUpdate: input.id,
|
fieldMetadataIdToUpdate: input.id,
|
||||||
updatePayload: formatMetadataFieldInput(input),
|
updatePayload: formatMetadataFieldInput(input),
|
||||||
});
|
});
|
||||||
|
|
||||||
const activateMetadataField = (metadataField: Field) =>
|
const activateMetadataField = (metadataField: Field) =>
|
||||||
updateOneMetadataField({
|
updateOneMetadataField({
|
||||||
fieldIdToUpdate: metadataField.id,
|
fieldMetadataIdToUpdate: metadataField.id,
|
||||||
updatePayload: { isActive: true },
|
updatePayload: { isActive: true },
|
||||||
});
|
});
|
||||||
|
|
||||||
const disableMetadataField = (metadataField: Field) =>
|
const disableMetadataField = (metadataField: Field) =>
|
||||||
updateOneMetadataField({
|
updateOneMetadataField({
|
||||||
fieldIdToUpdate: metadataField.id,
|
fieldMetadataIdToUpdate: metadataField.id,
|
||||||
updatePayload: { isActive: false },
|
updatePayload: { isActive: false },
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -22,10 +22,10 @@ export const useUpdateOneMetadataField = () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const updateOneMetadataField = async ({
|
const updateOneMetadataField = async ({
|
||||||
fieldIdToUpdate,
|
fieldMetadataIdToUpdate,
|
||||||
updatePayload,
|
updatePayload,
|
||||||
}: {
|
}: {
|
||||||
fieldIdToUpdate: UpdateOneMetadataFieldMutationVariables['idToUpdate'];
|
fieldMetadataIdToUpdate: UpdateOneMetadataFieldMutationVariables['idToUpdate'];
|
||||||
updatePayload: Pick<
|
updatePayload: Pick<
|
||||||
UpdateOneMetadataFieldMutationVariables['updatePayload'],
|
UpdateOneMetadataFieldMutationVariables['updatePayload'],
|
||||||
'description' | 'icon' | 'isActive' | 'label' | 'name'
|
'description' | 'icon' | 'isActive' | 'label' | 'name'
|
||||||
@ -33,7 +33,7 @@ export const useUpdateOneMetadataField = () => {
|
|||||||
}) => {
|
}) => {
|
||||||
return await mutate({
|
return await mutate({
|
||||||
variables: {
|
variables: {
|
||||||
idToUpdate: fieldIdToUpdate,
|
idToUpdate: fieldMetadataIdToUpdate,
|
||||||
updatePayload: {
|
updatePayload: {
|
||||||
...updatePayload,
|
...updatePayload,
|
||||||
label: updatePayload.label ?? undefined,
|
label: updatePayload.label ?? undefined,
|
||||||
|
|||||||
@ -19,7 +19,7 @@ export const formatMetadataFieldAsColumnDefinition = ({
|
|||||||
icons: Record<string, IconComponent>;
|
icons: Record<string, IconComponent>;
|
||||||
}): ColumnDefinition<FieldMetadata> => ({
|
}): ColumnDefinition<FieldMetadata> => ({
|
||||||
position,
|
position,
|
||||||
fieldId: field.id,
|
fieldMetadataId: field.id,
|
||||||
label: field.label,
|
label: field.label,
|
||||||
size: 100,
|
size: 100,
|
||||||
type: parseFieldType(field.type),
|
type: parseFieldType(field.type),
|
||||||
|
|||||||
@ -9,7 +9,7 @@ export const formatMetadataFieldAsFilterDefinition = ({
|
|||||||
field: ObjectMetadataItem['fields'][0];
|
field: ObjectMetadataItem['fields'][0];
|
||||||
icons: Record<string, any>;
|
icons: Record<string, any>;
|
||||||
}): FilterDefinition => ({
|
}): FilterDefinition => ({
|
||||||
fieldId: field.id,
|
fieldMetadataId: field.id,
|
||||||
label: field.label,
|
label: field.label,
|
||||||
Icon: icons[field.icon ?? 'Icon123'],
|
Icon: icons[field.icon ?? 'Icon123'],
|
||||||
type: 'TEXT',
|
type: 'TEXT',
|
||||||
|
|||||||
@ -9,7 +9,7 @@ export const formatMetadataFieldAsSortDefinition = ({
|
|||||||
field: ObjectMetadataItem['fields'][0];
|
field: ObjectMetadataItem['fields'][0];
|
||||||
icons: Record<string, any>;
|
icons: Record<string, any>;
|
||||||
}): SortDefinition => ({
|
}): SortDefinition => ({
|
||||||
fieldId: field.id,
|
fieldMetadataId: field.id,
|
||||||
label: field.label,
|
label: field.label,
|
||||||
Icon: icons[field.icon ?? 'Icon123'],
|
Icon: icons[field.icon ?? 'Icon123'],
|
||||||
});
|
});
|
||||||
|
|||||||
@ -10,10 +10,10 @@ export const generateFindOneCustomObjectQuery = ({
|
|||||||
objectMetadataItem: ObjectMetadataItem;
|
objectMetadataItem: ObjectMetadataItem;
|
||||||
}) => {
|
}) => {
|
||||||
return gql`
|
return gql`
|
||||||
query FindOne${objectMetadataItem.nameSingular}($objectId: UUID!) {
|
query FindOne${objectMetadataItem.nameSingular}($objectMetadataId: UUID!) {
|
||||||
${objectMetadataItem.nameSingular}(filter: {
|
${objectMetadataItem.nameSingular}(filter: {
|
||||||
id: {
|
id: {
|
||||||
eq: $objectId
|
eq: $objectMetadataId
|
||||||
}
|
}
|
||||||
}){
|
}){
|
||||||
id
|
id
|
||||||
|
|||||||
@ -27,7 +27,7 @@ import { getLogoUrlFromDomainName } from '~/utils';
|
|||||||
export const peopleAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>[] =
|
export const peopleAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>[] =
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
fieldId: 'displayName',
|
fieldMetadataId: 'displayName',
|
||||||
label: 'People',
|
label: 'People',
|
||||||
Icon: IconUser,
|
Icon: IconUser,
|
||||||
size: 210,
|
size: 210,
|
||||||
@ -45,7 +45,7 @@ export const peopleAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>[]
|
|||||||
basePathToShowPage: '/person/',
|
basePathToShowPage: '/person/',
|
||||||
} satisfies ColumnDefinition<FieldDoubleTextChipMetadata>,
|
} satisfies ColumnDefinition<FieldDoubleTextChipMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'email',
|
fieldMetadataId: 'email',
|
||||||
label: 'Email',
|
label: 'Email',
|
||||||
Icon: IconMail,
|
Icon: IconMail,
|
||||||
size: 150,
|
size: 150,
|
||||||
@ -58,7 +58,7 @@ export const peopleAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>[]
|
|||||||
infoTooltipContent: 'Contact’s Email.',
|
infoTooltipContent: 'Contact’s Email.',
|
||||||
} satisfies ColumnDefinition<FieldEmailMetadata>,
|
} satisfies ColumnDefinition<FieldEmailMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'company',
|
fieldMetadataId: 'company',
|
||||||
label: 'Company',
|
label: 'Company',
|
||||||
Icon: IconBuildingSkyscraper,
|
Icon: IconBuildingSkyscraper,
|
||||||
size: 150,
|
size: 150,
|
||||||
@ -78,7 +78,7 @@ export const peopleAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>[]
|
|||||||
},
|
},
|
||||||
} satisfies ColumnDefinition<FieldRelationMetadata>,
|
} satisfies ColumnDefinition<FieldRelationMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'phone',
|
fieldMetadataId: 'phone',
|
||||||
label: 'Phone',
|
label: 'Phone',
|
||||||
Icon: IconPhone,
|
Icon: IconPhone,
|
||||||
size: 150,
|
size: 150,
|
||||||
@ -91,7 +91,7 @@ export const peopleAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>[]
|
|||||||
infoTooltipContent: 'Contact’s phone number.',
|
infoTooltipContent: 'Contact’s phone number.',
|
||||||
} satisfies ColumnDefinition<FieldPhoneMetadata>,
|
} satisfies ColumnDefinition<FieldPhoneMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'createdAt',
|
fieldMetadataId: 'createdAt',
|
||||||
label: 'Creation',
|
label: 'Creation',
|
||||||
Icon: IconCalendarEvent,
|
Icon: IconCalendarEvent,
|
||||||
size: 150,
|
size: 150,
|
||||||
@ -103,7 +103,7 @@ export const peopleAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>[]
|
|||||||
infoTooltipContent: 'Date when the contact was added.',
|
infoTooltipContent: 'Date when the contact was added.',
|
||||||
} satisfies ColumnDefinition<FieldDateMetadata>,
|
} satisfies ColumnDefinition<FieldDateMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'city',
|
fieldMetadataId: 'city',
|
||||||
label: 'City',
|
label: 'City',
|
||||||
Icon: IconMap,
|
Icon: IconMap,
|
||||||
size: 150,
|
size: 150,
|
||||||
@ -116,7 +116,7 @@ export const peopleAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>[]
|
|||||||
infoTooltipContent: 'Contact’s city.',
|
infoTooltipContent: 'Contact’s city.',
|
||||||
} satisfies ColumnDefinition<FieldTextMetadata>,
|
} satisfies ColumnDefinition<FieldTextMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'jobTitle',
|
fieldMetadataId: 'jobTitle',
|
||||||
label: 'Job title',
|
label: 'Job title',
|
||||||
Icon: IconBriefcase,
|
Icon: IconBriefcase,
|
||||||
size: 150,
|
size: 150,
|
||||||
@ -129,7 +129,7 @@ export const peopleAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>[]
|
|||||||
infoTooltipContent: 'Contact’s job title.',
|
infoTooltipContent: 'Contact’s job title.',
|
||||||
} satisfies ColumnDefinition<FieldTextMetadata>,
|
} satisfies ColumnDefinition<FieldTextMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'linkedin',
|
fieldMetadataId: 'linkedin',
|
||||||
label: 'LinkedIn',
|
label: 'LinkedIn',
|
||||||
Icon: IconBrandLinkedin,
|
Icon: IconBrandLinkedin,
|
||||||
size: 150,
|
size: 150,
|
||||||
@ -142,7 +142,7 @@ export const peopleAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>[]
|
|||||||
infoTooltipContent: 'Contact’s Linkedin account.',
|
infoTooltipContent: 'Contact’s Linkedin account.',
|
||||||
} satisfies ColumnDefinition<FieldURLMetadata>,
|
} satisfies ColumnDefinition<FieldURLMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'x',
|
fieldMetadataId: 'x',
|
||||||
label: 'Twitter',
|
label: 'Twitter',
|
||||||
Icon: IconBrandX,
|
Icon: IconBrandX,
|
||||||
size: 150,
|
size: 150,
|
||||||
|
|||||||
@ -18,7 +18,7 @@ import { Person } from '~/generated/graphql';
|
|||||||
export const pipelineAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>[] =
|
export const pipelineAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>[] =
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
fieldId: 'closeDate',
|
fieldMetadataId: 'closeDate',
|
||||||
label: 'Close Date',
|
label: 'Close Date',
|
||||||
Icon: IconCalendarEvent,
|
Icon: IconCalendarEvent,
|
||||||
position: 0,
|
position: 0,
|
||||||
@ -32,7 +32,7 @@ export const pipelineAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>[
|
|||||||
'Specified date by which an opportunity must be completed.',
|
'Specified date by which an opportunity must be completed.',
|
||||||
} satisfies ColumnDefinition<FieldDateMetadata>,
|
} satisfies ColumnDefinition<FieldDateMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'amount',
|
fieldMetadataId: 'amount',
|
||||||
label: 'Amount',
|
label: 'Amount',
|
||||||
Icon: IconCurrencyDollar,
|
Icon: IconCurrencyDollar,
|
||||||
position: 1,
|
position: 1,
|
||||||
@ -46,7 +46,7 @@ export const pipelineAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>[
|
|||||||
infoTooltipContent: 'Potential monetary value of a business opportunity.',
|
infoTooltipContent: 'Potential monetary value of a business opportunity.',
|
||||||
} satisfies ColumnDefinition<FieldNumberMetadata>,
|
} satisfies ColumnDefinition<FieldNumberMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'probability',
|
fieldMetadataId: 'probability',
|
||||||
label: 'Probability',
|
label: 'Probability',
|
||||||
Icon: IconProgressCheck,
|
Icon: IconProgressCheck,
|
||||||
position: 2,
|
position: 2,
|
||||||
@ -60,7 +60,7 @@ export const pipelineAvailableFieldDefinitions: ColumnDefinition<FieldMetadata>[
|
|||||||
"Level of certainty in the lead's potential to convert into a success.",
|
"Level of certainty in the lead's potential to convert into a success.",
|
||||||
} satisfies ColumnDefinition<FieldProbabilityMetadata>,
|
} satisfies ColumnDefinition<FieldProbabilityMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'pointOfContact',
|
fieldMetadataId: 'pointOfContact',
|
||||||
label: 'Point of Contact',
|
label: 'Point of Contact',
|
||||||
Icon: IconUser,
|
Icon: IconUser,
|
||||||
position: 3,
|
position: 3,
|
||||||
|
|||||||
@ -141,7 +141,7 @@ export const SettingsObjectFieldPreview = ({
|
|||||||
fieldDefinition: {
|
fieldDefinition: {
|
||||||
type: parseFieldType(fieldType as FieldMetadataType),
|
type: parseFieldType(fieldType as FieldMetadataType),
|
||||||
Icon: FieldIcon,
|
Icon: FieldIcon,
|
||||||
fieldId: '',
|
fieldMetadataId: '',
|
||||||
label: fieldLabel,
|
label: fieldLabel,
|
||||||
metadata: { fieldName: fieldName || 'new-field' },
|
metadata: { fieldName: fieldName || 'new-field' },
|
||||||
},
|
},
|
||||||
|
|||||||
@ -19,7 +19,7 @@ export enum AppPath {
|
|||||||
OpportunitiesPage = '/opportunities',
|
OpportunitiesPage = '/opportunities',
|
||||||
RecordTablePage = '/objects/:objectNamePlural',
|
RecordTablePage = '/objects/:objectNamePlural',
|
||||||
|
|
||||||
RecordShowPage = '/object/:objectNameSingular/:objectId',
|
RecordShowPage = '/object/:objectNameSingular/:objectMetadataId',
|
||||||
|
|
||||||
SettingsCatchAll = `/settings/*`,
|
SettingsCatchAll = `/settings/*`,
|
||||||
DevelopersCatchAll = `/developers/*`,
|
DevelopersCatchAll = `/developers/*`,
|
||||||
|
|||||||
@ -19,7 +19,7 @@ export const useBoardCardFields = () => {
|
|||||||
) => {
|
) => {
|
||||||
setBoardCardFields((previousFields) =>
|
setBoardCardFields((previousFields) =>
|
||||||
previousFields.map((previousField) =>
|
previousFields.map((previousField) =>
|
||||||
previousField.fieldId === field.fieldId
|
previousField.fieldMetadataId === field.fieldMetadataId
|
||||||
? { ...previousField, isVisible: !field.isVisible }
|
? { ...previousField, isVisible: !field.isVisible }
|
||||||
: previousField,
|
: previousField,
|
||||||
),
|
),
|
||||||
|
|||||||
@ -12,5 +12,5 @@ export const boardCardFieldsByKeyScopedSelector = selectorFamily({
|
|||||||
({ get }) =>
|
({ get }) =>
|
||||||
get(boardCardFieldsScopedState(scopeId)).reduce<
|
get(boardCardFieldsScopedState(scopeId)).reduce<
|
||||||
Record<string, BoardFieldDefinition<FieldMetadata>>
|
Record<string, BoardFieldDefinition<FieldMetadata>>
|
||||||
>((result, field) => ({ ...result, [field.fieldId]: field }), {}),
|
>((result, field) => ({ ...result, [field.fieldMetadataId]: field }), {}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -9,10 +9,10 @@ export const hiddenBoardCardFieldsScopedSelector = selectorFamily({
|
|||||||
(scopeId: string) =>
|
(scopeId: string) =>
|
||||||
({ get }) => {
|
({ get }) => {
|
||||||
const fields = get(boardCardFieldsScopedState(scopeId));
|
const fields = get(boardCardFieldsScopedState(scopeId));
|
||||||
const fieldKeys = fields.map(({ fieldId }) => fieldId);
|
const fieldKeys = fields.map(({ fieldMetadataId }) => fieldMetadataId);
|
||||||
const otherAvailableKeys = get(
|
const otherAvailableKeys = get(
|
||||||
availableBoardCardFieldsScopedState(scopeId),
|
availableBoardCardFieldsScopedState(scopeId),
|
||||||
).filter(({ fieldId }) => !fieldKeys.includes(fieldId));
|
).filter(({ fieldMetadataId }) => !fieldKeys.includes(fieldMetadataId));
|
||||||
|
|
||||||
return [
|
return [
|
||||||
...fields.filter((field) => !field.isVisible),
|
...fields.filter((field) => !field.isVisible),
|
||||||
|
|||||||
@ -12,5 +12,5 @@ export const savedBoardCardFieldsByKeyFamilySelector = selectorFamily({
|
|||||||
({ get }) =>
|
({ get }) =>
|
||||||
get(savedBoardCardFieldsFamilyState(viewId)).reduce<
|
get(savedBoardCardFieldsFamilyState(viewId)).reduce<
|
||||||
Record<string, BoardFieldDefinition<FieldMetadata>>
|
Record<string, BoardFieldDefinition<FieldMetadata>>
|
||||||
>((result, field) => ({ ...result, [field.fieldId]: field }), {}),
|
>((result, field) => ({ ...result, [field.fieldMetadataId]: field }), {}),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -9,7 +9,7 @@ export const useFieldInitialValue = () => {
|
|||||||
|
|
||||||
const fieldInitialValue = useRecoilValue(
|
const fieldInitialValue = useRecoilValue(
|
||||||
entityFieldInitialValueFamilyState({
|
entityFieldInitialValueFamilyState({
|
||||||
fieldId: fieldDefinition.fieldId,
|
fieldMetadataId: fieldDefinition.fieldMetadataId,
|
||||||
entityId,
|
entityId,
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|||||||
@ -10,7 +10,7 @@ export const useIsFieldEmpty = () => {
|
|||||||
const isFieldEmpty = useRecoilValue(
|
const isFieldEmpty = useRecoilValue(
|
||||||
isEntityFieldEmptyFamilySelector({
|
isEntityFieldEmptyFamilySelector({
|
||||||
fieldDefinition: {
|
fieldDefinition: {
|
||||||
fieldId: fieldDefinition.fieldId,
|
fieldMetadataId: fieldDefinition.fieldMetadataId,
|
||||||
label: fieldDefinition.label,
|
label: fieldDefinition.label,
|
||||||
type: fieldDefinition.type,
|
type: fieldDefinition.type,
|
||||||
metadata: fieldDefinition.metadata,
|
metadata: fieldDefinition.metadata,
|
||||||
|
|||||||
@ -27,7 +27,7 @@ const meta: Meta = {
|
|||||||
value={{
|
value={{
|
||||||
entityId: '',
|
entityId: '',
|
||||||
fieldDefinition: {
|
fieldDefinition: {
|
||||||
fieldId: 'date',
|
fieldMetadataId: 'date',
|
||||||
label: 'Date',
|
label: 'Date',
|
||||||
type: 'DATE',
|
type: 'DATE',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -32,7 +32,7 @@ const meta: Meta = {
|
|||||||
value={{
|
value={{
|
||||||
entityId: '',
|
entityId: '',
|
||||||
fieldDefinition: {
|
fieldDefinition: {
|
||||||
fieldId: 'double-text',
|
fieldMetadataId: 'double-text',
|
||||||
label: 'Double-Text',
|
label: 'Double-Text',
|
||||||
type: 'DOUBLE_TEXT',
|
type: 'DOUBLE_TEXT',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -26,7 +26,7 @@ const meta: Meta = {
|
|||||||
value={{
|
value={{
|
||||||
entityId: '',
|
entityId: '',
|
||||||
fieldDefinition: {
|
fieldDefinition: {
|
||||||
fieldId: 'email',
|
fieldMetadataId: 'email',
|
||||||
label: 'Email',
|
label: 'Email',
|
||||||
type: 'EMAIL',
|
type: 'EMAIL',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -25,7 +25,7 @@ const meta: Meta = {
|
|||||||
value={{
|
value={{
|
||||||
entityId: '',
|
entityId: '',
|
||||||
fieldDefinition: {
|
fieldDefinition: {
|
||||||
fieldId: 'money',
|
fieldMetadataId: 'money',
|
||||||
label: 'Money',
|
label: 'Money',
|
||||||
type: 'MONEY_AMOUNT',
|
type: 'MONEY_AMOUNT',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -25,7 +25,7 @@ const meta: Meta = {
|
|||||||
value={{
|
value={{
|
||||||
entityId: '',
|
entityId: '',
|
||||||
fieldDefinition: {
|
fieldDefinition: {
|
||||||
fieldId: 'number',
|
fieldMetadataId: 'number',
|
||||||
label: 'Number',
|
label: 'Number',
|
||||||
type: 'NUMBER',
|
type: 'NUMBER',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -26,7 +26,7 @@ const meta: Meta = {
|
|||||||
value={{
|
value={{
|
||||||
entityId: '',
|
entityId: '',
|
||||||
fieldDefinition: {
|
fieldDefinition: {
|
||||||
fieldId: 'phone',
|
fieldMetadataId: 'phone',
|
||||||
label: 'Phone',
|
label: 'Phone',
|
||||||
type: 'PHONE',
|
type: 'PHONE',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -25,7 +25,7 @@ const meta: Meta = {
|
|||||||
value={{
|
value={{
|
||||||
entityId: '',
|
entityId: '',
|
||||||
fieldDefinition: {
|
fieldDefinition: {
|
||||||
fieldId: 'text',
|
fieldMetadataId: 'text',
|
||||||
label: 'Text',
|
label: 'Text',
|
||||||
type: 'TEXT',
|
type: 'TEXT',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -26,7 +26,7 @@ const meta: Meta = {
|
|||||||
value={{
|
value={{
|
||||||
entityId: '',
|
entityId: '',
|
||||||
fieldDefinition: {
|
fieldDefinition: {
|
||||||
fieldId: 'URL',
|
fieldMetadataId: 'URL',
|
||||||
label: 'URL',
|
label: 'URL',
|
||||||
type: 'URL',
|
type: 'URL',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -34,7 +34,7 @@ const BooleanFieldInputWithContext = ({
|
|||||||
return (
|
return (
|
||||||
<FieldContextProvider
|
<FieldContextProvider
|
||||||
fieldDefinition={{
|
fieldDefinition={{
|
||||||
fieldId: 'boolean',
|
fieldMetadataId: 'boolean',
|
||||||
label: 'Boolean',
|
label: 'Boolean',
|
||||||
type: 'BOOLEAN',
|
type: 'BOOLEAN',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -44,7 +44,7 @@ const ChipFieldInputWithContext = ({
|
|||||||
<div>
|
<div>
|
||||||
<FieldContextProvider
|
<FieldContextProvider
|
||||||
fieldDefinition={{
|
fieldDefinition={{
|
||||||
fieldId: 'chip',
|
fieldMetadataId: 'chip',
|
||||||
label: 'Chip',
|
label: 'Chip',
|
||||||
type: 'CHIP',
|
type: 'CHIP',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -44,7 +44,7 @@ const DateFieldInputWithContext = ({
|
|||||||
<div>
|
<div>
|
||||||
<FieldContextProvider
|
<FieldContextProvider
|
||||||
fieldDefinition={{
|
fieldDefinition={{
|
||||||
fieldId: 'date',
|
fieldMetadataId: 'date',
|
||||||
label: 'Date',
|
label: 'Date',
|
||||||
type: 'DATE',
|
type: 'DATE',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -57,7 +57,7 @@ const DoubleTextChipFieldInputWithContext = ({
|
|||||||
<div>
|
<div>
|
||||||
<FieldContextProvider
|
<FieldContextProvider
|
||||||
fieldDefinition={{
|
fieldDefinition={{
|
||||||
fieldId: 'double-text-chip',
|
fieldMetadataId: 'double-text-chip',
|
||||||
label: 'Double-Text-Chip',
|
label: 'Double-Text-Chip',
|
||||||
type: 'DOUBLE_TEXT_CHIP',
|
type: 'DOUBLE_TEXT_CHIP',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -55,7 +55,7 @@ const DoubleTextFieldInputWithContext = ({
|
|||||||
<div>
|
<div>
|
||||||
<FieldContextProvider
|
<FieldContextProvider
|
||||||
fieldDefinition={{
|
fieldDefinition={{
|
||||||
fieldId: 'double-text',
|
fieldMetadataId: 'double-text',
|
||||||
label: 'Double-Text',
|
label: 'Double-Text',
|
||||||
type: 'DOUBLE_TEXT',
|
type: 'DOUBLE_TEXT',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -43,7 +43,7 @@ const EmailFieldInputWithContext = ({
|
|||||||
<div>
|
<div>
|
||||||
<FieldContextProvider
|
<FieldContextProvider
|
||||||
fieldDefinition={{
|
fieldDefinition={{
|
||||||
fieldId: 'email',
|
fieldMetadataId: 'email',
|
||||||
label: 'Email',
|
label: 'Email',
|
||||||
type: 'EMAIL',
|
type: 'EMAIL',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -43,7 +43,7 @@ const MoneyFieldInputWithContext = ({
|
|||||||
<div>
|
<div>
|
||||||
<FieldContextProvider
|
<FieldContextProvider
|
||||||
fieldDefinition={{
|
fieldDefinition={{
|
||||||
fieldId: 'moneyAmount',
|
fieldMetadataId: 'moneyAmount',
|
||||||
label: 'MoneyAmout',
|
label: 'MoneyAmout',
|
||||||
type: 'MONEY_AMOUNT',
|
type: 'MONEY_AMOUNT',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -43,7 +43,7 @@ const NumberFieldInputWithContext = ({
|
|||||||
<div>
|
<div>
|
||||||
<FieldContextProvider
|
<FieldContextProvider
|
||||||
fieldDefinition={{
|
fieldDefinition={{
|
||||||
fieldId: 'number',
|
fieldMetadataId: 'number',
|
||||||
label: 'Number',
|
label: 'Number',
|
||||||
type: 'NUMBER',
|
type: 'NUMBER',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -43,7 +43,7 @@ const PhoneFieldInputWithContext = ({
|
|||||||
<div>
|
<div>
|
||||||
<FieldContextProvider
|
<FieldContextProvider
|
||||||
fieldDefinition={{
|
fieldDefinition={{
|
||||||
fieldId: 'phone',
|
fieldMetadataId: 'phone',
|
||||||
label: 'Phone',
|
label: 'Phone',
|
||||||
type: 'PHONE',
|
type: 'PHONE',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -41,7 +41,7 @@ const ProbabilityFieldInputWithContext = ({
|
|||||||
return (
|
return (
|
||||||
<FieldContextProvider
|
<FieldContextProvider
|
||||||
fieldDefinition={{
|
fieldDefinition={{
|
||||||
fieldId: 'probability',
|
fieldMetadataId: 'probability',
|
||||||
label: 'Probability',
|
label: 'Probability',
|
||||||
type: 'PROBABILITY',
|
type: 'PROBABILITY',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -46,7 +46,7 @@ const RelationFieldInputWithContext = ({
|
|||||||
<div>
|
<div>
|
||||||
<FieldContextProvider
|
<FieldContextProvider
|
||||||
fieldDefinition={{
|
fieldDefinition={{
|
||||||
fieldId: 'relation',
|
fieldMetadataId: 'relation',
|
||||||
label: 'Relation',
|
label: 'Relation',
|
||||||
type: 'RELATION',
|
type: 'RELATION',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -43,7 +43,7 @@ const TextFieldInputWithContext = ({
|
|||||||
<div>
|
<div>
|
||||||
<FieldContextProvider
|
<FieldContextProvider
|
||||||
fieldDefinition={{
|
fieldDefinition={{
|
||||||
fieldId: 'text',
|
fieldMetadataId: 'text',
|
||||||
label: 'Text',
|
label: 'Text',
|
||||||
type: 'TEXT',
|
type: 'TEXT',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -43,7 +43,7 @@ const URLFieldInputWithContext = ({
|
|||||||
<div>
|
<div>
|
||||||
<FieldContextProvider
|
<FieldContextProvider
|
||||||
fieldDefinition={{
|
fieldDefinition={{
|
||||||
fieldId: 'url',
|
fieldMetadataId: 'url',
|
||||||
label: 'URL',
|
label: 'URL',
|
||||||
type: 'URL',
|
type: 'URL',
|
||||||
metadata: {
|
metadata: {
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import { FieldInitialValue } from '../types/FieldInitialValue';
|
|||||||
|
|
||||||
export const entityFieldInitialValueFamilyState = atomFamily<
|
export const entityFieldInitialValueFamilyState = atomFamily<
|
||||||
FieldInitialValue | undefined,
|
FieldInitialValue | undefined,
|
||||||
{ entityId: string; fieldId: string }
|
{ entityId: string; fieldMetadataId: string }
|
||||||
>({
|
>({
|
||||||
key: 'entityFieldInitialValueFamilyState',
|
key: 'entityFieldInitialValueFamilyState',
|
||||||
default: undefined,
|
default: undefined,
|
||||||
|
|||||||
@ -33,7 +33,7 @@ export const isEntityFieldEmptyFamilySelector = selectorFamily({
|
|||||||
}: {
|
}: {
|
||||||
fieldDefinition: Pick<
|
fieldDefinition: Pick<
|
||||||
FieldDefinition<FieldMetadata>,
|
FieldDefinition<FieldMetadata>,
|
||||||
'type' | 'metadata' | 'fieldId' | 'label'
|
'type' | 'metadata' | 'fieldMetadataId' | 'label'
|
||||||
>;
|
>;
|
||||||
entityId: string;
|
entityId: string;
|
||||||
}) => {
|
}) => {
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import { FieldMetadata } from './FieldMetadata';
|
|||||||
import { FieldType } from './FieldType';
|
import { FieldType } from './FieldType';
|
||||||
|
|
||||||
export type FieldDefinition<T extends FieldMetadata> = {
|
export type FieldDefinition<T extends FieldMetadata> = {
|
||||||
fieldId: string;
|
fieldMetadataId: string;
|
||||||
label: string;
|
label: string;
|
||||||
Icon?: IconComponent;
|
Icon?: IconComponent;
|
||||||
type: FieldType;
|
type: FieldType;
|
||||||
|
|||||||
@ -14,7 +14,7 @@ export const ObjectFilterDropdownDateSearchInput = () => {
|
|||||||
if (!filterDefinitionUsedInDropdown || !selectedOperandInDropdown) return;
|
if (!filterDefinitionUsedInDropdown || !selectedOperandInDropdown) return;
|
||||||
|
|
||||||
selectFilter?.({
|
selectFilter?.({
|
||||||
fieldId: filterDefinitionUsedInDropdown.fieldId,
|
fieldMetadataId: filterDefinitionUsedInDropdown.fieldMetadataId,
|
||||||
value: date.toISOString(),
|
value: date.toISOString(),
|
||||||
operand: selectedOperandInDropdown,
|
operand: selectedOperandInDropdown,
|
||||||
displayValue: date.toLocaleDateString(),
|
displayValue: date.toLocaleDateString(),
|
||||||
|
|||||||
@ -42,7 +42,7 @@ export const ObjectFilterDropdownEntitySearchSelect = ({
|
|||||||
|
|
||||||
selectFilter?.({
|
selectFilter?.({
|
||||||
displayValue: selectedEntity.name,
|
displayValue: selectedEntity.name,
|
||||||
fieldId: filterDefinitionUsedInDropdown.fieldId,
|
fieldMetadataId: filterDefinitionUsedInDropdown.fieldMetadataId,
|
||||||
operand: selectedOperandInDropdown,
|
operand: selectedOperandInDropdown,
|
||||||
value: selectedEntity.id,
|
value: selectedEntity.id,
|
||||||
displayAvatarUrl: selectedEntity.avatarUrl,
|
displayAvatarUrl: selectedEntity.avatarUrl,
|
||||||
@ -72,7 +72,7 @@ export const ObjectFilterDropdownEntitySearchSelect = ({
|
|||||||
|
|
||||||
selectFilter?.({
|
selectFilter?.({
|
||||||
displayValue: filterDefinitionUsedInDropdown.selectAllLabel,
|
displayValue: filterDefinitionUsedInDropdown.selectAllLabel,
|
||||||
fieldId: filterDefinitionUsedInDropdown.fieldId,
|
fieldMetadataId: filterDefinitionUsedInDropdown.fieldMetadataId,
|
||||||
operand: ViewFilterOperand.IsNotNull,
|
operand: ViewFilterOperand.IsNotNull,
|
||||||
value: '',
|
value: '',
|
||||||
definition: filterDefinitionUsedInDropdown,
|
definition: filterDefinitionUsedInDropdown,
|
||||||
|
|||||||
@ -20,7 +20,7 @@ export const ObjectFilterDropdownNumberSearchInput = () => {
|
|||||||
placeholder={filterDefinitionUsedInDropdown.label}
|
placeholder={filterDefinitionUsedInDropdown.label}
|
||||||
onChange={(event: ChangeEvent<HTMLInputElement>) => {
|
onChange={(event: ChangeEvent<HTMLInputElement>) => {
|
||||||
selectFilter?.({
|
selectFilter?.({
|
||||||
fieldId: filterDefinitionUsedInDropdown.fieldId,
|
fieldMetadataId: filterDefinitionUsedInDropdown.fieldMetadataId,
|
||||||
value: event.target.value,
|
value: event.target.value,
|
||||||
operand: selectedOperandInDropdown,
|
operand: selectedOperandInDropdown,
|
||||||
displayValue: event.target.value,
|
displayValue: event.target.value,
|
||||||
|
|||||||
@ -26,7 +26,7 @@ export const ObjectFilterDropdownOperandSelect = () => {
|
|||||||
|
|
||||||
if (filterDefinitionUsedInDropdown && selectedFilter) {
|
if (filterDefinitionUsedInDropdown && selectedFilter) {
|
||||||
selectFilter?.({
|
selectFilter?.({
|
||||||
fieldId: selectedFilter.fieldId,
|
fieldMetadataId: selectedFilter.fieldMetadataId,
|
||||||
displayValue: selectedFilter.displayValue,
|
displayValue: selectedFilter.displayValue,
|
||||||
operand: newOperand,
|
operand: newOperand,
|
||||||
value: selectedFilter.value,
|
value: selectedFilter.value,
|
||||||
|
|||||||
@ -26,7 +26,7 @@ export const ObjectFilterDropdownTextSearchInput = () => {
|
|||||||
setObjectFilterDropdownSearchInput(event.target.value);
|
setObjectFilterDropdownSearchInput(event.target.value);
|
||||||
|
|
||||||
selectFilter?.({
|
selectFilter?.({
|
||||||
fieldId: filterDefinitionUsedInDropdown.fieldId,
|
fieldMetadataId: filterDefinitionUsedInDropdown.fieldMetadataId,
|
||||||
value: event.target.value,
|
value: event.target.value,
|
||||||
operand: selectedOperandInDropdown,
|
operand: selectedOperandInDropdown,
|
||||||
displayValue: event.target.value,
|
displayValue: event.target.value,
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { ViewFilterOperand } from '@/views/types/ViewFilterOperand';
|
|||||||
import { FilterDefinition } from './FilterDefinition';
|
import { FilterDefinition } from './FilterDefinition';
|
||||||
|
|
||||||
export type Filter = {
|
export type Filter = {
|
||||||
fieldId: string;
|
fieldMetadataId: string;
|
||||||
value: string;
|
value: string;
|
||||||
displayValue: string;
|
displayValue: string;
|
||||||
displayAvatarUrl?: string;
|
displayAvatarUrl?: string;
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { IconComponent } from '@/ui/display/icon/types/IconComponent';
|
|||||||
import { FilterType } from './FilterType';
|
import { FilterType } from './FilterType';
|
||||||
|
|
||||||
export type FilterDefinition = {
|
export type FilterDefinition = {
|
||||||
fieldId: string;
|
fieldMetadataId: string;
|
||||||
label: string;
|
label: string;
|
||||||
Icon: IconComponent;
|
Icon: IconComponent;
|
||||||
type: FilterType;
|
type: FilterType;
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { FilterDefinition } from './FilterDefinition';
|
import { FilterDefinition } from './FilterDefinition';
|
||||||
|
|
||||||
export type FilterDefinitionByEntity<T> = FilterDefinition & {
|
export type FilterDefinitionByEntity<T> = FilterDefinition & {
|
||||||
fieldId: keyof T;
|
fieldMetadataId: keyof T;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -18,7 +18,7 @@ export const turnFilterIntoWhereClause = (
|
|||||||
switch (filter.operand) {
|
switch (filter.operand) {
|
||||||
case ViewFilterOperand.IsNotNull:
|
case ViewFilterOperand.IsNotNull:
|
||||||
return {
|
return {
|
||||||
[filter.fieldId]: {
|
[filter.fieldMetadataId]: {
|
||||||
not: null,
|
not: null,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -28,14 +28,14 @@ export const turnFilterIntoWhereClause = (
|
|||||||
switch (filter.operand) {
|
switch (filter.operand) {
|
||||||
case ViewFilterOperand.Contains:
|
case ViewFilterOperand.Contains:
|
||||||
return {
|
return {
|
||||||
[filter.fieldId]: {
|
[filter.fieldMetadataId]: {
|
||||||
contains: filter.value,
|
contains: filter.value,
|
||||||
mode: QueryMode.Insensitive,
|
mode: QueryMode.Insensitive,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
case ViewFilterOperand.DoesNotContain:
|
case ViewFilterOperand.DoesNotContain:
|
||||||
return {
|
return {
|
||||||
[filter.fieldId]: {
|
[filter.fieldMetadataId]: {
|
||||||
not: {
|
not: {
|
||||||
contains: filter.value,
|
contains: filter.value,
|
||||||
mode: QueryMode.Insensitive,
|
mode: QueryMode.Insensitive,
|
||||||
@ -51,13 +51,13 @@ export const turnFilterIntoWhereClause = (
|
|||||||
switch (filter.operand) {
|
switch (filter.operand) {
|
||||||
case ViewFilterOperand.GreaterThan:
|
case ViewFilterOperand.GreaterThan:
|
||||||
return {
|
return {
|
||||||
[filter.fieldId]: {
|
[filter.fieldMetadataId]: {
|
||||||
gte: parseFloat(filter.value),
|
gte: parseFloat(filter.value),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
case ViewFilterOperand.LessThan:
|
case ViewFilterOperand.LessThan:
|
||||||
return {
|
return {
|
||||||
[filter.fieldId]: {
|
[filter.fieldMetadataId]: {
|
||||||
lte: parseFloat(filter.value),
|
lte: parseFloat(filter.value),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -70,13 +70,13 @@ export const turnFilterIntoWhereClause = (
|
|||||||
switch (filter.operand) {
|
switch (filter.operand) {
|
||||||
case ViewFilterOperand.GreaterThan:
|
case ViewFilterOperand.GreaterThan:
|
||||||
return {
|
return {
|
||||||
[filter.fieldId]: {
|
[filter.fieldMetadataId]: {
|
||||||
gte: filter.value,
|
gte: filter.value,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
case ViewFilterOperand.LessThan:
|
case ViewFilterOperand.LessThan:
|
||||||
return {
|
return {
|
||||||
[filter.fieldId]: {
|
[filter.fieldMetadataId]: {
|
||||||
lte: filter.value,
|
lte: filter.value,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
@ -89,13 +89,13 @@ export const turnFilterIntoWhereClause = (
|
|||||||
switch (filter.operand) {
|
switch (filter.operand) {
|
||||||
case ViewFilterOperand.Is:
|
case ViewFilterOperand.Is:
|
||||||
return {
|
return {
|
||||||
[filter.fieldId]: {
|
[filter.fieldMetadataId]: {
|
||||||
equals: filter.value,
|
equals: filter.value,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
case ViewFilterOperand.IsNot:
|
case ViewFilterOperand.IsNot:
|
||||||
return {
|
return {
|
||||||
[filter.fieldId]: {
|
[filter.fieldMetadataId]: {
|
||||||
not: { equals: filter.value },
|
not: { equals: filter.value },
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@ -17,11 +17,11 @@ export const turnFiltersIntoWhereClauseV2 = (
|
|||||||
|
|
||||||
filters.forEach((filter) => {
|
filters.forEach((filter) => {
|
||||||
const correspondingField = fields.find(
|
const correspondingField = fields.find(
|
||||||
(field) => field.id === filter.fieldId,
|
(field) => field.id === filter.fieldMetadataId,
|
||||||
);
|
);
|
||||||
if (!correspondingField) {
|
if (!correspondingField) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Could not find field ${filter.fieldId} in metadata object`,
|
`Could not find field ${filter.fieldMetadataId} in metadata object`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -50,7 +50,7 @@ export const ObjectSortDropdownButton = ({
|
|||||||
const handleAddSort = (selectedSortDefinition: SortDefinition) => {
|
const handleAddSort = (selectedSortDefinition: SortDefinition) => {
|
||||||
toggleDropdown();
|
toggleDropdown();
|
||||||
onSortSelect?.({
|
onSortSelect?.({
|
||||||
fieldId: selectedSortDefinition.fieldId,
|
fieldMetadataId: selectedSortDefinition.fieldMetadataId,
|
||||||
direction: selectedSortDirection,
|
direction: selectedSortDirection,
|
||||||
definition: selectedSortDefinition,
|
definition: selectedSortDefinition,
|
||||||
});
|
});
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import { SortDefinition } from './SortDefinition';
|
|||||||
import { SortDirection } from './SortDirection';
|
import { SortDirection } from './SortDirection';
|
||||||
|
|
||||||
export type Sort = {
|
export type Sort = {
|
||||||
fieldId: string;
|
fieldMetadataId: string;
|
||||||
direction: SortDirection;
|
direction: SortDirection;
|
||||||
definition: SortDefinition;
|
definition: SortDefinition;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { IconComponent } from '@/ui/display/icon/types/IconComponent';
|
|||||||
import { SortDirection } from './SortDirection';
|
import { SortDirection } from './SortDirection';
|
||||||
|
|
||||||
export type SortDefinition = {
|
export type SortDefinition = {
|
||||||
fieldId: string;
|
fieldMetadataId: string;
|
||||||
label: string;
|
label: string;
|
||||||
Icon?: IconComponent;
|
Icon?: IconComponent;
|
||||||
getOrderByTemplate?: (direction: SortDirection) => any[];
|
getOrderByTemplate?: (direction: SortDirection) => any[];
|
||||||
|
|||||||
@ -10,7 +10,7 @@ export const reduceSortsToOrderBy = (sorts: Sort[]): any[] =>
|
|||||||
if (sort.definition.getOrderByTemplate) {
|
if (sort.definition.getOrderByTemplate) {
|
||||||
return sort.definition.getOrderByTemplate(direction);
|
return sort.definition.getOrderByTemplate(direction);
|
||||||
} else {
|
} else {
|
||||||
return [{ [sort.definition.fieldId]: direction }];
|
return [{ [sort.definition.fieldMetadataId]: direction }];
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.flat();
|
.flat();
|
||||||
|
|||||||
@ -9,11 +9,11 @@ export const turnSortsIntoOrderByV2 = (
|
|||||||
const sortsObject: Record<string, 'AscNullsFirst' | 'DescNullsLast'> = {};
|
const sortsObject: Record<string, 'AscNullsFirst' | 'DescNullsLast'> = {};
|
||||||
sorts.forEach((sort) => {
|
sorts.forEach((sort) => {
|
||||||
const correspondingField = fields.find(
|
const correspondingField = fields.find(
|
||||||
(field) => field.id === sort.fieldId,
|
(field) => field.id === sort.fieldMetadataId,
|
||||||
);
|
);
|
||||||
if (!correspondingField) {
|
if (!correspondingField) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Could not find field ${sort.fieldId} in metadata object`,
|
`Could not find field ${sort.fieldMetadataId} in metadata object`,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
const direction =
|
const direction =
|
||||||
|
|||||||
@ -21,7 +21,7 @@ export const ColumnHeadWithDropdown = ({
|
|||||||
primaryColumnKey,
|
primaryColumnKey,
|
||||||
}: ColumnHeadWithDropdownProps) => {
|
}: ColumnHeadWithDropdownProps) => {
|
||||||
return (
|
return (
|
||||||
<DropdownScope dropdownScopeId={column.fieldId + '-header'}>
|
<DropdownScope dropdownScopeId={column.fieldMetadataId + '-header'}>
|
||||||
<Dropdown
|
<Dropdown
|
||||||
clickableComponent={<ColumnHead column={column} />}
|
clickableComponent={<ColumnHead column={column} />}
|
||||||
dropdownComponents={
|
dropdownComponents={
|
||||||
@ -34,7 +34,7 @@ export const ColumnHeadWithDropdown = ({
|
|||||||
}
|
}
|
||||||
dropdownOffset={{ x: -1 }}
|
dropdownOffset={{ x: -1 }}
|
||||||
dropdownPlacement="bottom-start"
|
dropdownPlacement="bottom-start"
|
||||||
dropdownHotkeyScope={{ scope: column.fieldId + '-header' }}
|
dropdownHotkeyScope={{ scope: column.fieldMetadataId + '-header' }}
|
||||||
/>
|
/>
|
||||||
</DropdownScope>
|
</DropdownScope>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -46,7 +46,7 @@ export const RecordTableColumnDropdownMenu = ({
|
|||||||
handleColumnVisibilityChange(column);
|
handleColumnVisibilityChange(column);
|
||||||
};
|
};
|
||||||
|
|
||||||
return column.fieldId === primaryColumnKey ? (
|
return column.fieldMetadataId === primaryColumnKey ? (
|
||||||
<></>
|
<></>
|
||||||
) : (
|
) : (
|
||||||
<DropdownMenuItemsContainer>
|
<DropdownMenuItemsContainer>
|
||||||
|
|||||||
@ -156,7 +156,7 @@ export const RecordTableHeader = () => {
|
|||||||
|
|
||||||
if (nextWidth !== tableColumnsByKey[resizedFieldKey].size) {
|
if (nextWidth !== tableColumnsByKey[resizedFieldKey].size) {
|
||||||
const nextColumns = tableColumns.map((column) =>
|
const nextColumns = tableColumns.map((column) =>
|
||||||
column.fieldId === resizedFieldKey
|
column.fieldMetadataId === resizedFieldKey
|
||||||
? { ...column, size: nextWidth }
|
? { ...column, size: nextWidth }
|
||||||
: column,
|
: column,
|
||||||
);
|
);
|
||||||
@ -194,11 +194,13 @@ export const RecordTableHeader = () => {
|
|||||||
</th>
|
</th>
|
||||||
{visibleTableColumns.map((column) => (
|
{visibleTableColumns.map((column) => (
|
||||||
<StyledColumnHeaderCell
|
<StyledColumnHeaderCell
|
||||||
key={column.fieldId}
|
key={column.fieldMetadataId}
|
||||||
isResizing={resizedFieldKey === column.fieldId}
|
isResizing={resizedFieldKey === column.fieldMetadataId}
|
||||||
columnWidth={Math.max(
|
columnWidth={Math.max(
|
||||||
tableColumnsByKey[column.fieldId].size +
|
tableColumnsByKey[column.fieldMetadataId].size +
|
||||||
(resizedFieldKey === column.fieldId ? resizeFieldOffset : 0),
|
(resizedFieldKey === column.fieldMetadataId
|
||||||
|
? resizeFieldOffset
|
||||||
|
: 0),
|
||||||
COLUMN_MIN_WIDTH,
|
COLUMN_MIN_WIDTH,
|
||||||
)}
|
)}
|
||||||
>
|
>
|
||||||
@ -209,20 +211,21 @@ export const RecordTableHeader = () => {
|
|||||||
isLastColumn={
|
isLastColumn={
|
||||||
column.position === visibleTableColumns.length - 1
|
column.position === visibleTableColumns.length - 1
|
||||||
}
|
}
|
||||||
primaryColumnKey={primaryColumn?.fieldId || ''}
|
primaryColumnKey={primaryColumn?.fieldMetadataId || ''}
|
||||||
/>
|
/>
|
||||||
</StyledColumnHeadContainer>
|
</StyledColumnHeadContainer>
|
||||||
<StyledResizeHandler
|
<StyledResizeHandler
|
||||||
className="cursor-col-resize"
|
className="cursor-col-resize"
|
||||||
role="separator"
|
role="separator"
|
||||||
onPointerDown={() => {
|
onPointerDown={() => {
|
||||||
setResizedFieldKey(column.fieldId);
|
setResizedFieldKey(column.fieldMetadataId);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</StyledColumnHeaderCell>
|
</StyledColumnHeaderCell>
|
||||||
))}
|
))}
|
||||||
{hiddenTableColumns.length > 0 && (
|
|
||||||
<StyledPlusIconHeaderCell>
|
<StyledPlusIconHeaderCell>
|
||||||
|
{hiddenTableColumns.length > 0 && (
|
||||||
<DropdownScope
|
<DropdownScope
|
||||||
dropdownScopeId={HIDDEN_TABLE_COLUMN_DROPDOWN_SCOPE_ID}
|
dropdownScopeId={HIDDEN_TABLE_COLUMN_DROPDOWN_SCOPE_ID}
|
||||||
>
|
>
|
||||||
@ -239,8 +242,8 @@ export const RecordTableHeader = () => {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</DropdownScope>
|
</DropdownScope>
|
||||||
</StyledPlusIconHeaderCell>
|
)}
|
||||||
)}
|
</StyledPlusIconHeaderCell>
|
||||||
</tr>
|
</tr>
|
||||||
</StyledTableHead>
|
</StyledTableHead>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -32,7 +32,7 @@ export const RecordTableHeaderPlusButtonContent = () => {
|
|||||||
<DropdownMenuItemsContainer>
|
<DropdownMenuItemsContainer>
|
||||||
{hiddenTableColumns.map((column) => (
|
{hiddenTableColumns.map((column) => (
|
||||||
<MenuItem
|
<MenuItem
|
||||||
key={column.fieldId}
|
key={column.fieldMetadataId}
|
||||||
iconButtons={[
|
iconButtons={[
|
||||||
{
|
{
|
||||||
Icon: IconPlus,
|
Icon: IconPlus,
|
||||||
|
|||||||
@ -42,7 +42,7 @@ export const RecordTableRow = forwardRef<
|
|||||||
.sort((columnA, columnB) => columnA.position - columnB.position)
|
.sort((columnA, columnB) => columnA.position - columnB.position)
|
||||||
.map((column, columnIndex) => {
|
.map((column, columnIndex) => {
|
||||||
return (
|
return (
|
||||||
<ColumnContext.Provider value={column} key={column.fieldId}>
|
<ColumnContext.Provider value={column} key={column.fieldMetadataId}>
|
||||||
<RecordTableCell cellIndex={columnIndex} />
|
<RecordTableCell cellIndex={columnIndex} />
|
||||||
</ColumnContext.Provider>
|
</ColumnContext.Provider>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -47,13 +47,14 @@ export const useTableColumns = () => {
|
|||||||
viewField: Omit<ColumnDefinition<FieldMetadata>, 'size' | 'position'>,
|
viewField: Omit<ColumnDefinition<FieldMetadata>, 'size' | 'position'>,
|
||||||
) => {
|
) => {
|
||||||
const isNewColumn = !tableColumns.some(
|
const isNewColumn = !tableColumns.some(
|
||||||
(tableColumns) => tableColumns.fieldId === viewField.fieldId,
|
(tableColumns) =>
|
||||||
|
tableColumns.fieldMetadataId === viewField.fieldMetadataId,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (isNewColumn) {
|
if (isNewColumn) {
|
||||||
const newColumn = availableTableColumns.find(
|
const newColumn = availableTableColumns.find(
|
||||||
(availableTableColumn) =>
|
(availableTableColumn) =>
|
||||||
availableTableColumn.fieldId === viewField.fieldId,
|
availableTableColumn.fieldMetadataId === viewField.fieldMetadataId,
|
||||||
);
|
);
|
||||||
if (!newColumn) return;
|
if (!newColumn) return;
|
||||||
|
|
||||||
@ -65,7 +66,7 @@ export const useTableColumns = () => {
|
|||||||
await handleColumnsChange(nextColumns);
|
await handleColumnsChange(nextColumns);
|
||||||
} else {
|
} else {
|
||||||
const nextColumns = tableColumns.map((previousColumn) =>
|
const nextColumns = tableColumns.map((previousColumn) =>
|
||||||
previousColumn.fieldId === viewField.fieldId
|
previousColumn.fieldMetadataId === viewField.fieldMetadataId
|
||||||
? { ...previousColumn, isVisible: !viewField.isVisible }
|
? { ...previousColumn, isVisible: !viewField.isVisible }
|
||||||
: previousColumn,
|
: previousColumn,
|
||||||
);
|
);
|
||||||
@ -82,7 +83,8 @@ export const useTableColumns = () => {
|
|||||||
column: ColumnDefinition<FieldMetadata>,
|
column: ColumnDefinition<FieldMetadata>,
|
||||||
) => {
|
) => {
|
||||||
const currentColumnArrayIndex = visibleTableColumns.findIndex(
|
const currentColumnArrayIndex = visibleTableColumns.findIndex(
|
||||||
(visibleColumn) => visibleColumn.fieldId === column.fieldId,
|
(visibleColumn) =>
|
||||||
|
visibleColumn.fieldMetadataId === column.fieldMetadataId,
|
||||||
);
|
);
|
||||||
|
|
||||||
const columns = handleColumnMove(
|
const columns = handleColumnMove(
|
||||||
|
|||||||
@ -42,7 +42,7 @@ export const useTableCell = () => {
|
|||||||
const [, setFieldInitialValue] = useRecoilState(
|
const [, setFieldInitialValue] = useRecoilState(
|
||||||
entityFieldInitialValueFamilyState({
|
entityFieldInitialValueFamilyState({
|
||||||
entityId,
|
entityId,
|
||||||
fieldId: fieldDefinition.fieldId,
|
fieldMetadataId: fieldDefinition.fieldMetadataId,
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -9,10 +9,10 @@ export const hiddenTableColumnsScopedSelector = selectorFamily({
|
|||||||
(scopeId: string) =>
|
(scopeId: string) =>
|
||||||
({ get }) => {
|
({ get }) => {
|
||||||
const columns = get(tableColumnsScopedState({ scopeId }));
|
const columns = get(tableColumnsScopedState({ scopeId }));
|
||||||
const columnKeys = columns.map(({ fieldId }) => fieldId);
|
const columnKeys = columns.map(({ fieldMetadataId }) => fieldMetadataId);
|
||||||
const otherAvailableColumns = get(
|
const otherAvailableColumns = get(
|
||||||
availableTableColumnsScopedState({ scopeId }),
|
availableTableColumnsScopedState({ scopeId }),
|
||||||
).filter(({ fieldId }) => !columnKeys.includes(fieldId));
|
).filter(({ fieldMetadataId }) => !columnKeys.includes(fieldMetadataId));
|
||||||
|
|
||||||
return [
|
return [
|
||||||
...columns.filter((column) => !column.isVisible),
|
...columns.filter((column) => !column.isVisible),
|
||||||
|
|||||||
@ -12,5 +12,8 @@ export const savedTableColumnsByKeyFamilySelector = selectorFamily({
|
|||||||
({ get }) =>
|
({ get }) =>
|
||||||
get(savedTableColumnsFamilyState(viewId)).reduce<
|
get(savedTableColumnsFamilyState(viewId)).reduce<
|
||||||
Record<string, ColumnDefinition<FieldMetadata>>
|
Record<string, ColumnDefinition<FieldMetadata>>
|
||||||
>((result, column) => ({ ...result, [column.fieldId]: column }), {}),
|
>(
|
||||||
|
(result, column) => ({ ...result, [column.fieldMetadataId]: column }),
|
||||||
|
{},
|
||||||
|
),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -12,5 +12,8 @@ export const tableColumnsByKeyScopedSelector = selectorFamily({
|
|||||||
({ get }) =>
|
({ get }) =>
|
||||||
get(tableColumnsScopedState({ scopeId })).reduce<
|
get(tableColumnsScopedState({ scopeId })).reduce<
|
||||||
Record<string, ColumnDefinition<FieldMetadata>>
|
Record<string, ColumnDefinition<FieldMetadata>>
|
||||||
>((result, column) => ({ ...result, [column.fieldId]: column }), {}),
|
>(
|
||||||
|
(result, column) => ({ ...result, [column.fieldMetadataId]: column }),
|
||||||
|
{},
|
||||||
|
),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -11,12 +11,13 @@ export const visibleTableColumnsScopedSelector = selectorFamily({
|
|||||||
const columns = get(tableColumnsScopedState({ scopeId }));
|
const columns = get(tableColumnsScopedState({ scopeId }));
|
||||||
const availableColumnKeys = get(
|
const availableColumnKeys = get(
|
||||||
availableTableColumnsScopedState({ scopeId }),
|
availableTableColumnsScopedState({ scopeId }),
|
||||||
).map(({ fieldId }) => fieldId);
|
).map(({ fieldMetadataId }) => fieldMetadataId);
|
||||||
|
|
||||||
return [...columns]
|
return [...columns]
|
||||||
.filter(
|
.filter(
|
||||||
(column) =>
|
(column) =>
|
||||||
column.isVisible && availableColumnKeys.includes(column.fieldId),
|
column.isVisible &&
|
||||||
|
availableColumnKeys.includes(column.fieldMetadataId),
|
||||||
)
|
)
|
||||||
.sort((a, b) => a.position - b.position);
|
.sort((a, b) => a.position - b.position);
|
||||||
},
|
},
|
||||||
|
|||||||
@ -126,12 +126,12 @@ export const ViewBarDetails = ({
|
|||||||
{currentViewSorts?.map((sort) => {
|
{currentViewSorts?.map((sort) => {
|
||||||
return (
|
return (
|
||||||
<SortOrFilterChip
|
<SortOrFilterChip
|
||||||
key={sort.fieldId}
|
key={sort.fieldMetadataId}
|
||||||
testId={sort.fieldId}
|
testId={sort.fieldMetadataId}
|
||||||
labelValue={sort.definition.label}
|
labelValue={sort.definition.label}
|
||||||
Icon={sort.direction === 'desc' ? IconArrowDown : IconArrowUp}
|
Icon={sort.direction === 'desc' ? IconArrowDown : IconArrowUp}
|
||||||
isSort
|
isSort
|
||||||
onRemove={() => removeViewSort(sort.fieldId)}
|
onRemove={() => removeViewSort(sort.fieldMetadataId)}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
@ -143,15 +143,15 @@ export const ViewBarDetails = ({
|
|||||||
{currentViewFilters?.map((filter) => {
|
{currentViewFilters?.map((filter) => {
|
||||||
return (
|
return (
|
||||||
<SortOrFilterChip
|
<SortOrFilterChip
|
||||||
key={filter.fieldId}
|
key={filter.fieldMetadataId}
|
||||||
testId={filter.fieldId}
|
testId={filter.fieldMetadataId}
|
||||||
labelKey={filter.definition.label}
|
labelKey={filter.definition.label}
|
||||||
labelValue={`${getOperandLabelShort(filter.operand)} ${
|
labelValue={`${getOperandLabelShort(filter.operand)} ${
|
||||||
filter.displayValue
|
filter.displayValue
|
||||||
}`}
|
}`}
|
||||||
Icon={filter.definition.Icon}
|
Icon={filter.definition.Icon}
|
||||||
onRemove={() => {
|
onRemove={() => {
|
||||||
removeViewFilter(filter.fieldId);
|
removeViewFilter(filter.fieldMetadataId);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -35,14 +35,14 @@ export const ViewBarEffect = () => {
|
|||||||
|
|
||||||
useFindManyObjects({
|
useFindManyObjects({
|
||||||
objectNamePlural: 'viewsV2',
|
objectNamePlural: 'viewsV2',
|
||||||
filter: { type: { eq: viewType }, objectId: { eq: viewObjectId } },
|
filter: { type: { eq: viewType }, objectMetadataId: { eq: viewObjectId } },
|
||||||
onCompleted: useRecoilCallback(
|
onCompleted: useRecoilCallback(
|
||||||
({ snapshot, set }) =>
|
({ snapshot, set }) =>
|
||||||
async (data: PaginatedObjectTypeResults<View>) => {
|
async (data: PaginatedObjectTypeResults<View>) => {
|
||||||
const nextViews = data.edges.map((view) => ({
|
const nextViews = data.edges.map((view) => ({
|
||||||
id: view.node.id,
|
id: view.node.id,
|
||||||
name: view.node.name,
|
name: view.node.name,
|
||||||
objectId: view.node.objectId,
|
objectMetadataId: view.node.objectMetadataId,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const { viewsState } = getViewScopedStatesFromSnapshot({
|
const { viewsState } = getViewScopedStatesFromSnapshot({
|
||||||
@ -132,7 +132,8 @@ export const ViewBarEffect = () => {
|
|||||||
const queriedViewFilters = data.edges
|
const queriedViewFilters = data.edges
|
||||||
.map(({ node }) => {
|
.map(({ node }) => {
|
||||||
const availableFilterDefinition = availableFilterDefinitions.find(
|
const availableFilterDefinition = availableFilterDefinitions.find(
|
||||||
(filterDefinition) => filterDefinition.fieldId === node.fieldId,
|
(filterDefinition) =>
|
||||||
|
filterDefinition.fieldMetadataId === node.fieldMetadataId,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!availableFilterDefinition) return null;
|
if (!availableFilterDefinition) return null;
|
||||||
@ -185,14 +186,14 @@ export const ViewBarEffect = () => {
|
|||||||
const queriedViewSorts = data.edges
|
const queriedViewSorts = data.edges
|
||||||
.map(({ node }) => {
|
.map(({ node }) => {
|
||||||
const availableSortDefinition = availableSortDefinitions.find(
|
const availableSortDefinition = availableSortDefinitions.find(
|
||||||
(sort) => sort.fieldId === node.fieldId,
|
(sort) => sort.fieldMetadataId === node.fieldMetadataId,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (!availableSortDefinition) return null;
|
if (!availableSortDefinition) return null;
|
||||||
|
|
||||||
return {
|
return {
|
||||||
id: node.id,
|
id: node.id,
|
||||||
fieldId: node.fieldId,
|
fieldMetadataId: node.fieldMetadataId,
|
||||||
direction: node.direction,
|
direction: node.direction,
|
||||||
definition: availableSortDefinition,
|
definition: availableSortDefinition,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -97,12 +97,12 @@ export const ViewFieldsVisibilityDropdownSection = ({
|
|||||||
.sort((a, b) => a.position - b.position)
|
.sort((a, b) => a.position - b.position)
|
||||||
.map((field, index) => (
|
.map((field, index) => (
|
||||||
<DraggableItem
|
<DraggableItem
|
||||||
key={field.fieldId}
|
key={field.fieldMetadataId}
|
||||||
draggableId={field.fieldId}
|
draggableId={field.fieldMetadataId}
|
||||||
index={index + 1}
|
index={index + 1}
|
||||||
itemComponent={
|
itemComponent={
|
||||||
<MenuItemDraggable
|
<MenuItemDraggable
|
||||||
key={field.fieldId}
|
key={field.fieldMetadataId}
|
||||||
LeftIcon={field.Icon}
|
LeftIcon={field.Icon}
|
||||||
iconButtons={getIconButtons(index + 1, field)}
|
iconButtons={getIconButtons(index + 1, field)}
|
||||||
isTooltipOpen={openToolTipIndex === index + 1}
|
isTooltipOpen={openToolTipIndex === index + 1}
|
||||||
@ -120,7 +120,7 @@ export const ViewFieldsVisibilityDropdownSection = ({
|
|||||||
) : (
|
) : (
|
||||||
fields.map((field, index) => (
|
fields.map((field, index) => (
|
||||||
<MenuItem
|
<MenuItem
|
||||||
key={field.fieldId}
|
key={field.fieldMetadataId}
|
||||||
LeftIcon={field.Icon}
|
LeftIcon={field.Icon}
|
||||||
iconButtons={getIconButtons(index, field)}
|
iconButtons={getIconButtons(index, field)}
|
||||||
isTooltipOpen={openToolTipIndex === index}
|
isTooltipOpen={openToolTipIndex === index}
|
||||||
|
|||||||
@ -40,7 +40,7 @@ export const useViewFields = (viewScopeId: string) => {
|
|||||||
mutation: createOneMutation,
|
mutation: createOneMutation,
|
||||||
variables: {
|
variables: {
|
||||||
input: {
|
input: {
|
||||||
fieldId: viewField.fieldId,
|
fieldMetadataId: viewField.fieldMetadataId,
|
||||||
viewId: viewIdToPersist,
|
viewId: viewIdToPersist,
|
||||||
isVisible: viewField.isVisible,
|
isVisible: viewField.isVisible,
|
||||||
size: viewField.size,
|
size: viewField.size,
|
||||||
@ -76,18 +76,18 @@ export const useViewFields = (viewScopeId: string) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const viewFieldsToCreate = viewFieldsToPersist.filter(
|
const viewFieldsToCreate = viewFieldsToPersist.filter(
|
||||||
(viewField) => !savedViewFieldsByKey[viewField.fieldId],
|
(viewField) => !savedViewFieldsByKey[viewField.fieldMetadataId],
|
||||||
);
|
);
|
||||||
|
|
||||||
const viewFieldsToUpdate = viewFieldsToPersist.filter(
|
const viewFieldsToUpdate = viewFieldsToPersist.filter(
|
||||||
(viewFieldToPersit) =>
|
(viewFieldToPersit) =>
|
||||||
savedViewFieldsByKey[viewFieldToPersit.fieldId] &&
|
savedViewFieldsByKey[viewFieldToPersit.fieldMetadataId] &&
|
||||||
(savedViewFieldsByKey[viewFieldToPersit.fieldId].size !==
|
(savedViewFieldsByKey[viewFieldToPersit.fieldMetadataId].size !==
|
||||||
viewFieldToPersit.size ||
|
viewFieldToPersit.size ||
|
||||||
savedViewFieldsByKey[viewFieldToPersit.fieldId].position !==
|
savedViewFieldsByKey[viewFieldToPersit.fieldMetadataId]
|
||||||
viewFieldToPersit.position ||
|
.position !== viewFieldToPersit.position ||
|
||||||
savedViewFieldsByKey[viewFieldToPersit.fieldId].isVisible !==
|
savedViewFieldsByKey[viewFieldToPersit.fieldMetadataId]
|
||||||
viewFieldToPersit.isVisible),
|
.isVisible !== viewFieldToPersit.isVisible),
|
||||||
);
|
);
|
||||||
|
|
||||||
await _createViewFields(viewFieldsToCreate);
|
await _createViewFields(viewFieldsToCreate);
|
||||||
|
|||||||
@ -53,7 +53,7 @@ export const useViewFilters = (viewScopeId: string) => {
|
|||||||
mutation: createOneMutation,
|
mutation: createOneMutation,
|
||||||
variables: {
|
variables: {
|
||||||
input: {
|
input: {
|
||||||
fieldId: viewFilter.fieldId,
|
fieldMetadataId: viewFilter.fieldMetadataId,
|
||||||
viewId: viewId ?? currentViewId,
|
viewId: viewId ?? currentViewId,
|
||||||
value: viewFilter.value,
|
value: viewFilter.value,
|
||||||
displayValue: viewFilter.displayValue,
|
displayValue: viewFilter.displayValue,
|
||||||
@ -102,19 +102,23 @@ export const useViewFilters = (viewScopeId: string) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const filtersToCreate = currentViewFilters.filter(
|
const filtersToCreate = currentViewFilters.filter(
|
||||||
(filter) => !savedViewFiltersByKey[filter.fieldId],
|
(filter) => !savedViewFiltersByKey[filter.fieldMetadataId],
|
||||||
);
|
);
|
||||||
await createViewFilters(filtersToCreate);
|
await createViewFilters(filtersToCreate);
|
||||||
|
|
||||||
const filtersToUpdate = currentViewFilters.filter(
|
const filtersToUpdate = currentViewFilters.filter(
|
||||||
(filter) =>
|
(filter) =>
|
||||||
savedViewFiltersByKey[filter.fieldId] &&
|
savedViewFiltersByKey[filter.fieldMetadataId] &&
|
||||||
(savedViewFiltersByKey[filter.fieldId].operand !== filter.operand ||
|
(savedViewFiltersByKey[filter.fieldMetadataId].operand !==
|
||||||
savedViewFiltersByKey[filter.fieldId].value !== filter.value),
|
filter.operand ||
|
||||||
|
savedViewFiltersByKey[filter.fieldMetadataId].value !==
|
||||||
|
filter.value),
|
||||||
);
|
);
|
||||||
await updateViewFilters(filtersToUpdate);
|
await updateViewFilters(filtersToUpdate);
|
||||||
|
|
||||||
const filterKeys = currentViewFilters.map((filter) => filter.fieldId);
|
const filterKeys = currentViewFilters.map(
|
||||||
|
(filter) => filter.fieldMetadataId,
|
||||||
|
);
|
||||||
const filterKeysToDelete = Object.keys(savedViewFiltersByKey).filter(
|
const filterKeysToDelete = Object.keys(savedViewFiltersByKey).filter(
|
||||||
(previousFilterKey) => !filterKeys.includes(previousFilterKey),
|
(previousFilterKey) => !filterKeys.includes(previousFilterKey),
|
||||||
);
|
);
|
||||||
@ -159,12 +163,13 @@ export const useViewFilters = (viewScopeId: string) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const existingSavedFilterId =
|
const existingSavedFilterId =
|
||||||
savedViewFiltersByKey[filterToUpsert.fieldId]?.id;
|
savedViewFiltersByKey[filterToUpsert.fieldMetadataId]?.id;
|
||||||
|
|
||||||
set(currentViewFiltersState, (filters) => {
|
set(currentViewFiltersState, (filters) => {
|
||||||
const newViewFilters = produce(filters, (filtersDraft) => {
|
const newViewFilters = produce(filters, (filtersDraft) => {
|
||||||
const existingFilterIndex = filtersDraft.findIndex(
|
const existingFilterIndex = filtersDraft.findIndex(
|
||||||
(filter) => filter.fieldId === filterToUpsert.fieldId,
|
(filter) =>
|
||||||
|
filter.fieldMetadataId === filterToUpsert.fieldMetadataId,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (existingFilterIndex === -1) {
|
if (existingFilterIndex === -1) {
|
||||||
@ -189,7 +194,7 @@ export const useViewFilters = (viewScopeId: string) => {
|
|||||||
|
|
||||||
const removeViewFilter = useRecoilCallback(
|
const removeViewFilter = useRecoilCallback(
|
||||||
({ snapshot, set }) =>
|
({ snapshot, set }) =>
|
||||||
(fieldId: string) => {
|
(fieldMetadataId: string) => {
|
||||||
const { currentViewId, currentViewFilters, onViewFiltersChange } =
|
const { currentViewId, currentViewFilters, onViewFiltersChange } =
|
||||||
getViewScopedStateValuesFromSnapshot({
|
getViewScopedStateValuesFromSnapshot({
|
||||||
snapshot,
|
snapshot,
|
||||||
@ -201,7 +206,7 @@ export const useViewFilters = (viewScopeId: string) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const newViewFilters = currentViewFilters.filter((filter) => {
|
const newViewFilters = currentViewFilters.filter((filter) => {
|
||||||
return filter.fieldId !== fieldId;
|
return filter.fieldMetadataId !== fieldMetadataId;
|
||||||
});
|
});
|
||||||
set(currentViewFiltersState, newViewFilters);
|
set(currentViewFiltersState, newViewFilters);
|
||||||
onViewFiltersChange?.(newViewFilters);
|
onViewFiltersChange?.(newViewFilters);
|
||||||
|
|||||||
@ -54,7 +54,7 @@ export const useViewSorts = (viewScopeId: string) => {
|
|||||||
mutation: createOneMutation,
|
mutation: createOneMutation,
|
||||||
variables: {
|
variables: {
|
||||||
input: {
|
input: {
|
||||||
fieldId: viewSort.fieldId,
|
fieldMetadataId: viewSort.fieldMetadataId,
|
||||||
viewId: viewId ?? currentViewId,
|
viewId: viewId ?? currentViewId,
|
||||||
direction: viewSort.direction,
|
direction: viewSort.direction,
|
||||||
},
|
},
|
||||||
@ -99,19 +99,20 @@ export const useViewSorts = (viewScopeId: string) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
const sortsToCreate = currentViewSorts.filter(
|
const sortsToCreate = currentViewSorts.filter(
|
||||||
(sort) => !savedViewSortsByKey[sort.fieldId],
|
(sort) => !savedViewSortsByKey[sort.fieldMetadataId],
|
||||||
);
|
);
|
||||||
|
|
||||||
await createViewSorts(sortsToCreate);
|
await createViewSorts(sortsToCreate);
|
||||||
|
|
||||||
const sortsToUpdate = currentViewSorts.filter(
|
const sortsToUpdate = currentViewSorts.filter(
|
||||||
(sort) =>
|
(sort) =>
|
||||||
savedViewSortsByKey[sort.fieldId] &&
|
savedViewSortsByKey[sort.fieldMetadataId] &&
|
||||||
savedViewSortsByKey[sort.fieldId].direction !== sort.direction,
|
savedViewSortsByKey[sort.fieldMetadataId].direction !==
|
||||||
|
sort.direction,
|
||||||
);
|
);
|
||||||
await updateViewSorts(sortsToUpdate);
|
await updateViewSorts(sortsToUpdate);
|
||||||
|
|
||||||
const sortKeys = currentViewSorts.map((sort) => sort.fieldId);
|
const sortKeys = currentViewSorts.map((sort) => sort.fieldMetadataId);
|
||||||
const sortKeysToDelete = Object.keys(savedViewSortsByKey).filter(
|
const sortKeysToDelete = Object.keys(savedViewSortsByKey).filter(
|
||||||
(previousSortKey) => !sortKeys.includes(previousSortKey),
|
(previousSortKey) => !sortKeys.includes(previousSortKey),
|
||||||
);
|
);
|
||||||
@ -155,12 +156,12 @@ export const useViewSorts = (viewScopeId: string) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const existingSavedSortId =
|
const existingSavedSortId =
|
||||||
savedViewSortsByKey[sortToUpsert.fieldId]?.id;
|
savedViewSortsByKey[sortToUpsert.fieldMetadataId]?.id;
|
||||||
|
|
||||||
set(currentViewSortsState, (sorts) => {
|
set(currentViewSortsState, (sorts) => {
|
||||||
const newViewSorts = produce(sorts, (sortsDraft) => {
|
const newViewSorts = produce(sorts, (sortsDraft) => {
|
||||||
const existingSortIndex = sortsDraft.findIndex(
|
const existingSortIndex = sortsDraft.findIndex(
|
||||||
(sort) => sort.fieldId === sortToUpsert.fieldId,
|
(sort) => sort.fieldMetadataId === sortToUpsert.fieldMetadataId,
|
||||||
);
|
);
|
||||||
|
|
||||||
if (existingSortIndex === -1) {
|
if (existingSortIndex === -1) {
|
||||||
@ -182,7 +183,7 @@ export const useViewSorts = (viewScopeId: string) => {
|
|||||||
|
|
||||||
const removeViewSort = useRecoilCallback(
|
const removeViewSort = useRecoilCallback(
|
||||||
({ snapshot, set }) =>
|
({ snapshot, set }) =>
|
||||||
(fieldId: string) => {
|
(fieldMetadataId: string) => {
|
||||||
const { currentViewId, onViewSortsChange, currentViewSorts } =
|
const { currentViewId, onViewSortsChange, currentViewSorts } =
|
||||||
getViewScopedStateValuesFromSnapshot({
|
getViewScopedStateValuesFromSnapshot({
|
||||||
snapshot,
|
snapshot,
|
||||||
@ -194,7 +195,7 @@ export const useViewSorts = (viewScopeId: string) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const newViewSorts = currentViewSorts.filter((filter) => {
|
const newViewSorts = currentViewSorts.filter((filter) => {
|
||||||
return filter.fieldId !== fieldId;
|
return filter.fieldMetadataId !== fieldMetadataId;
|
||||||
});
|
});
|
||||||
set(currentViewSortsState, newViewSorts);
|
set(currentViewSortsState, newViewSorts);
|
||||||
onViewSortsChange?.(newViewSorts);
|
onViewSortsChange?.(newViewSorts);
|
||||||
|
|||||||
@ -34,7 +34,7 @@ export const useViews = (scopeId: string) => {
|
|||||||
variables: {
|
variables: {
|
||||||
input: {
|
input: {
|
||||||
...view,
|
...view,
|
||||||
objectId: viewObjectId,
|
objectMetadataId: viewObjectId,
|
||||||
type: viewType,
|
type: viewType,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@ -25,7 +25,7 @@ export const savedViewFieldByKeyScopedFamilySelector = selectorFamily({
|
|||||||
familyKey: viewId,
|
familyKey: viewId,
|
||||||
}),
|
}),
|
||||||
).reduce<Record<string, ViewField>>(
|
).reduce<Record<string, ViewField>>(
|
||||||
(result, column) => ({ ...result, [column.fieldId]: column }),
|
(result, column) => ({ ...result, [column.fieldMetadataId]: column }),
|
||||||
{},
|
{},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@ -18,7 +18,7 @@ export const savedViewFiltersByKeyScopedFamilySelector = selectorFamily({
|
|||||||
familyKey: viewId,
|
familyKey: viewId,
|
||||||
}),
|
}),
|
||||||
).reduce<Record<string, ViewFilter>>(
|
).reduce<Record<string, ViewFilter>>(
|
||||||
(result, filter) => ({ ...result, [filter.fieldId]: filter }),
|
(result, filter) => ({ ...result, [filter.fieldMetadataId]: filter }),
|
||||||
{},
|
{},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@ -18,7 +18,7 @@ export const savedViewSortsByKeyScopedFamilySelector = selectorFamily({
|
|||||||
familyKey: viewId,
|
familyKey: viewId,
|
||||||
}),
|
}),
|
||||||
).reduce<Record<string, ViewSort>>(
|
).reduce<Record<string, ViewSort>>(
|
||||||
(result, sort) => ({ ...result, [sort.fieldId]: sort }),
|
(result, sort) => ({ ...result, [sort.fieldMetadataId]: sort }),
|
||||||
{},
|
{},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@ -1 +1 @@
|
|||||||
export type View = { id: string; name: string; objectId: string };
|
export type View = { id: string; name: string; objectMetadataId: string };
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { ColumnDefinition } from '@/ui/object/record-table/types/ColumnDefinitio
|
|||||||
|
|
||||||
export type ViewField = {
|
export type ViewField = {
|
||||||
id: string;
|
id: string;
|
||||||
fieldId: string;
|
fieldMetadataId: string;
|
||||||
position: number;
|
position: number;
|
||||||
isVisible: boolean;
|
isVisible: boolean;
|
||||||
size: number;
|
size: number;
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import { ViewFilterOperand } from './ViewFilterOperand';
|
|||||||
|
|
||||||
export type ViewFilter = {
|
export type ViewFilter = {
|
||||||
id?: string;
|
id?: string;
|
||||||
fieldId: string;
|
fieldMetadataId: string;
|
||||||
operand: ViewFilterOperand;
|
operand: ViewFilterOperand;
|
||||||
value: string;
|
value: string;
|
||||||
displayValue: string;
|
displayValue: string;
|
||||||
|
|||||||
@ -3,7 +3,7 @@ import { SortDirection } from '@/ui/object/object-sort-dropdown/types/SortDirect
|
|||||||
|
|
||||||
export type ViewSort = {
|
export type ViewSort = {
|
||||||
id?: string;
|
id?: string;
|
||||||
fieldId: string;
|
fieldMetadataId: string;
|
||||||
direction: SortDirection;
|
direction: SortDirection;
|
||||||
definition: SortDefinition;
|
definition: SortDefinition;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -8,7 +8,7 @@ export const mapColumnDefinitionsToViewFields = (
|
|||||||
): ViewField[] => {
|
): ViewField[] => {
|
||||||
return columnDefinitions.map((columnDefinition) => ({
|
return columnDefinitions.map((columnDefinition) => ({
|
||||||
id: columnDefinition.viewFieldId || '',
|
id: columnDefinition.viewFieldId || '',
|
||||||
fieldId: columnDefinition.fieldId,
|
fieldMetadataId: columnDefinition.fieldMetadataId,
|
||||||
position: columnDefinition.position,
|
position: columnDefinition.position,
|
||||||
size: columnDefinition.size,
|
size: columnDefinition.size,
|
||||||
isVisible: columnDefinition.isVisible ?? true,
|
isVisible: columnDefinition.isVisible ?? true,
|
||||||
|
|||||||
@ -11,12 +11,12 @@ export const mapViewFieldsToBoardFieldDefinitions = (
|
|||||||
return viewFields
|
return viewFields
|
||||||
.map((viewField) => {
|
.map((viewField) => {
|
||||||
const correspondingFieldMetadata = fieldsMetadata.find(
|
const correspondingFieldMetadata = fieldsMetadata.find(
|
||||||
({ fieldId }) => viewField.fieldId === fieldId,
|
({ fieldMetadataId }) => viewField.fieldMetadataId === fieldMetadataId,
|
||||||
);
|
);
|
||||||
|
|
||||||
return correspondingFieldMetadata
|
return correspondingFieldMetadata
|
||||||
? {
|
? {
|
||||||
fieldId: viewField.fieldId,
|
fieldMetadataId: viewField.fieldMetadataId,
|
||||||
label: correspondingFieldMetadata.label,
|
label: correspondingFieldMetadata.label,
|
||||||
metadata: correspondingFieldMetadata.metadata,
|
metadata: correspondingFieldMetadata.metadata,
|
||||||
entityChipDisplayMapper:
|
entityChipDisplayMapper:
|
||||||
|
|||||||
@ -11,12 +11,12 @@ export const mapViewFieldsToColumnDefinitions = (
|
|||||||
return viewFields
|
return viewFields
|
||||||
.map((viewField) => {
|
.map((viewField) => {
|
||||||
const correspondingFieldMetadata = fieldsMetadata.find(
|
const correspondingFieldMetadata = fieldsMetadata.find(
|
||||||
({ fieldId }) => viewField.fieldId === fieldId,
|
({ fieldMetadataId }) => viewField.fieldMetadataId === fieldMetadataId,
|
||||||
);
|
);
|
||||||
|
|
||||||
return correspondingFieldMetadata
|
return correspondingFieldMetadata
|
||||||
? {
|
? {
|
||||||
fieldId: viewField.fieldId,
|
fieldMetadataId: viewField.fieldMetadataId,
|
||||||
label: correspondingFieldMetadata.label,
|
label: correspondingFieldMetadata.label,
|
||||||
metadata: correspondingFieldMetadata.metadata,
|
metadata: correspondingFieldMetadata.metadata,
|
||||||
entityChipDisplayMapper:
|
entityChipDisplayMapper:
|
||||||
|
|||||||
@ -7,7 +7,7 @@ export const mapViewFiltersToFilters = (
|
|||||||
): Filter[] => {
|
): Filter[] => {
|
||||||
return viewFilters.map((viewFilter) => {
|
return viewFilters.map((viewFilter) => {
|
||||||
return {
|
return {
|
||||||
fieldId: viewFilter.fieldId,
|
fieldMetadataId: viewFilter.fieldMetadataId,
|
||||||
value: viewFilter.value,
|
value: viewFilter.value,
|
||||||
displayValue: viewFilter.displayValue,
|
displayValue: viewFilter.displayValue,
|
||||||
operand: viewFilter.operand,
|
operand: viewFilter.operand,
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import { ViewSort } from '../types/ViewSort';
|
|||||||
export const mapViewSortsToSorts = (viewSorts: ViewSort[]): Sort[] => {
|
export const mapViewSortsToSorts = (viewSorts: ViewSort[]): Sort[] => {
|
||||||
return viewSorts.map((viewSort) => {
|
return viewSorts.map((viewSort) => {
|
||||||
return {
|
return {
|
||||||
fieldId: viewSort.fieldId,
|
fieldMetadataId: viewSort.fieldMetadataId,
|
||||||
direction: viewSort.direction,
|
direction: viewSort.direction,
|
||||||
definition: viewSort.definition,
|
definition: viewSort.definition,
|
||||||
};
|
};
|
||||||
|
|||||||
@ -93,10 +93,11 @@ export const CompanyShow = () => {
|
|||||||
{companyShowFieldDefinitions.map((fieldDefinition) => {
|
{companyShowFieldDefinitions.map((fieldDefinition) => {
|
||||||
return (
|
return (
|
||||||
<FieldContext.Provider
|
<FieldContext.Provider
|
||||||
key={company.id + fieldDefinition.fieldId}
|
key={company.id + fieldDefinition.fieldMetadataId}
|
||||||
value={{
|
value={{
|
||||||
entityId: company.id,
|
entityId: company.id,
|
||||||
recoilScopeId: company.id + fieldDefinition.fieldId,
|
recoilScopeId:
|
||||||
|
company.id + fieldDefinition.fieldMetadataId,
|
||||||
fieldDefinition,
|
fieldDefinition,
|
||||||
useUpdateEntityMutation: useUpdateOneCompanyMutation,
|
useUpdateEntityMutation: useUpdateOneCompanyMutation,
|
||||||
hotkeyScope: InlineCellHotkeyScope.InlineCell,
|
hotkeyScope: InlineCellHotkeyScope.InlineCell,
|
||||||
|
|||||||
@ -22,7 +22,7 @@ import { User } from '~/generated/graphql';
|
|||||||
|
|
||||||
export const companyShowFieldDefinitions: FieldDefinition<FieldMetadata>[] = [
|
export const companyShowFieldDefinitions: FieldDefinition<FieldMetadata>[] = [
|
||||||
{
|
{
|
||||||
fieldId: 'domainName',
|
fieldMetadataId: 'domainName',
|
||||||
label: 'Domain name',
|
label: 'Domain name',
|
||||||
Icon: IconLink,
|
Icon: IconLink,
|
||||||
type: 'URL',
|
type: 'URL',
|
||||||
@ -32,7 +32,7 @@ export const companyShowFieldDefinitions: FieldDefinition<FieldMetadata>[] = [
|
|||||||
},
|
},
|
||||||
} satisfies FieldDefinition<FieldURLMetadata>,
|
} satisfies FieldDefinition<FieldURLMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'accountOwner',
|
fieldMetadataId: 'accountOwner',
|
||||||
label: 'Account owner',
|
label: 'Account owner',
|
||||||
Icon: IconUserCircle,
|
Icon: IconUserCircle,
|
||||||
type: 'RELATION',
|
type: 'RELATION',
|
||||||
@ -49,7 +49,7 @@ export const companyShowFieldDefinitions: FieldDefinition<FieldMetadata>[] = [
|
|||||||
},
|
},
|
||||||
} satisfies FieldDefinition<FieldRelationMetadata>,
|
} satisfies FieldDefinition<FieldRelationMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'employees',
|
fieldMetadataId: 'employees',
|
||||||
label: 'Employees',
|
label: 'Employees',
|
||||||
Icon: IconUsers,
|
Icon: IconUsers,
|
||||||
type: 'NUMBER',
|
type: 'NUMBER',
|
||||||
@ -59,7 +59,7 @@ export const companyShowFieldDefinitions: FieldDefinition<FieldMetadata>[] = [
|
|||||||
},
|
},
|
||||||
} satisfies FieldDefinition<FieldNumberMetadata>,
|
} satisfies FieldDefinition<FieldNumberMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'address',
|
fieldMetadataId: 'address',
|
||||||
label: 'Address',
|
label: 'Address',
|
||||||
Icon: IconMap,
|
Icon: IconMap,
|
||||||
type: 'TEXT',
|
type: 'TEXT',
|
||||||
@ -69,7 +69,7 @@ export const companyShowFieldDefinitions: FieldDefinition<FieldMetadata>[] = [
|
|||||||
},
|
},
|
||||||
} satisfies FieldDefinition<FieldTextMetadata>,
|
} satisfies FieldDefinition<FieldTextMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'idealCustomerProfile',
|
fieldMetadataId: 'idealCustomerProfile',
|
||||||
label: 'ICP',
|
label: 'ICP',
|
||||||
Icon: IconTarget,
|
Icon: IconTarget,
|
||||||
type: 'BOOLEAN',
|
type: 'BOOLEAN',
|
||||||
@ -78,7 +78,7 @@ export const companyShowFieldDefinitions: FieldDefinition<FieldMetadata>[] = [
|
|||||||
},
|
},
|
||||||
} satisfies FieldDefinition<FieldBooleanMetadata>,
|
} satisfies FieldDefinition<FieldBooleanMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'xUrl',
|
fieldMetadataId: 'xUrl',
|
||||||
label: 'Twitter',
|
label: 'Twitter',
|
||||||
Icon: IconBrandX,
|
Icon: IconBrandX,
|
||||||
type: 'URL',
|
type: 'URL',
|
||||||
@ -88,7 +88,7 @@ export const companyShowFieldDefinitions: FieldDefinition<FieldMetadata>[] = [
|
|||||||
},
|
},
|
||||||
} satisfies FieldDefinition<FieldURLMetadata>,
|
} satisfies FieldDefinition<FieldURLMetadata>,
|
||||||
{
|
{
|
||||||
fieldId: 'createdAt',
|
fieldMetadataId: 'createdAt',
|
||||||
label: 'Created at',
|
label: 'Created at',
|
||||||
Icon: IconCalendar,
|
Icon: IconCalendar,
|
||||||
type: 'DATE',
|
type: 'DATE',
|
||||||
|
|||||||
@ -13,37 +13,37 @@ import { Company } from '~/generated/graphql';
|
|||||||
export const companyTableFilterDefinitions: FilterDefinitionByEntity<Company>[] =
|
export const companyTableFilterDefinitions: FilterDefinitionByEntity<Company>[] =
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
fieldId: 'name',
|
fieldMetadataId: 'name',
|
||||||
label: 'Name',
|
label: 'Name',
|
||||||
Icon: IconBuildingSkyscraper,
|
Icon: IconBuildingSkyscraper,
|
||||||
type: 'TEXT',
|
type: 'TEXT',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldId: 'employees',
|
fieldMetadataId: 'employees',
|
||||||
label: 'Employees',
|
label: 'Employees',
|
||||||
Icon: IconUsers,
|
Icon: IconUsers,
|
||||||
type: 'NUMBER',
|
type: 'NUMBER',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldId: 'domainName',
|
fieldMetadataId: 'domainName',
|
||||||
label: 'URL',
|
label: 'URL',
|
||||||
Icon: IconLink,
|
Icon: IconLink,
|
||||||
type: 'TEXT',
|
type: 'TEXT',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldId: 'address',
|
fieldMetadataId: 'address',
|
||||||
label: 'Address',
|
label: 'Address',
|
||||||
Icon: IconMap,
|
Icon: IconMap,
|
||||||
type: 'TEXT',
|
type: 'TEXT',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldId: 'createdAt',
|
fieldMetadataId: 'createdAt',
|
||||||
label: 'Created at',
|
label: 'Created at',
|
||||||
Icon: IconCalendarEvent,
|
Icon: IconCalendarEvent,
|
||||||
type: 'DATE',
|
type: 'DATE',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldId: 'accountOwnerId',
|
fieldMetadataId: 'accountOwnerId',
|
||||||
label: 'Account owner',
|
label: 'Account owner',
|
||||||
Icon: IconUser,
|
Icon: IconUser,
|
||||||
type: 'ENTITY',
|
type: 'ENTITY',
|
||||||
|
|||||||
@ -9,27 +9,27 @@ import { SortDefinition } from '@/ui/object/object-sort-dropdown/types/SortDefin
|
|||||||
|
|
||||||
export const companyTableSortDefinitions: SortDefinition[] = [
|
export const companyTableSortDefinitions: SortDefinition[] = [
|
||||||
{
|
{
|
||||||
fieldId: 'name',
|
fieldMetadataId: 'name',
|
||||||
label: 'Name',
|
label: 'Name',
|
||||||
Icon: IconBuildingSkyscraper,
|
Icon: IconBuildingSkyscraper,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldId: 'employees',
|
fieldMetadataId: 'employees',
|
||||||
label: 'Employees',
|
label: 'Employees',
|
||||||
Icon: IconUsers,
|
Icon: IconUsers,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldId: 'domainName',
|
fieldMetadataId: 'domainName',
|
||||||
label: 'Url',
|
label: 'Url',
|
||||||
Icon: IconLink,
|
Icon: IconLink,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldId: 'address',
|
fieldMetadataId: 'address',
|
||||||
label: 'Address',
|
label: 'Address',
|
||||||
Icon: IconMap,
|
Icon: IconMap,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldId: 'createdAt',
|
fieldMetadataId: 'createdAt',
|
||||||
label: 'Creation',
|
label: 'Creation',
|
||||||
Icon: IconCalendarEvent,
|
Icon: IconCalendarEvent,
|
||||||
},
|
},
|
||||||
|
|||||||
@ -13,26 +13,26 @@ import { FilterDropdownPeopleSearchSelect } from '../../../modules/people/compon
|
|||||||
export const opportunityBoardFilterDefinitions: FilterDefinitionByEntity<PipelineProgress>[] =
|
export const opportunityBoardFilterDefinitions: FilterDefinitionByEntity<PipelineProgress>[] =
|
||||||
[
|
[
|
||||||
{
|
{
|
||||||
fieldId: 'amount',
|
fieldMetadataId: 'amount',
|
||||||
label: 'Amount',
|
label: 'Amount',
|
||||||
Icon: IconCurrencyDollar,
|
Icon: IconCurrencyDollar,
|
||||||
type: 'NUMBER',
|
type: 'NUMBER',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldId: 'closeDate',
|
fieldMetadataId: 'closeDate',
|
||||||
label: 'Close date',
|
label: 'Close date',
|
||||||
Icon: IconCalendarEvent,
|
Icon: IconCalendarEvent,
|
||||||
type: 'DATE',
|
type: 'DATE',
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldId: 'companyId',
|
fieldMetadataId: 'companyId',
|
||||||
label: 'Company',
|
label: 'Company',
|
||||||
Icon: IconBuildingSkyscraper,
|
Icon: IconBuildingSkyscraper,
|
||||||
type: 'ENTITY',
|
type: 'ENTITY',
|
||||||
entitySelectComponent: <FilterDropdownCompanySearchSelect />,
|
entitySelectComponent: <FilterDropdownCompanySearchSelect />,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
fieldId: 'pointOfContactId',
|
fieldMetadataId: 'pointOfContactId',
|
||||||
label: 'Point of contact',
|
label: 'Point of contact',
|
||||||
Icon: IconUser,
|
Icon: IconUser,
|
||||||
type: 'ENTITY',
|
type: 'ENTITY',
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user