diff --git a/packages/twenty-docs/l/de/developers/extend/apps/data/extending-objects.mdx b/packages/twenty-docs/l/de/developers/extend/apps/data/extending-objects.mdx index 5033865a8d..caeab6d0b9 100644 --- a/packages/twenty-docs/l/de/developers/extend/apps/data/extending-objects.mdx +++ b/packages/twenty-docs/l/de/developers/extend/apps/data/extending-objects.mdx @@ -43,6 +43,8 @@ export default defineField({ * Der Speicherort der Datei liegt bei Ihnen. Die Konvention ist `src/fields/\.field.ts`, aber das SDK erkennt Felder überall in `src/`. +* Um eine Registerkarte zu einem Standard-Seitenlayout hinzuzufügen (z. B. der Aufgaben- oder Unternehmensdetailseite), verwenden Sie [`definePageLayoutTab`](/l/de/developers/extend/apps/layout/page-layouts#definepagelayouttab) mit `STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS` aus `twenty-sdk/define`. + ## Hinzufügen einer Relation zu einem bestehenden Objekt Um ein Relationsfeld hinzuzufügen (z. B. zur Verknüpfung Ihres benutzerdefinierten Objekts mit einer Standard-`Person`), verwenden Sie `defineField()` mit `FieldType.RELATION`. Das Muster ist dasselbe wie bei Inline-Relationen, jedoch mit explizit gesetztem `objectUniversalIdentifier`. Siehe [Relations](/l/de/developers/extend/apps/data/relations) für das bidirektionale Muster. diff --git a/packages/twenty-docs/l/de/developers/extend/apps/layout/page-layouts.mdx b/packages/twenty-docs/l/de/developers/extend/apps/layout/page-layouts.mdx index 1f86537ed4..e82b251d0d 100644 --- a/packages/twenty-docs/l/de/developers/extend/apps/layout/page-layouts.mdx +++ b/packages/twenty-docs/l/de/developers/extend/apps/layout/page-layouts.mdx @@ -65,16 +65,15 @@ Verwenden Sie dies, wenn Sie nur einen Tab zu einem vorhandenen Layout **hinzuf import { definePageLayoutTab, PageLayoutTabLayoutMode, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, } from 'twenty-sdk/define'; import { HELLO_WORLD_FRONT_COMPONENT_UNIVERSAL_IDENTIFIER } from '../front-components/hello-world'; -const COMPANY_RECORD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIER = - '20202020-ab01-4001-8001-c0aba11c0100'; - export default definePageLayoutTab({ universalIdentifier: 'b1b2b3b4-b5b6-4000-8000-000000000001', pageLayoutUniversalIdentifier: - COMPANY_RECORD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIER, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage + .universalIdentifier, title: 'Hello World', position: 1000, icon: 'IconWorld', @@ -97,6 +96,37 @@ export default definePageLayoutTab({ ### Hauptpunkte * `pageLayoutUniversalIdentifier` ist **erforderlich** und muss auf ein Seitenlayout verweisen, das zum Installationszeitpunkt bereits existiert – entweder ein standardmäßiges Twenty-Layout oder eines, das von Ihrer eigenen App definiert wurde. App-übergreifende Verweise auf Layouts, die einer anderen installierten App gehören, werden derzeit nicht unterstützt. Wenn das übergeordnete Layout fehlt, schlägt die Installation mit einem eindeutigen Validierungsfehler fehl. + +* Für Standard-Twenty-Layouts importieren Sie die Bezeichner aus `twenty-sdk/define`: + + ```ts + import { STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define'; + + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.noteRecordPage.universalIdentifier + // … + ``` + + Jeder Layout-Eintrag stellt außerdem seine `tabs` und deren `widgets` zur Verfügung, sodass Sie auf jede Ebene verweisen können: + + ```ts + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.home.universalIdentifier + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.home.widgets.fields.universalIdentifier + ``` + + Eine kurze Alias-Variable `STANDARD_PAGE_LAYOUT` ist ebenfalls verfügbar: + + ```ts + import { STANDARD_PAGE_LAYOUT } from 'twenty-sdk/define'; + + STANDARD_PAGE_LAYOUT.companyRecordPage.universalIdentifier; + ``` + * `widgets` sind ausschließlich auf diesen Tab beschränkt – sie verweisen auf [Frontend-Komponenten](/l/de/developers/extend/apps/layout/front-components), Ansichten usw., genau wie Widgets, die inline in `definePageLayout` definiert sind. + * `position` steuert die Reihenfolge im Zielseitenlayout relativ zu den vorhandenen Registerkarten. Wählen Sie einen Wert, der Ihre Registerkarte relativ zu integrierten Registerkarten an die gewünschte Position bringt. + * Verwenden Sie dies anstelle von `definePageLayout`, wenn Sie einem vorhandenen Layout nur etwas hinzufügen möchten. Verwenden Sie `definePageLayout`, wenn Sie das gesamte Layout besitzen. diff --git a/packages/twenty-docs/l/pt/developers/extend/apps/data/extending-objects.mdx b/packages/twenty-docs/l/pt/developers/extend/apps/data/extending-objects.mdx index 56bd1bf894..5b0a9ae074 100644 --- a/packages/twenty-docs/l/pt/developers/extend/apps/data/extending-objects.mdx +++ b/packages/twenty-docs/l/pt/developers/extend/apps/data/extending-objects.mdx @@ -43,6 +43,8 @@ export default defineField({ * A localização do arquivo fica a seu critério. A convenção é `src/fields/\.field.ts`, mas o SDK detecta campos em qualquer lugar dentro de `src/`. +* Para adicionar uma aba a um layout de página padrão (por exemplo, a página de detalhes de Task ou Company), use [`definePageLayoutTab`](/l/pt/developers/extend/apps/layout/page-layouts#definepagelayouttab) com `STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS` de `twenty-sdk/define`. + ## Adicionando uma relação a um objeto existente Para adicionar um campo de relação (por exemplo, vinculando seu objeto personalizado a um `Person` padrão), use `defineField()` com `FieldType.RELATION`. O padrão é o mesmo que para relações inline, mas com `objectUniversalIdentifier` definido explicitamente. Veja [Relações](/l/pt/developers/extend/apps/data/relations) para o padrão bidirecional. diff --git a/packages/twenty-docs/l/pt/developers/extend/apps/layout/page-layouts.mdx b/packages/twenty-docs/l/pt/developers/extend/apps/layout/page-layouts.mdx index c136ff94f1..6e3c3b84ab 100644 --- a/packages/twenty-docs/l/pt/developers/extend/apps/layout/page-layouts.mdx +++ b/packages/twenty-docs/l/pt/developers/extend/apps/layout/page-layouts.mdx @@ -65,16 +65,15 @@ Use isto quando você quiser apenas **adicionar** uma aba a um layout existente import { definePageLayoutTab, PageLayoutTabLayoutMode, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, } from 'twenty-sdk/define'; import { HELLO_WORLD_FRONT_COMPONENT_UNIVERSAL_IDENTIFIER } from '../front-components/hello-world'; -const COMPANY_RECORD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIER = - '20202020-ab01-4001-8001-c0aba11c0100'; - export default definePageLayoutTab({ universalIdentifier: 'b1b2b3b4-b5b6-4000-8000-000000000001', pageLayoutUniversalIdentifier: - COMPANY_RECORD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIER, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage + .universalIdentifier, title: 'Hello World', position: 1000, icon: 'IconWorld', @@ -97,6 +96,37 @@ export default definePageLayoutTab({ ### Pontos-chave * `pageLayoutUniversalIdentifier` é **obrigatório** e deve apontar para um layout de página que já exista no momento da instalação — seja um layout padrão da Twenty ou um definido pelo seu próprio aplicativo. Referências entre aplicativos para layouts pertencentes a outro aplicativo instalado não são compatíveis atualmente. Quando o layout pai estiver ausente, a instalação falha com um erro de validação claro. + +* Para layouts padrão do Twenty, importe identificadores de `twenty-sdk/define`: + + ```ts + import { STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define'; + + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.noteRecordPage.universalIdentifier + // … + ``` + + Cada entrada de layout também expõe suas `tabs` e seus `widgets`, para que você possa fazer referência a qualquer nível: + + ```ts + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.home.universalIdentifier + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.home.widgets.fields.universalIdentifier + ``` + + Um alias abreviado `STANDARD_PAGE_LAYOUT` também está disponível: + + ```ts + import { STANDARD_PAGE_LAYOUT } from 'twenty-sdk/define'; + + STANDARD_PAGE_LAYOUT.companyRecordPage.universalIdentifier; + ``` + * `widgets` têm escopo apenas para esta aba — eles referenciam [front components](/l/pt/developers/extend/apps/layout/front-components), visualizações etc., exatamente como widgets definidos inline em `definePageLayout`. + * `position` controla a ordenação em relação às abas existentes no layout de destino. Escolha um valor que posicione sua aba onde você deseja em relação às abas nativas. + * Use isto em vez de `definePageLayout` quando você quiser apenas adicionar a um layout existente. Use `definePageLayout` quando você possuir todo o layout. diff --git a/packages/twenty-docs/l/ro/developers/extend/apps/data/extending-objects.mdx b/packages/twenty-docs/l/ro/developers/extend/apps/data/extending-objects.mdx index 262a334d5c..89c7ffbaba 100644 --- a/packages/twenty-docs/l/ro/developers/extend/apps/data/extending-objects.mdx +++ b/packages/twenty-docs/l/ro/developers/extend/apps/data/extending-objects.mdx @@ -43,6 +43,8 @@ export default defineField({ * Locația fișierului depinde de dumneavoastră. Convenția este `src/fields/\.field.ts`, dar SDK-ul detectează câmpuri oriunde în `src/`. +* Pentru a adăuga o filă într-un layout standard de pagină (de ex. pagina de detalii pentru Task sau Company), folosește [`definePageLayoutTab`](/l/ro/developers/extend/apps/layout/page-layouts#definepagelayouttab) cu `STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS` din `twenty-sdk/define`. + ## Adăugarea unei relații la un obiect existent Pentru a adăuga un câmp de tip relație (de ex. pentru a lega obiectul personalizat de un `Person` standard), folosiți `defineField()` cu `FieldType.RELATION`. Modelul este același ca pentru relațiile inline, dar cu `objectUniversalIdentifier` setat explicit. Consultați [Relații](/l/ro/developers/extend/apps/data/relations) pentru modelul bidirecțional. diff --git a/packages/twenty-docs/l/ro/developers/extend/apps/layout/page-layouts.mdx b/packages/twenty-docs/l/ro/developers/extend/apps/layout/page-layouts.mdx index a6bb3ffbf5..0ef64202bd 100644 --- a/packages/twenty-docs/l/ro/developers/extend/apps/layout/page-layouts.mdx +++ b/packages/twenty-docs/l/ro/developers/extend/apps/layout/page-layouts.mdx @@ -65,16 +65,15 @@ Folosește aceasta atunci când vrei doar să **adaugi** o filă la un layout ex import { definePageLayoutTab, PageLayoutTabLayoutMode, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, } from 'twenty-sdk/define'; import { HELLO_WORLD_FRONT_COMPONENT_UNIVERSAL_IDENTIFIER } from '../front-components/hello-world'; -const COMPANY_RECORD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIER = - '20202020-ab01-4001-8001-c0aba11c0100'; - export default definePageLayoutTab({ universalIdentifier: 'b1b2b3b4-b5b6-4000-8000-000000000001', pageLayoutUniversalIdentifier: - COMPANY_RECORD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIER, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage + .universalIdentifier, title: 'Hello World', position: 1000, icon: 'IconWorld', @@ -97,6 +96,37 @@ export default definePageLayoutTab({ ### Puncte cheie * `pageLayoutUniversalIdentifier` este **obligatoriu** și trebuie să indice către un layout de pagină care există deja la momentul instalării — fie un layout standard Twenty, fie unul definit de propria ta aplicație. Referințele cross-app către layouturi deținute de o altă aplicație instalată nu sunt acceptate în prezent. Când lipsește layoutul părinte, instalarea eșuează cu o eroare clară de validare. + +* Pentru layout-urile standard Twenty, importați identificatorii din `twenty-sdk/define`: + + ```ts + import { STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define'; + + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.noteRecordPage.universalIdentifier + // … + ``` + + Fiecare intrare de layout își expune, de asemenea, `tabs` și `widgets`, astfel încât puteți face referire la orice nivel: + + ```ts + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.home.universalIdentifier + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.home.widgets.fields.universalIdentifier + ``` + + Este disponibil și un alias scurt `STANDARD_PAGE_LAYOUT`: + + ```ts + import { STANDARD_PAGE_LAYOUT } from 'twenty-sdk/define'; + + STANDARD_PAGE_LAYOUT.companyRecordPage.universalIdentifier; + ``` + * `widgets` sunt limitate doar la această filă — fac referire la [front components](/l/ro/developers/extend/apps/layout/front-components), vizualizări etc., exact ca widgeturile definite inline în `definePageLayout`. + * `position` controlează ordonarea în raport cu filele existente din layoutul țintă. Alege o valoare care să plaseze fila ta acolo unde dorești, relativ la filele predefinite. + * Folosește aceasta în loc de `definePageLayout` atunci când vrei doar să adaugi la un layout existent. Folosește `definePageLayout` atunci când deții întregul layout. diff --git a/packages/twenty-docs/l/ru/developers/extend/apps/data/extending-objects.mdx b/packages/twenty-docs/l/ru/developers/extend/apps/data/extending-objects.mdx index f679854ef5..00a399534b 100644 --- a/packages/twenty-docs/l/ru/developers/extend/apps/data/extending-objects.mdx +++ b/packages/twenty-docs/l/ru/developers/extend/apps/data/extending-objects.mdx @@ -43,6 +43,8 @@ export default defineField({ * Расположение файла зависит от вас. Принятое соглашение — `src/fields/\.field.ts`, но SDK обнаруживает поля в любом месте внутри `src/`. +* Чтобы добавить вкладку в стандартную компоновку страницы (например, на страницу сведений о задаче или компании), используйте [`definePageLayoutTab`](/l/ru/developers/extend/apps/layout/page-layouts#definepagelayouttab) с `STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS` из `twenty-sdk/define`. + ## Добавление связи к существующему объекту Чтобы добавить поле связи (например, связать ваш пользовательский объект со стандартным `Person`), используйте `defineField()` с `FieldType.RELATION`. Шаблон тот же, что и для встроенных связей, но с явным указанием `objectUniversalIdentifier`. Смотрите раздел [Relations](/l/ru/developers/extend/apps/data/relations) для двунаправленного шаблона. diff --git a/packages/twenty-docs/l/ru/developers/extend/apps/layout/page-layouts.mdx b/packages/twenty-docs/l/ru/developers/extend/apps/layout/page-layouts.mdx index 24ba670145..98899a84fd 100644 --- a/packages/twenty-docs/l/ru/developers/extend/apps/layout/page-layouts.mdx +++ b/packages/twenty-docs/l/ru/developers/extend/apps/layout/page-layouts.mdx @@ -65,16 +65,15 @@ export default definePageLayout({ import { definePageLayoutTab, PageLayoutTabLayoutMode, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, } from 'twenty-sdk/define'; import { HELLO_WORLD_FRONT_COMPONENT_UNIVERSAL_IDENTIFIER } from '../front-components/hello-world'; -const COMPANY_RECORD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIER = - '20202020-ab01-4001-8001-c0aba11c0100'; - export default definePageLayoutTab({ universalIdentifier: 'b1b2b3b4-b5b6-4000-8000-000000000001', pageLayoutUniversalIdentifier: - COMPANY_RECORD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIER, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage + .universalIdentifier, title: 'Hello World', position: 1000, icon: 'IconWorld', @@ -97,6 +96,37 @@ export default definePageLayoutTab({ ### Основные моменты * `pageLayoutUniversalIdentifier` является **обязательным** и должен указывать на макет страницы, который уже существует на момент установки — либо стандартный макет Twenty, либо определённый вашим собственным приложением. Кросс-приложенческие ссылки на макеты, которыми владеет другое установленное приложение, на данный момент не поддерживаются. Если родительский макет отсутствует, установка завершается с понятной ошибкой проверки. + +* Для стандартных макетов Twenty импортируйте идентификаторы из `twenty-sdk/define`: + + ```ts + import { STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define'; + + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.noteRecordPage.universalIdentifier + // … + ``` + + Каждый элемент макета также предоставляет свои `tabs` и их `widgets`, поэтому вы можете ссылаться на любой уровень: + + ```ts + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.home.universalIdentifier + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.home.widgets.fields.universalIdentifier + ``` + + Также доступен короткий псевдоним `STANDARD_PAGE_LAYOUT`: + + ```ts + import { STANDARD_PAGE_LAYOUT } from 'twenty-sdk/define'; + + STANDARD_PAGE_LAYOUT.companyRecordPage.universalIdentifier; + ``` + * `widgets` ограничены только этой вкладкой — они ссылаются на [front components](/l/ru/developers/extend/apps/layout/front-components), представления и т. п. точно так же, как виджеты, определённые непосредственно в `definePageLayout`. + * `position` управляет порядком относительно существующих вкладок в целевом макете. Выберите значение, которое поместит вашу вкладку в нужное место относительно встроенных вкладок. + * Используйте это вместо `definePageLayout`, когда вы хотите только добавить к существующему макету. Используйте `definePageLayout`, когда вы управляете всем макетом. diff --git a/packages/twenty-docs/l/tr/developers/extend/apps/data/extending-objects.mdx b/packages/twenty-docs/l/tr/developers/extend/apps/data/extending-objects.mdx index 2d8b6c5e7f..846d9e3573 100644 --- a/packages/twenty-docs/l/tr/developers/extend/apps/data/extending-objects.mdx +++ b/packages/twenty-docs/l/tr/developers/extend/apps/data/extending-objects.mdx @@ -43,6 +43,8 @@ export default defineField({ * Dosya konumu size bağlıdır. Genel kabul gören yapı `src/fields/\.field.ts` şeklindedir, ancak SDK `src/` içinde herhangi bir yerdeki alanları algılar. +* Standart bir sayfa yerleşimine (örneğin, Görev veya Şirket detay sayfası) bir sekme eklemek için, `twenty-sdk/define` içindeki `STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS` ile birlikte [`definePageLayoutTab`](/l/tr/developers/extend/apps/layout/page-layouts#definepagelayouttab) kullanın. + ## Mevcut bir nesneye ilişki ekleme Bir ilişki alanı eklemek için (örneğin özel nesnenizi standart bir `Person` nesnesine bağlamak), `FieldType.RELATION` ile `defineField()` kullanın. Desen, satır içi ilişkilerle aynıdır ancak `objectUniversalIdentifier` açıkça ayarlanır. Çift yönlü desen için [Relations](/l/tr/developers/extend/apps/data/relations) bölümüne bakın. diff --git a/packages/twenty-docs/l/tr/developers/extend/apps/layout/page-layouts.mdx b/packages/twenty-docs/l/tr/developers/extend/apps/layout/page-layouts.mdx index a5fcc705d3..879747fe46 100644 --- a/packages/twenty-docs/l/tr/developers/extend/apps/layout/page-layouts.mdx +++ b/packages/twenty-docs/l/tr/developers/extend/apps/layout/page-layouts.mdx @@ -65,16 +65,15 @@ Bunu yalnızca mevcut bir düzene **sekme eklemek** istediğinizde kullanın — import { definePageLayoutTab, PageLayoutTabLayoutMode, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, } from 'twenty-sdk/define'; import { HELLO_WORLD_FRONT_COMPONENT_UNIVERSAL_IDENTIFIER } from '../front-components/hello-world'; -const COMPANY_RECORD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIER = - '20202020-ab01-4001-8001-c0aba11c0100'; - export default definePageLayoutTab({ universalIdentifier: 'b1b2b3b4-b5b6-4000-8000-000000000001', pageLayoutUniversalIdentifier: - COMPANY_RECORD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIER, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage + .universalIdentifier, title: 'Hello World', position: 1000, icon: 'IconWorld', @@ -97,6 +96,37 @@ export default definePageLayoutTab({ ### Önemli noktalar * `pageLayoutUniversalIdentifier` **zorunludur** ve kurulum anında zaten var olan bir sayfa düzenini işaret etmelidir — standart bir Twenty düzeni veya kendi uygulamanız tarafından tanımlanan bir düzen olabilir. Başka yüklü bir uygulamaya ait düzenlere uygulamalar arası referanslar bugün desteklenmemektedir. Üst düzen eksik olduğunda, kurulum net bir doğrulama hatasıyla başarısız olur. + +* Standart Twenty yerleşimleri için tanımlayıcıları `twenty-sdk/define` içinden içe aktarın: + + ```ts + import { STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define'; + + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.noteRecordPage.universalIdentifier + // … + ``` + + Her yerleşim girdisi ayrıca `tabs` ve bunların `widgets` ögelerini de açığa çıkarır, böylece herhangi bir düzeye başvurabilirsiniz: + + ```ts + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.home.universalIdentifier + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.home.widgets.fields.universalIdentifier + ``` + + Kısa bir takma ad `STANDARD_PAGE_LAYOUT` da kullanılabilir: + + ```ts + import { STANDARD_PAGE_LAYOUT } from 'twenty-sdk/define'; + + STANDARD_PAGE_LAYOUT.companyRecordPage.universalIdentifier; + ``` + * `widgets` yalnızca bu sekmeyle sınırlıdır — satır içi olarak `definePageLayout` içinde tanımlanan widget'larda olduğu gibi, [ön uç bileşenlerine](/l/tr/developers/extend/apps/layout/front-components), görünümlere vb. tam olarak aynı şekilde referans verirler. + * `position`, hedeflenen düzende mevcut sekmelere göre sıralamayı kontrol eder. Yerleşik sekmelere göre sekmenizi istediğiniz konuma yerleştirecek bir değer seçin. + * Yalnızca mevcut bir düzene ekleme yapmak istediğinizde `definePageLayout` yerine bunu kullanın. Tüm düzene sahip olduğunuzda `definePageLayout` kullanın. diff --git a/packages/twenty-docs/l/zh/developers/extend/apps/data/extending-objects.mdx b/packages/twenty-docs/l/zh/developers/extend/apps/data/extending-objects.mdx index 2492d2a239..32fa4867a1 100644 --- a/packages/twenty-docs/l/zh/developers/extend/apps/data/extending-objects.mdx +++ b/packages/twenty-docs/l/zh/developers/extend/apps/data/extending-objects.mdx @@ -43,6 +43,8 @@ export default defineField({ * 文件位置由你决定。 约定是使用 `src/fields/\.field.ts`,但 SDK 会在整个 `src/` 中检测字段。 +* 要在标准页面布局(例如任务或公司详情页面)中添加一个选项卡,请使用 [`definePageLayoutTab`](/l/zh/developers/extend/apps/layout/page-layouts#definepagelayouttab),并结合来自 `twenty-sdk/define` 的 `STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS`。 + ## 向现有对象添加关系 要添加关系字段(例如将你的自定义对象链接到标准 `Person`),请将 `defineField()` 与 `FieldType.RELATION` 一起使用。 模式与内联关系相同,但需要显式设置 `objectUniversalIdentifier`。 有关双向模式,请参见[关系](/l/zh/developers/extend/apps/data/relations)。 diff --git a/packages/twenty-docs/l/zh/developers/extend/apps/layout/page-layouts.mdx b/packages/twenty-docs/l/zh/developers/extend/apps/layout/page-layouts.mdx index 38cdfdbae8..c24f21df3f 100644 --- a/packages/twenty-docs/l/zh/developers/extend/apps/layout/page-layouts.mdx +++ b/packages/twenty-docs/l/zh/developers/extend/apps/layout/page-layouts.mdx @@ -65,16 +65,15 @@ export default definePageLayout({ import { definePageLayoutTab, PageLayoutTabLayoutMode, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS, } from 'twenty-sdk/define'; import { HELLO_WORLD_FRONT_COMPONENT_UNIVERSAL_IDENTIFIER } from '../front-components/hello-world'; -const COMPANY_RECORD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIER = - '20202020-ab01-4001-8001-c0aba11c0100'; - export default definePageLayoutTab({ universalIdentifier: 'b1b2b3b4-b5b6-4000-8000-000000000001', pageLayoutUniversalIdentifier: - COMPANY_RECORD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIER, + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage + .universalIdentifier, title: 'Hello World', position: 1000, icon: 'IconWorld', @@ -97,6 +96,37 @@ export default definePageLayoutTab({ ### 关键点 * `pageLayoutUniversalIdentifier` 是**必需的**,并且必须在安装时指向一个已存在的页面布局——可以是标准的 Twenty 布局,也可以是由你自己的应用定义的布局。 当前不支持跨应用引用由其他已安装应用拥有的布局。 当父布局缺失时,安装会失败,并给出清晰的验证错误。 + +* 对于标准 Twenty 布局,从 `twenty-sdk/define` 导入标识符: + + ```ts + import { STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS } from 'twenty-sdk/define'; + + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.companyRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.personRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.opportunityRecordPage.universalIdentifier + // STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.noteRecordPage.universalIdentifier + // … + ``` + + 每个布局条目还会公开其 `tabs` 及其 `widgets`,因此你可以引用任意层级: + + ```ts + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.home.universalIdentifier + STANDARD_PAGE_LAYOUT_UNIVERSAL_IDENTIFIERS.taskRecordPage.tabs.home.widgets.fields.universalIdentifier + ``` + + 还提供了一个简短别名 `STANDARD_PAGE_LAYOUT`: + + ```ts + import { STANDARD_PAGE_LAYOUT } from 'twenty-sdk/define'; + + STANDARD_PAGE_LAYOUT.companyRecordPage.universalIdentifier; + ``` + * `widgets` 仅作用于此选项卡——它们引用[前端组件](/l/zh/developers/extend/apps/layout/front-components)、视图等,其方式与在 `definePageLayout` 中内联定义的小部件完全相同。 + * `position` 控制目标布局中相对于现有选项卡的排序。 选择一个取值,使你的选项卡相对于内置选项卡位于你想要的位置。 + * 当你只想向现有布局进行添加时,请使用此功能,而不是 `definePageLayout`。 当你拥有整个布局时,请使用 `definePageLayout`。