Implement page layout override (#18472)

This commit is contained in:
Weiko
2026-03-09 18:21:08 +01:00
committed by GitHub
parent 309fd7a526
commit c433b2b73f
90 changed files with 1270 additions and 57 deletions
@@ -145,8 +145,12 @@ exports[`ALL_UNIVERSAL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY should ma
"title",
"position",
"deletedAt",
"icon",
"overrides",
],
"propertiesToStringify": [
"overrides",
],
"propertiesToStringify": [],
},
"pageLayoutWidget": {
"propertiesToCompare": [
@@ -157,11 +161,15 @@ exports[`ALL_UNIVERSAL_FLAT_ENTITY_PROPERTIES_TO_COMPARE_AND_STRINGIFY should ma
"position",
"universalConfiguration",
"deletedAt",
"conditionalDisplay",
"overrides",
],
"propertiesToStringify": [
"gridPosition",
"position",
"universalConfiguration",
"conditionalDisplay",
"overrides",
],
},
"role": {
@@ -34,6 +34,7 @@ type MetadataEntityPropertyConfiguration<
: HasObjectInUnion<MetadataEntity<TMetadataName>[K]>
: boolean;
toCompare: boolean;
isOverridable?: boolean;
};
};
@@ -834,6 +835,7 @@ export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
type: { toCompare: true, toStringify: false, universalProperty: undefined },
objectMetadataId: {
@@ -850,6 +852,7 @@ export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = {
toCompare: true,
toStringify: true,
universalProperty: undefined,
isOverridable: true,
},
configuration: {
toCompare: true,
@@ -877,7 +880,13 @@ export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = {
universalProperty: 'pageLayoutTabUniversalIdentifier',
},
conditionalDisplay: {
toCompare: false,
toCompare: true,
toStringify: true,
universalProperty: undefined,
isOverridable: true,
},
overrides: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
@@ -887,11 +896,13 @@ export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
position: {
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
deletedAt: {
toCompare: true,
@@ -899,9 +910,10 @@ export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = {
universalProperty: undefined,
},
icon: {
toCompare: false,
toCompare: true,
toStringify: false,
universalProperty: undefined,
isOverridable: true,
},
createdAt: {
toCompare: false,
@@ -923,6 +935,11 @@ export const ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME = {
toStringify: false,
universalProperty: undefined,
},
overrides: {
toCompare: true,
toStringify: true,
universalProperty: undefined,
},
},
skill: {
name: { toCompare: true, toStringify: false, universalProperty: undefined },
@@ -1341,3 +1358,12 @@ export type MetadataEntityComparablePropertyName<T extends AllMetadataName> =
FilterComparableKeys<
(typeof ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME)[T]
>;
type FilterOverridableKeys<TConfig> = {
[P in keyof TConfig]: TConfig[P] extends { isOverridable: true } ? P : never;
}[keyof TConfig];
export type MetadataEntityOverridablePropertyName<T extends AllMetadataName> =
FilterOverridableKeys<
(typeof ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME)[T]
>;
@@ -0,0 +1,32 @@
import {
ALL_METADATA_NAME,
type AllMetadataName,
} from 'twenty-shared/metadata';
import {
ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME,
type MetadataEntityOverridablePropertyName,
} from 'src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant';
const computeOverridableProperties = <T extends AllMetadataName>(
metadataName: T,
): MetadataEntityOverridablePropertyName<T>[] => {
const config =
ALL_ENTITY_PROPERTIES_CONFIGURATION_BY_METADATA_NAME[metadataName];
return (Object.entries(config) as [string, { isOverridable?: boolean }][])
.filter(([_, conf]) => conf.isOverridable === true)
.map(([property]) => property as MetadataEntityOverridablePropertyName<T>);
};
export const ALL_OVERRIDABLE_PROPERTIES_BY_METADATA_NAME = Object.values(
ALL_METADATA_NAME,
).reduce(
(acc, metadataName) => ({
...acc,
[metadataName]: computeOverridableProperties(metadataName),
}),
{} as {
[P in AllMetadataName]: MetadataEntityOverridablePropertyName<P>[];
},
);