Ana içeriğe atla
Bir görünüm, bir nesnenin kayıtlarının nasıl görüntüleneceğine ilişkin kaydedilmiş bir yapılandırmadır: hangi alanların görüneceği, sıraları, görünür olup olmadıkları ve uygulanan tüm filtreler veya gruplar. Uygulamanızla birlikte önceden yapılandırılmış görünümler yayınlamak için defineView() kullanın — genellikle oluşturduğunuz her özel nesne için varsayılan bir indeks görünümü şeklinde olur.
src/views/example-view.ts
import { defineView, ViewKey } from 'twenty-sdk/define';
import { EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER } from '../objects/example-object';
import { NAME_FIELD_UNIVERSAL_IDENTIFIER } from '../objects/example-object';

export default defineView({
  universalIdentifier: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
  name: 'All example items',
  objectUniversalIdentifier: EXAMPLE_OBJECT_UNIVERSAL_IDENTIFIER,
  icon: 'IconList',
  key: ViewKey.INDEX,
  position: 0,
  fields: [
    {
      universalIdentifier: 'f926bdb7-6af7-4683-9a09-adbca56c29f0',
      fieldMetadataUniversalIdentifier: NAME_FIELD_UNIVERSAL_IDENTIFIER,
      position: 0,
      isVisible: true,
      size: 200,
    },
  ],
});

Önemli noktalar

  • objectUniversalIdentifier, bu görünümün hangi nesneye uygulanacağını belirtir. Bu, tanımladığınız özel bir nesne veya standart bir Twenty nesnesi olabilir.
  • key, görünüm türünü belirler — ViewKey.INDEX, nesne için ana liste görünümüdür.
  • fields, hangi sütunların görüneceğini ve hangi sırayla görüneceğini kontrol eder. Her alan bir fieldMetadataUniversalIdentifier öğesine referans verir.
  • Daha gelişmiş yapılandırmalar için filters, filterGroups, groups ve fieldGroups da tanımlayabilirsiniz.
  • position, aynı nesne için birden fazla görünüm olduğunda sıralamayı kontrol eder.

Filtreler

Bir görünüm, önceden uygulanmış filtrelerle gelebilir. Her filtrenin üç koordinatı vardır: filtrelenen alan, işleç (nasıl karşılaştırılacağı) ve değer (neyle karşılaştırılacağı). Üçünün de hizalı olması gerekir — bir alan türüne uygulanmayan bir işlecin kullanılması, senkronizasyon sırasında reddedilir.
import { ViewFilterOperand } from 'twenty-shared/types';

filters: [
  {
    universalIdentifier: '...',
    fieldMetadataUniversalIdentifier: STATUS_FIELD_UNIVERSAL_IDENTIFIER,
    operand: ViewFilterOperand.IS,
    value: ['ACTIVE'],
  },
],

Alan türüne göre desteklenen işleçler

Alan tipiDesteklenen işleçler
TEXT, EMAILS, FULL_NAME, ADDRESS, LINKS, PHONES, RAW_JSON, FILES, ACTOR, ARRAYCONTAINS, DOES_NOT_CONTAIN, IS_EMPTY, IS_NOT_EMPTY
ACTOR.source, ACTOR.workspaceMemberIdIS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
SELECTIS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
MULTI_SELECTCONTAINS, DOES_NOT_CONTAIN, IS_EMPTY, IS_NOT_EMPTY
RELATIONIS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
NUMBERIS, IS_NOT, GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL, IS_EMPTY, IS_NOT_EMPTY
RATINGIS, GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL, IS_EMPTY, IS_NOT_EMPTY
CURRENCY, CURRENCY.amountMicrosGREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL, IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
CURRENCY.currencyCodeIS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
DATE, DATE_TIMEIS, IS_RELATIVE, IS_IN_PAST, IS_IN_FUTURE, IS_TODAY, IS_BEFORE, IS_AFTER, IS_EMPTY, IS_NOT_EMPTY
BOOLEANIS
UUIDIS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY
TS_VECTORVECTOR_SEARCH
Benzer adlara sahip alan türleri tamamen farklı işleçler kullanabilir — buna SELECT ve MULTI_SELECT yaygın bir örnektir.

Her işleç için değer biçimi

value alanı her zaman JSON olarak serileştirilebilir bir değerdir, ancak beklenen biçim işlece bağlıdır:
İşleç ailesiDeğer biçimiÖrnek
SELECT üzerinde IS, IS_NOTseçenek anahtarları dizisi (metinler)['ACTIVE', 'PENDING']
MULTI_SELECT üzerinde CONTAINS, DOES_NOT_CONTAINseçenek anahtarları dizisi (metinler)['TAG_A']
RELATION üzerinde IS, IS_NOTkayıt kimlikleri dizisi (uuid’ler)['c5a1...']
metin benzeri alanlar üzerinde CONTAINS, DOES_NOT_CONTAINmetin'acme'
NUMBER üzerinde IS, IS_NOTmetin (değer)'5'
RATING / UUID üzerinde ISmetin (değer)'5'
GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUALmetin (sınır)'10'
DATE / DATE_TIME üzerinde IS, IS_BEFORE, IS_AFTERISO 8601 dizesi'2025-01-01T00:00:00Z'
IS_EMPTY, IS_NOT_EMPTYboş dize''
BOOLEAN üzerinde IS'true' veya 'false''true'

Görünümlerin kullanıcı arayüzünde görüntülenme şekli

Tek başına bir görünüm, kenar çubuğundan erişilebilir değildir. Orada görünmesini sağlamak için, türü VIEW olan ve görünümün universalIdentifier değerini işaret eden bir navigasyon menüsü öğesi ile eşleştirin. Bu, standart örüntüdür: her özel nesne genellikle varsayılan bir görünüm ve bunu açan bir kenar çubuğu girdisiyle birlikte sunulur.