defineView() لتوفير عروض مُعدّة مسبقًا مع تطبيقك — عادةً عرض فهرس افتراضي لكل كائن مخصص تقوم بإنشائه.
src/views/example-view.ts
النقاط الرئيسية
objectUniversalIdentifierيحدّد الكائن الذي ينطبق عليه هذا العرض. يمكن أن يكون كائنًا مخصصًا قمتَ بتعريفه أو كائن Twenty قياسيًا.key: ViewKey.INDEXيحدد العرض بوصفه عرض القائمة الرئيسي للكائن (ذلك الذي يفتحه عنصر التنقلOBJECT).- يتحكّم
fieldsفي الأعمدة التي تظهر وترتيبها. يشير كل حقل إلىfieldMetadataUniversalIdentifier. - يمكنك أيضًا تعريف
filtersوfilterGroupsوsortsوgroupsوfieldGroupsلتكوينات أكثر تقدمًا. - يتحكّم
positionفي الترتيب عند وجود عدة عروض لنفس الكائن.
الخصائص الاختيارية
| الخاصية | القيم | الوصف |
|---|---|---|
type | ViewType.TABLE (الوضع الافتراضي)، ViewType.KANBAN، ViewType.CALENDAR | كيفية ترتيب السجلات في الواجهة. (FIELDS_WIDGET / TABLE_WIDGET موجودة أيضًا ولكن يتم استخدامها داخليًا بواسطة عناصر واجهة تخطيط الصفحة.) |
visibility | ViewVisibility.WORKSPACE (الوضع الافتراضي)، ViewVisibility.UNLISTED | ما إذا كان العرض مُدرجًا على مستوى مساحة العمل بالكامل أو مخفيًا من أدوات الاختيار. |
openRecordIn | ViewOpenRecordIn.SIDE_PANEL (الوضع الافتراضي)، ViewOpenRecordIn.RECORD_PAGE | المكان الذي يتم فتح السجل فيه عند النقر عليه. |
sorts | { fieldMetadataUniversalIdentifier, direction: ViewSortDirection.ASC | DESC }[] | ترتيب الفرز الافتراضي. |
isCompact | boolean | عرض الصفوف بشكل مضغوط. |
mainGroupByFieldMetadataUniversalIdentifier + shouldHideEmptyGroups | — | تجميع السجلات (مثل أعمدة كانبان) حسب حقل معيّن. |
kanbanAggregateOperation, kanbanAggregateOperationFieldMetadataUniversalIdentifier, kanbanColumnWidth | AggregateOperations.* | تجميعات وأحجام أعمدة كانبان. |
calendarLayout, calendarFieldMetadataUniversalIdentifier | ViewCalendarLayout.DAY / WEEK / MONTH | عروض التقويم: التخطيط وحقل التاريخ الذي يحدد موضع السجلات. |
twenty-sdk/define.
الفلاتر
يمكن أن تأتي طريقة العرض مع عوامل تصفية مُطبَّقة مسبقًا. لكل عامل تصفية ثلاثة مكونات: الحقل الذي تُطبَّق عليه التصفية، والمعامل (كيفية المقارنة)، والقيمة (ما تتم المقارنة به). يجب أن تتطابق العناصر الثلاثة جميعًا — حيث سيتم رفض استخدام معامل لا ينطبق على نوع الحقل في وقت المزامنة.المعاملات المدعومة حسب نوع الحقل
| نوع الحقل | العوامل المدعومة |
|---|---|
TEXT, EMAILS, FULL_NAME, ADDRESS, LINKS, PHONES, RAW_JSON, FILES, ACTOR, ARRAY | CONTAINS, DOES_NOT_CONTAIN, IS_EMPTY, IS_NOT_EMPTY |
ACTOR.source, ACTOR.workspaceMemberId | IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY |
SELECT | IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY |
MULTI_SELECT | CONTAINS, DOES_NOT_CONTAIN, IS_EMPTY, IS_NOT_EMPTY |
RELATION | IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY |
NUMBER | IS, IS_NOT, GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL, IS_EMPTY, IS_NOT_EMPTY |
RATING | IS, GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL, IS_EMPTY, IS_NOT_EMPTY |
CURRENCY, CURRENCY.amountMicros | GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL, IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY |
CURRENCY.currencyCode | IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY |
DATE, DATE_TIME | IS, IS_RELATIVE, IS_IN_PAST, IS_IN_FUTURE, IS_TODAY, IS_BEFORE, IS_AFTER, IS_EMPTY, IS_NOT_EMPTY |
BOOLEAN | IS |
UUID | IS, IS_NOT, IS_EMPTY, IS_NOT_EMPTY |
TS_VECTOR | VECTOR_SEARCH |
يمكن لأنواع الحقول ذات الأسماء المتشابهة أن تستخدم عوامل مختلفة تمامًا — حيث يُعدSELECTوMULTI_SELECTحالة شائعة.
شكل القيمة لكل عامل
حقلvalue هو دائمًا قيمة قابلة للتسلسل إلى JSON، لكن شكله المتوقَّع يعتمد على العامل:
| عائلة العامل | شكل القيمة | مثال |
|---|---|---|
IS, IS_NOT على SELECT | مصفوفة من مفاتيح الخيارات (سلاسل نصية) | ['ACTIVE', 'PENDING'] |
CONTAINS, DOES_NOT_CONTAIN على MULTI_SELECT | مصفوفة من مفاتيح الخيارات (سلاسل نصية) | ['TAG_A'] |
IS, IS_NOT على RELATION | مصفوفة من معرّفات السجلات (uuids) | ['c5a1...'] |
CONTAINS, DOES_NOT_CONTAIN على الحقول المشابهة للنص | سلسلة نصية | 'acme' |
IS, IS_NOT على NUMBER | سلسلة نصية (القيمة) | '5' |
IS على RATING / UUID | سلسلة نصية (القيمة) | '5' |
GREATER_THAN_OR_EQUAL, LESS_THAN_OR_EQUAL | سلسلة نصية (الحد) | '10' |
IS, IS_BEFORE, IS_AFTER على DATE / DATE_TIME | سلسلة نصية بتنسيق ISO 8601 | '2025-01-01T00:00:00Z' |
IS_EMPTY, IS_NOT_EMPTY | سلسلة فارغة | '' |
IS على BOOLEAN | 'true' أو 'false' | 'true' |
كيفية ظهور العروض في واجهة المستخدم
لا يمكن الوصول إلى العرض بمفرده من الشريط الجانبي. لجعله يظهر هناك، قم بربطه مع عنصر قائمة تنقّل من النوعVIEW يشير إلى قيمة universalIdentifier الخاصة بالعرض. هذا هو النمط القياسي: عادةً ما يوفّر كل كائن مخصص عرضًا افتراضيًا + إدخالًا في الشريط الجانبي يفتحه.