feat(twenty-partners): website field + restructured partner & opportunity views (#21385)
## What Twenty Partners app — partner enrichment + a simpler, partner-centric view structure. **Partner** - New `website` (LINKS) field. - Icons for the opportunity `partner` relation and `matchStatus` fields (were the default "123"). **Partner views** (Partners folder → Applications / Validated / All) - **Applications**: grouped by validation stage, showing Application + Potential; columns Categories / Skills / Type of Team / Languages / Country / LinkedIn. - **Validated**: grouped by availability; columns harmonized with Applications, plus Partner Tier. - Wider Name / Categories columns. **Opportunity pipeline** (Pipeline folder, simplified by partner presence) - `OPP without partner` / `OPP with partner` tables (filtered on partner *is empty* / *is not empty*), `OPP all`, and a kanban **board** grouped by match status. - Sort by match status (uses the option position, i.e. pipeline order). - Removes the previous matching views (waiting-for-match, matches-overview, partner-deals). ## Version Patch bump `0.4.2 → 0.4.3` (relative to main).
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "twenty-partners",
|
||||
"version": "0.4.2",
|
||||
"version": "0.4.3",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": "^24.5.0",
|
||||
|
||||
+11
-9
@@ -5,9 +5,7 @@ export const DEFAULT_ROLE_UNIVERSAL_IDENTIFIER = 'ee18c3f3-ebe7-4c56-ad6d-aad555
|
||||
export const PARTNER_OBJECT_UNIVERSAL_IDENTIFIER = '39101b39-1c16-4148-9e82-45dc271bb90d';
|
||||
export const PARTNER_CONTENT_OBJECT_UNIVERSAL_IDENTIFIER = '65172140-d377-41c1-a2ae-190e96fb79dd';
|
||||
export const ALL_PARTNERS_VIEW_UNIVERSAL_IDENTIFIER = '379b11d5-44d5-476b-ba7d-31d5f515c9b4';
|
||||
export const ALL_MATCHED_DEALS_VIEW_UNIVERSAL_IDENTIFIER = '7a34da39-a8e1-44c7-88b4-91ceaa064920';
|
||||
export const PARTNERS_NAV_UNIVERSAL_IDENTIFIER = '3fe15ab5-e38b-4914-af17-2270b210aeb2';
|
||||
export const PARTNER_DEALS_NAV_UNIVERSAL_IDENTIFIER = 'c5e4ac36-bede-4f4b-bfe8-bbd09518abae';
|
||||
export const ON_OPP_AUTO_MATCH_FN_UNIVERSAL_IDENTIFIER = 'eb8d4d26-8103-4b66-9026-6a86556f7ca5';
|
||||
export const POST_INSTALL_FN_UNIVERSAL_IDENTIFIER = 'f92bad2e-5905-4757-96ee-af9869d4ca0c';
|
||||
export const ON_PARTNER_APPLICATION_CREATED_FN_UNIVERSAL_IDENTIFIER = '43888cce-a2aa-4100-afbc-59a4f978ce53';
|
||||
@@ -18,13 +16,17 @@ export const INTRO_SENT_AT_FIELD_UNIVERSAL_IDENTIFIER = 'fcf39b0c-0547-415e-806d
|
||||
export const TWENTY_PARTNER_OPS_ROLE_UNIVERSAL_IDENTIFIER = '3340ca65-863d-4cdc-95c9-8abdec13d0f6';
|
||||
export const PARTNER_ROLE_UNIVERSAL_IDENTIFIER = 'c3c1dc2e-1a08-4de5-abb7-2139b3d99343';
|
||||
|
||||
// Views (Task 3)
|
||||
export const WAITING_FOR_MATCH_VIEW_UNIVERSAL_IDENTIFIER = 'fe11e738-6bf3-4714-929c-51c76a3fd050';
|
||||
export const MATCHES_OVERVIEW_VIEW_UNIVERSAL_IDENTIFIER = '5a8fd51a-cf9e-4a6a-b1b4-b833b215fc1c';
|
||||
|
||||
// Nav items (Task 5)
|
||||
export const WAITING_FOR_MATCH_NAV_UNIVERSAL_IDENTIFIER = '00be7449-8927-47c8-a6a1-212d9106587f';
|
||||
export const MATCHES_OVERVIEW_NAV_UNIVERSAL_IDENTIFIER = '0cf349c9-fcbf-40f8-8e91-142c02bbde9c';
|
||||
// Opportunity pipeline views + nav (simplified to partner presence; UIDs reused
|
||||
// from the previous matching views so they update in place rather than re-create).
|
||||
export const OPPORTUNITIES_NO_PARTNER_VIEW_UNIVERSAL_IDENTIFIER = 'fe11e738-6bf3-4714-929c-51c76a3fd050';
|
||||
// Fresh id (the old matches-overview id '5a8fd51a…' kept its stale KANBAN type +
|
||||
// view groups on re-sync; a new id forces a clean TABLE recreate).
|
||||
export const OPPORTUNITIES_WITH_PARTNER_VIEW_UNIVERSAL_IDENTIFIER = '053449b0-3d13-400d-afc2-6182a75b6dff';
|
||||
export const OPPORTUNITIES_NO_PARTNER_NAV_UNIVERSAL_IDENTIFIER = '00be7449-8927-47c8-a6a1-212d9106587f';
|
||||
export const OPPORTUNITIES_WITH_PARTNER_NAV_UNIVERSAL_IDENTIFIER = '0cf349c9-fcbf-40f8-8e91-142c02bbde9c';
|
||||
// Kanban board of with-partner opportunities, grouped by match status.
|
||||
export const OPPORTUNITIES_WITH_PARTNER_BOARD_VIEW_UNIVERSAL_IDENTIFIER = 'a426c594-513d-4252-808f-3cf26d5532b9';
|
||||
export const OPPORTUNITIES_WITH_PARTNER_BOARD_NAV_UNIVERSAL_IDENTIFIER = '3226b314-15e5-4182-89fe-b33d341f5684';
|
||||
|
||||
// Page layout (Task 6)
|
||||
export const PARTNER_RECORD_PAGE_UNIVERSAL_IDENTIFIER = 'a888b39e-d64a-48ba-a044-d8cb685fad74';
|
||||
|
||||
+1
@@ -7,6 +7,7 @@ export default defineField({
|
||||
type: FieldType.SELECT,
|
||||
name: 'matchStatus',
|
||||
label: 'Match Status',
|
||||
icon: 'IconProgressCheck',
|
||||
isNullable: false,
|
||||
defaultValue: "'TO_BE_MATCHED'",
|
||||
options: [
|
||||
|
||||
+1
@@ -11,6 +11,7 @@ export default defineField({
|
||||
type: FieldType.RELATION,
|
||||
name: 'partner',
|
||||
label: 'Partner',
|
||||
icon: 'IconBuildingStore',
|
||||
isNullable: true,
|
||||
relationTargetObjectMetadataUniversalIdentifier: PARTNER_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
relationTargetFieldMetadataUniversalIdentifier: OPPORTUNITIES_ON_PARTNER_FIELD_ID,
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
import { NavigationMenuItemType, defineNavigationMenuItem } from 'twenty-sdk/define';
|
||||
|
||||
import {
|
||||
OPPORTUNITIES_WITH_PARTNER_BOARD_NAV_UNIVERSAL_IDENTIFIER,
|
||||
OPPORTUNITIES_WITH_PARTNER_BOARD_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
} from 'src/constants/universal-identifiers';
|
||||
|
||||
export default defineNavigationMenuItem({
|
||||
universalIdentifier: OPPORTUNITIES_WITH_PARTNER_BOARD_NAV_UNIVERSAL_IDENTIFIER,
|
||||
type: NavigationMenuItemType.VIEW,
|
||||
icon: 'IconLayoutKanban',
|
||||
position: 2,
|
||||
folderUniversalIdentifier: '0b2e499a-ae74-45e0-af08-243e19fc56aa',
|
||||
viewUniversalIdentifier: OPPORTUNITIES_WITH_PARTNER_BOARD_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
});
|
||||
+5
-5
@@ -1,15 +1,15 @@
|
||||
import { NavigationMenuItemType, defineNavigationMenuItem } from 'twenty-sdk/define';
|
||||
|
||||
import {
|
||||
MATCHES_OVERVIEW_NAV_UNIVERSAL_IDENTIFIER,
|
||||
MATCHES_OVERVIEW_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
OPPORTUNITIES_WITH_PARTNER_NAV_UNIVERSAL_IDENTIFIER,
|
||||
OPPORTUNITIES_WITH_PARTNER_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
} from 'src/constants/universal-identifiers';
|
||||
|
||||
export default defineNavigationMenuItem({
|
||||
universalIdentifier: MATCHES_OVERVIEW_NAV_UNIVERSAL_IDENTIFIER,
|
||||
universalIdentifier: OPPORTUNITIES_WITH_PARTNER_NAV_UNIVERSAL_IDENTIFIER,
|
||||
type: NavigationMenuItemType.VIEW,
|
||||
icon: 'IconLayoutKanban',
|
||||
icon: 'IconUserCheck',
|
||||
position: 1,
|
||||
folderUniversalIdentifier: '0b2e499a-ae74-45e0-af08-243e19fc56aa',
|
||||
viewUniversalIdentifier: MATCHES_OVERVIEW_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
viewUniversalIdentifier: OPPORTUNITIES_WITH_PARTNER_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
});
|
||||
+5
-5
@@ -1,15 +1,15 @@
|
||||
import { NavigationMenuItemType, defineNavigationMenuItem } from 'twenty-sdk/define';
|
||||
|
||||
import {
|
||||
WAITING_FOR_MATCH_NAV_UNIVERSAL_IDENTIFIER,
|
||||
WAITING_FOR_MATCH_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
OPPORTUNITIES_NO_PARTNER_NAV_UNIVERSAL_IDENTIFIER,
|
||||
OPPORTUNITIES_NO_PARTNER_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
} from 'src/constants/universal-identifiers';
|
||||
|
||||
export default defineNavigationMenuItem({
|
||||
universalIdentifier: WAITING_FOR_MATCH_NAV_UNIVERSAL_IDENTIFIER,
|
||||
universalIdentifier: OPPORTUNITIES_NO_PARTNER_NAV_UNIVERSAL_IDENTIFIER,
|
||||
type: NavigationMenuItemType.VIEW,
|
||||
icon: 'IconClockHour4',
|
||||
icon: 'IconUserOff',
|
||||
position: 0,
|
||||
folderUniversalIdentifier: '0b2e499a-ae74-45e0-af08-243e19fc56aa',
|
||||
viewUniversalIdentifier: WAITING_FOR_MATCH_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
viewUniversalIdentifier: OPPORTUNITIES_NO_PARTNER_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
});
|
||||
+1
-1
@@ -9,7 +9,7 @@ export default defineNavigationMenuItem({
|
||||
universalIdentifier: PARTNER_APPLICATIONS_NAV_UNIVERSAL_IDENTIFIER,
|
||||
type: NavigationMenuItemType.VIEW,
|
||||
icon: 'IconUserPlus',
|
||||
position: 1,
|
||||
position: 0,
|
||||
folderUniversalIdentifier: '857be3b5-82c6-45f7-b546-e20a8a97be8d',
|
||||
viewUniversalIdentifier: PARTNER_APPLICATIONS_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
});
|
||||
|
||||
-15
@@ -1,15 +0,0 @@
|
||||
import { NavigationMenuItemType, defineNavigationMenuItem } from 'twenty-sdk/define';
|
||||
|
||||
import {
|
||||
ALL_MATCHED_DEALS_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
PARTNER_DEALS_NAV_UNIVERSAL_IDENTIFIER,
|
||||
} from 'src/constants/universal-identifiers';
|
||||
|
||||
export default defineNavigationMenuItem({
|
||||
universalIdentifier: PARTNER_DEALS_NAV_UNIVERSAL_IDENTIFIER,
|
||||
type: NavigationMenuItemType.VIEW,
|
||||
icon: 'IconHandshake',
|
||||
position: 2,
|
||||
folderUniversalIdentifier: '0b2e499a-ae74-45e0-af08-243e19fc56aa',
|
||||
viewUniversalIdentifier: ALL_MATCHED_DEALS_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
});
|
||||
+1
-1
@@ -9,7 +9,7 @@ export default defineNavigationMenuItem({
|
||||
universalIdentifier: VALIDATED_PARTNERS_NAV_UNIVERSAL_IDENTIFIER,
|
||||
type: NavigationMenuItemType.VIEW,
|
||||
icon: 'IconCircleCheck',
|
||||
position: 0,
|
||||
position: 1,
|
||||
folderUniversalIdentifier: '857be3b5-82c6-45f7-b546-e20a8a97be8d',
|
||||
viewUniversalIdentifier: VALIDATED_PARTNERS_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
});
|
||||
|
||||
@@ -444,6 +444,14 @@ export default defineObject({
|
||||
icon: 'IconBrandLinkedin',
|
||||
isNullable: true,
|
||||
},
|
||||
{
|
||||
universalIdentifier: '111eb60a-6e5b-4d0f-ac0d-31e7e0ddff97',
|
||||
type: FieldType.LINKS,
|
||||
name: 'website',
|
||||
label: 'Website',
|
||||
icon: 'IconWorldWww',
|
||||
isNullable: true,
|
||||
},
|
||||
{
|
||||
universalIdentifier: '40d730e3-2785-45c8-aa5f-cc724b1b08e0',
|
||||
type: FieldType.LINKS,
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
import {
|
||||
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
|
||||
ViewFilterOperand,
|
||||
ViewType,
|
||||
defineView,
|
||||
} from 'twenty-sdk/define';
|
||||
|
||||
import {
|
||||
ALL_MATCHED_DEALS_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER,
|
||||
} from 'src/constants/universal-identifiers';
|
||||
|
||||
// Opportunities where a partner is engaged (MATCHED or later). Distinct from
|
||||
// Matches overview, which also includes AUTO_MATCH (in-flight, no partner yet).
|
||||
export default defineView({
|
||||
universalIdentifier: ALL_MATCHED_DEALS_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
name: 'All matched deals',
|
||||
objectUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.opportunity.universalIdentifier,
|
||||
type: ViewType.TABLE,
|
||||
fields: [
|
||||
{ universalIdentifier: '76f6aea5-0e0b-4787-84f0-430d0799e913', fieldMetadataUniversalIdentifier: '20202020-8609-4f65-a2d9-44009eb422b5', position: 0, isVisible: true },
|
||||
{ universalIdentifier: 'd9862d49-eff8-4103-9f48-a193cf8e1de2', fieldMetadataUniversalIdentifier: MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER, position: 1, isVisible: true },
|
||||
{ universalIdentifier: '91c42a01-4ec8-4527-b9ac-9bdeb58e7243', fieldMetadataUniversalIdentifier: 'd9eeacaa-2f9e-44cc-b5f6-5e1526256d49', position: 2, isVisible: true },
|
||||
{ universalIdentifier: 'c9689260-86f5-4e19-a86c-7afc95d4d6fe', fieldMetadataUniversalIdentifier: 'cc6b8a59-f860-493f-8b9a-f138c078fbf1', position: 3, isVisible: true },
|
||||
{ universalIdentifier: 'd51c2737-26f8-4f27-b078-7bb0cf58c662', fieldMetadataUniversalIdentifier: 'fcf39b0c-0547-415e-806d-b238131ad7cc', position: 4, isVisible: true },
|
||||
],
|
||||
filters: [
|
||||
{
|
||||
universalIdentifier: '71de9b3a-e59b-4baf-99e6-84fe01e037ee',
|
||||
fieldMetadataUniversalIdentifier: MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER,
|
||||
// See filter-syntax note in Task 8.1.
|
||||
operand: ViewFilterOperand.IS,
|
||||
value: ['MATCHED', 'INTRODUCED_TO_A_PARTNER', 'WORKING_WITH_A_PARTNER', 'IMPLEMENTING', 'WON', 'RECONNECT_LATER', 'LOST'],
|
||||
},
|
||||
],
|
||||
});
|
||||
@@ -1,5 +1,6 @@
|
||||
import {
|
||||
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
|
||||
ViewSortDirection,
|
||||
ViewType,
|
||||
defineView,
|
||||
} from 'twenty-sdk/define';
|
||||
@@ -9,23 +10,33 @@ import {
|
||||
MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER,
|
||||
} from 'src/constants/universal-identifiers';
|
||||
|
||||
// Default Opportunities view replacement. Surfaces matchStatus + partner alongside
|
||||
// the standard Opportunity columns. partnerEligible column was dropped as part of
|
||||
// the match-status redesign.
|
||||
// All opportunities, every stage. Kept last in the Pipeline folder; same column set
|
||||
// as the without/with-partner views for consistent reading.
|
||||
export default defineView({
|
||||
universalIdentifier: ALL_OPPORTUNITIES_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
name: 'Opportunities',
|
||||
name: 'OPP all',
|
||||
icon: 'IconTargetArrow',
|
||||
objectUniversalIdentifier:
|
||||
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.opportunity.universalIdentifier,
|
||||
type: ViewType.TABLE,
|
||||
position: 3,
|
||||
fields: [
|
||||
{ universalIdentifier: '62844317-546c-4b65-a292-917bf0b5bfce', fieldMetadataUniversalIdentifier: '20202020-8609-4f65-a2d9-44009eb422b5', position: 0, isVisible: true },
|
||||
{ universalIdentifier: '295a5b86-0b37-475a-8645-26f7e7a3dd0a', fieldMetadataUniversalIdentifier: '20202020-cbac-457e-b565-adece5fc815f', position: 1, isVisible: true },
|
||||
{ universalIdentifier: 'ce684df4-4456-427c-b33b-38a34368e380', fieldMetadataUniversalIdentifier: '20202020-6f76-477d-8551-28cd65b2b4b9', position: 2, isVisible: true },
|
||||
{ universalIdentifier: '9f72d1ce-7c39-418c-95cb-480d1b176821', fieldMetadataUniversalIdentifier: 'd9eeacaa-2f9e-44cc-b5f6-5e1526256d49', position: 3, isVisible: true },
|
||||
{ universalIdentifier: '5db9ee26-8688-4a5c-9fe8-f76b41d8e80b', fieldMetadataUniversalIdentifier: MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER, position: 4, isVisible: true },
|
||||
{ universalIdentifier: '3727d213-e3f5-43c7-ab05-b0fb2f211273', fieldMetadataUniversalIdentifier: '20202020-527e-44d6-b1ac-c4158d307b97', position: 5, isVisible: true },
|
||||
{ universalIdentifier: 'c9ad9056-fd3a-448c-b4dc-e95e0c5d22e9', fieldMetadataUniversalIdentifier: '20202020-a63e-4a62-8e63-42a51828f831', position: 6, isVisible: true },
|
||||
// Name
|
||||
{ universalIdentifier: '62844317-546c-4b65-a292-917bf0b5bfce', fieldMetadataUniversalIdentifier: '20202020-8609-4f65-a2d9-44009eb422b5', position: 0, isVisible: true, size: 200 },
|
||||
// Partner
|
||||
{ universalIdentifier: '9f72d1ce-7c39-418c-95cb-480d1b176821', fieldMetadataUniversalIdentifier: 'd9eeacaa-2f9e-44cc-b5f6-5e1526256d49', position: 1, isVisible: true, size: 200 },
|
||||
// Amount (fresh view-field UID: the reused one still pointed at a removed column)
|
||||
{ universalIdentifier: 'aa57f807-48aa-4a63-b939-434342ee4bdd', fieldMetadataUniversalIdentifier: '20202020-583e-4642-8533-db761d5fa82f', position: 2, isVisible: true, size: 140 },
|
||||
// Match status
|
||||
{ universalIdentifier: '5db9ee26-8688-4a5c-9fe8-f76b41d8e80b', fieldMetadataUniversalIdentifier: MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER, position: 3, isVisible: true, size: 200 },
|
||||
],
|
||||
// SELECT fields sort by option position, so this orders rows along the match-status
|
||||
// pipeline (To Be Matched → … → Won → Lost), not alphabetically.
|
||||
sorts: [
|
||||
{
|
||||
universalIdentifier: 'e7adc9b2-4294-408b-83a0-cece6833ba12',
|
||||
fieldMetadataUniversalIdentifier: MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER,
|
||||
direction: ViewSortDirection.ASC,
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
@@ -5,19 +5,25 @@ import {
|
||||
PARTNER_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
} from 'src/constants/universal-identifiers';
|
||||
|
||||
// Every partner, all stages — kept last in the Partners folder. No Last Match column.
|
||||
export default defineView({
|
||||
universalIdentifier: ALL_PARTNERS_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
name: 'Partners',
|
||||
name: 'All',
|
||||
objectUniversalIdentifier: PARTNER_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
type: ViewType.TABLE,
|
||||
position: 2,
|
||||
fields: [
|
||||
{ universalIdentifier: '21afcc69-09c5-42eb-a609-26c062de3bd3', fieldMetadataUniversalIdentifier: 'a0000001-0000-4000-8000-000000000001', position: 0, isVisible: true },
|
||||
// Name (label identifier)
|
||||
{ universalIdentifier: '21afcc69-09c5-42eb-a609-26c062de3bd3', fieldMetadataUniversalIdentifier: 'a0000001-0000-4000-8000-000000000001', position: 0, isVisible: true, size: 200 },
|
||||
// Validation Stage
|
||||
{ universalIdentifier: '529912f0-38fb-4821-92d3-8a0a68b9f340', fieldMetadataUniversalIdentifier: '2ca9856f-f54a-4326-9ff3-668fd7da0b50', position: 1, isVisible: true },
|
||||
// Availability
|
||||
{ universalIdentifier: '68c6b96d-8c3d-4a3e-b4cd-3751d035b085', fieldMetadataUniversalIdentifier: 'a0000004-0000-4000-8000-000000000004', position: 2, isVisible: true },
|
||||
// Languages Spoken
|
||||
{ universalIdentifier: '8862e4a5-525a-4a0c-8381-93ff0d01ccf0', fieldMetadataUniversalIdentifier: 'a0000007-0000-4000-8000-000000000007', position: 3, isVisible: true },
|
||||
{ universalIdentifier: '4ebe0b9d-0c2d-4416-b187-150b02473a01', fieldMetadataUniversalIdentifier: 'a0000010-0000-4000-8000-000000000010', position: 4, isVisible: true },
|
||||
{ universalIdentifier: '52408b5f-5e13-4e3c-af2d-ce50033ec126', fieldMetadataUniversalIdentifier: '560503de-6330-4c1d-af97-a8dee125f2ad', position: 5, isVisible: true },
|
||||
{ universalIdentifier: '34d58668-a689-42e2-9aff-3fee315092d6', fieldMetadataUniversalIdentifier: '500021ad-ca42-4fd3-8727-392dd26b722a', position: 6, isVisible: true },
|
||||
// Region
|
||||
{ universalIdentifier: '52408b5f-5e13-4e3c-af2d-ce50033ec126', fieldMetadataUniversalIdentifier: '560503de-6330-4c1d-af97-a8dee125f2ad', position: 4, isVisible: true },
|
||||
// Categories (partnerScope)
|
||||
{ universalIdentifier: '34d58668-a689-42e2-9aff-3fee315092d6', fieldMetadataUniversalIdentifier: '500021ad-ca42-4fd3-8727-392dd26b722a', position: 5, isVisible: true, size: 260 },
|
||||
],
|
||||
});
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
import {
|
||||
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
|
||||
ViewType,
|
||||
defineView,
|
||||
} from 'twenty-sdk/define';
|
||||
|
||||
import {
|
||||
MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER,
|
||||
MATCHES_OVERVIEW_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
} from 'src/constants/universal-identifiers';
|
||||
|
||||
// Full matching funnel: a Kanban grouped by matchStatus, no filter (every
|
||||
// opportunity appears in its matchStatus column).
|
||||
export default defineView({
|
||||
universalIdentifier: MATCHES_OVERVIEW_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
name: 'Matches overview',
|
||||
icon: 'IconLayoutKanban',
|
||||
objectUniversalIdentifier:
|
||||
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.opportunity.universalIdentifier,
|
||||
type: ViewType.KANBAN,
|
||||
mainGroupByFieldMetadataUniversalIdentifier: MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER,
|
||||
fields: [
|
||||
{ universalIdentifier: '7a6403c1-7ab9-4c3a-b833-3c028d43140e', fieldMetadataUniversalIdentifier: STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.opportunity.fields.name.universalIdentifier, position: 0, isVisible: true },
|
||||
{ universalIdentifier: '2e718b4b-fde8-4839-9cdf-deb09db0e6b6', fieldMetadataUniversalIdentifier: 'd9eeacaa-2f9e-44cc-b5f6-5e1526256d49', position: 1, isVisible: true },
|
||||
{ universalIdentifier: '5ae8805c-3d71-4ccc-a2be-38368f32e3e1', fieldMetadataUniversalIdentifier: MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER, position: 2, isVisible: true },
|
||||
{ universalIdentifier: 'cb4e5d2b-7003-4f30-874c-acda310b250c', fieldMetadataUniversalIdentifier: 'fcf39b0c-0547-415e-806d-b238131ad7cc', position: 3, isVisible: true },
|
||||
{ universalIdentifier: '0fc87e70-7aa1-4c85-9152-d0edff8ae8a4', fieldMetadataUniversalIdentifier: 'cc6b8a59-f860-493f-8b9a-f138c078fbf1', position: 4, isVisible: true },
|
||||
],
|
||||
});
|
||||
+59
@@ -0,0 +1,59 @@
|
||||
import {
|
||||
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
|
||||
ViewFilterOperand,
|
||||
ViewType,
|
||||
defineView,
|
||||
} from 'twenty-sdk/define';
|
||||
|
||||
import {
|
||||
MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER,
|
||||
OPPORTUNITIES_WITH_PARTNER_BOARD_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
} from 'src/constants/universal-identifiers';
|
||||
|
||||
// Kanban board of partnered opportunities, one column per match status (in pipeline
|
||||
// order). Same with-partner filter as the table view. Empty columns (e.g. the pre-match
|
||||
// statuses, which never apply to a partnered opp) are left to the per-view "Hide empty
|
||||
// groups" toggle — we don't hide columns declaratively (brittle long-term).
|
||||
export default defineView({
|
||||
universalIdentifier: OPPORTUNITIES_WITH_PARTNER_BOARD_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
name: 'OPP with partner (board)',
|
||||
icon: 'IconLayoutKanban',
|
||||
objectUniversalIdentifier:
|
||||
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.opportunity.universalIdentifier,
|
||||
type: ViewType.KANBAN,
|
||||
position: 2,
|
||||
mainGroupByFieldMetadataUniversalIdentifier: MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER,
|
||||
// Kanban columns — all visible. A manifest-defined kanban does not auto-create its
|
||||
// groups, so they must be declared (otherwise the board renders blank).
|
||||
groups: [
|
||||
{ universalIdentifier: '01361796-2bb6-4cd0-82ec-ac71f81468c9', fieldValue: 'TO_BE_MATCHED', position: 0, isVisible: true },
|
||||
{ universalIdentifier: 'cc6a04b2-d5f9-411d-b344-a78a114ffe0a', fieldValue: 'MANUAL_MATCH', position: 1, isVisible: true },
|
||||
{ universalIdentifier: '4c2be421-0626-49db-807c-3b2b324bf61d', fieldValue: 'AUTO_MATCH', position: 2, isVisible: true },
|
||||
{ universalIdentifier: '09dae3dc-ac9a-44dc-a875-7e7a1f127537', fieldValue: 'MATCHED', position: 3, isVisible: true },
|
||||
{ universalIdentifier: 'ccfc2d1f-554b-4152-8eed-5759b4820a99', fieldValue: 'INTRODUCED_TO_A_PARTNER', position: 4, isVisible: true },
|
||||
{ universalIdentifier: '04bf9e33-8cda-487c-bfdf-573cbe658bda', fieldValue: 'WORKING_WITH_A_PARTNER', position: 5, isVisible: true },
|
||||
{ universalIdentifier: 'e966a846-7f1b-4091-a50b-473387fcd009', fieldValue: 'IMPLEMENTING', position: 6, isVisible: true },
|
||||
{ universalIdentifier: 'dd3f67b8-5468-4345-9c7e-1d61fd12b3e3', fieldValue: 'WON', position: 7, isVisible: true },
|
||||
{ universalIdentifier: '6abcc9a5-eed0-48bd-bb00-fc06283429ad', fieldValue: 'RECONNECT_LATER', position: 8, isVisible: true },
|
||||
{ universalIdentifier: '985c64fc-8694-4f92-b183-1deaa287a43e', fieldValue: 'LOST', position: 9, isVisible: true },
|
||||
],
|
||||
fields: [
|
||||
// Name (opportunity)
|
||||
{ universalIdentifier: '9d8ee0ee-1b32-4c42-b968-7c18a0e90b25', fieldMetadataUniversalIdentifier: '20202020-8609-4f65-a2d9-44009eb422b5', position: 0, isVisible: true },
|
||||
// Partner
|
||||
{ universalIdentifier: '619d7e2f-05db-4c40-8fa4-87fa30a8e8b0', fieldMetadataUniversalIdentifier: 'd9eeacaa-2f9e-44cc-b5f6-5e1526256d49', position: 1, isVisible: true },
|
||||
// Amount
|
||||
{ universalIdentifier: 'c19fb75d-0b41-4997-920f-e9bfd1d01e06', fieldMetadataUniversalIdentifier: '20202020-583e-4642-8533-db761d5fa82f', position: 2, isVisible: true },
|
||||
// Match status — hidden on the card (it's already the column), kept only so the
|
||||
// group-by field is part of the view.
|
||||
{ universalIdentifier: '5cb6903b-3220-4c96-a977-5a35d0136f33', fieldMetadataUniversalIdentifier: MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER, position: 3, isVisible: false },
|
||||
],
|
||||
filters: [
|
||||
{
|
||||
universalIdentifier: 'b46f2c0b-c37e-41a2-981a-fd642687cf4d',
|
||||
fieldMetadataUniversalIdentifier: 'd9eeacaa-2f9e-44cc-b5f6-5e1526256d49',
|
||||
operand: ViewFilterOperand.IS_NOT_EMPTY,
|
||||
value: '',
|
||||
},
|
||||
],
|
||||
});
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
import {
|
||||
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
|
||||
ViewFilterOperand,
|
||||
ViewSortDirection,
|
||||
ViewType,
|
||||
defineView,
|
||||
} from 'twenty-sdk/define';
|
||||
|
||||
import {
|
||||
MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER,
|
||||
OPPORTUNITIES_WITH_PARTNER_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
} from 'src/constants/universal-identifiers';
|
||||
|
||||
// Opportunities that already have a partner assigned. Same simple column set as the
|
||||
// other pipeline views.
|
||||
export default defineView({
|
||||
universalIdentifier: OPPORTUNITIES_WITH_PARTNER_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
name: 'OPP with partner',
|
||||
icon: 'IconUserCheck',
|
||||
objectUniversalIdentifier:
|
||||
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.opportunity.universalIdentifier,
|
||||
type: ViewType.TABLE,
|
||||
position: 1,
|
||||
fields: [
|
||||
// Name
|
||||
{ universalIdentifier: 'f29e2d21-f050-4637-b1f2-9418c6768246', fieldMetadataUniversalIdentifier: '20202020-8609-4f65-a2d9-44009eb422b5', position: 0, isVisible: true, size: 200 },
|
||||
// Partner
|
||||
{ universalIdentifier: 'a4beb55d-10f8-4314-9552-9526494447d7', fieldMetadataUniversalIdentifier: 'd9eeacaa-2f9e-44cc-b5f6-5e1526256d49', position: 1, isVisible: true, size: 200 },
|
||||
// Amount
|
||||
{ universalIdentifier: '87e8d97a-0782-48b5-b397-2f9165ecebf0', fieldMetadataUniversalIdentifier: '20202020-583e-4642-8533-db761d5fa82f', position: 2, isVisible: true, size: 140 },
|
||||
// Match status
|
||||
{ universalIdentifier: 'f2a237c1-1300-4648-a4ef-012ffa2996d7', fieldMetadataUniversalIdentifier: MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER, position: 3, isVisible: true, size: 200 },
|
||||
],
|
||||
// SELECT fields sort by option position, so this orders rows along the match-status
|
||||
// pipeline (To Be Matched → … → Won → Lost), not alphabetically.
|
||||
sorts: [
|
||||
{
|
||||
universalIdentifier: '418705f0-435f-4800-83b0-481edfea0933',
|
||||
fieldMetadataUniversalIdentifier: MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER,
|
||||
direction: ViewSortDirection.ASC,
|
||||
},
|
||||
],
|
||||
filters: [
|
||||
{
|
||||
universalIdentifier: '3cc1817a-84bb-4eb5-8755-bc72f81b202d',
|
||||
fieldMetadataUniversalIdentifier: 'd9eeacaa-2f9e-44cc-b5f6-5e1526256d49',
|
||||
operand: ViewFilterOperand.IS_NOT_EMPTY,
|
||||
value: '',
|
||||
},
|
||||
],
|
||||
});
|
||||
+51
@@ -0,0 +1,51 @@
|
||||
import {
|
||||
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
|
||||
ViewFilterOperand,
|
||||
ViewSortDirection,
|
||||
ViewType,
|
||||
defineView,
|
||||
} from 'twenty-sdk/define';
|
||||
|
||||
import {
|
||||
MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER,
|
||||
OPPORTUNITIES_NO_PARTNER_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
} from 'src/constants/universal-identifiers';
|
||||
|
||||
// Opportunities with no partner assigned yet. Deliberately simple — the matching
|
||||
// system will be reworked later, so the pipeline is just split by partner presence.
|
||||
export default defineView({
|
||||
universalIdentifier: OPPORTUNITIES_NO_PARTNER_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
name: 'OPP without partner',
|
||||
icon: 'IconUserOff',
|
||||
objectUniversalIdentifier:
|
||||
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.opportunity.universalIdentifier,
|
||||
type: ViewType.TABLE,
|
||||
position: 0,
|
||||
fields: [
|
||||
// Name
|
||||
{ universalIdentifier: '8af65247-8003-4d24-be3d-4b73356045d8', fieldMetadataUniversalIdentifier: '20202020-8609-4f65-a2d9-44009eb422b5', position: 0, isVisible: true, size: 200 },
|
||||
// Partner (empty here, kept for a consistent column set across the pipeline)
|
||||
{ universalIdentifier: '3e89e8f2-6ee2-4258-a07d-3607f6238fd1', fieldMetadataUniversalIdentifier: 'd9eeacaa-2f9e-44cc-b5f6-5e1526256d49', position: 1, isVisible: true, size: 200 },
|
||||
// Amount
|
||||
{ universalIdentifier: 'de63b508-8fc8-4696-8155-3511745db9b6', fieldMetadataUniversalIdentifier: '20202020-583e-4642-8533-db761d5fa82f', position: 2, isVisible: true, size: 140 },
|
||||
// Match status
|
||||
{ universalIdentifier: 'c63c13d2-a332-4982-b50d-707cfa6b54b0', fieldMetadataUniversalIdentifier: MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER, position: 3, isVisible: true, size: 200 },
|
||||
],
|
||||
// SELECT fields sort by option position, so this orders rows along the match-status
|
||||
// pipeline (To Be Matched → … → Won → Lost), not alphabetically.
|
||||
sorts: [
|
||||
{
|
||||
universalIdentifier: '6e6df89a-b614-43dc-8cb4-5746960986b9',
|
||||
fieldMetadataUniversalIdentifier: MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER,
|
||||
direction: ViewSortDirection.ASC,
|
||||
},
|
||||
],
|
||||
filters: [
|
||||
{
|
||||
universalIdentifier: 'd8dfd2de-c411-487a-ab9e-7abf81d4e4ef',
|
||||
fieldMetadataUniversalIdentifier: 'd9eeacaa-2f9e-44cc-b5f6-5e1526256d49',
|
||||
operand: ViewFilterOperand.IS_EMPTY,
|
||||
value: '',
|
||||
},
|
||||
],
|
||||
});
|
||||
+34
-8
@@ -5,26 +5,52 @@ import {
|
||||
PARTNER_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
} from 'src/constants/universal-identifiers';
|
||||
|
||||
// Partners still in the application stage (not yet validated).
|
||||
// Early-pipeline partners — grouped by Validation Stage, showing only the
|
||||
// Application and Potential partner stages. Later stages are declared as hidden
|
||||
// groups so their (empty) sections never render.
|
||||
export default defineView({
|
||||
universalIdentifier: PARTNER_APPLICATIONS_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
name: 'Partner applications',
|
||||
name: 'Applications',
|
||||
icon: 'IconUserPlus',
|
||||
objectUniversalIdentifier: PARTNER_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
type: ViewType.TABLE,
|
||||
position: 1,
|
||||
position: 0,
|
||||
// Group by Validation Stage so the stage becomes the section header — this is
|
||||
// why the Validation Stage column is dropped below (it's redundant).
|
||||
mainGroupByFieldMetadataUniversalIdentifier: '2ca9856f-f54a-4326-9ff3-668fd7da0b50',
|
||||
// Column widths (size): Name + Categories are widened for readability; Skills and
|
||||
// Languages get a little extra room since they hold several chips.
|
||||
fields: [
|
||||
{ universalIdentifier: 'b4f505d7-3849-4a74-a27f-1c91733702b5', fieldMetadataUniversalIdentifier: 'a0000001-0000-4000-8000-000000000001', position: 0, isVisible: true },
|
||||
{ universalIdentifier: '8a39e510-e533-4cd7-9b65-5e16b5f773d0', fieldMetadataUniversalIdentifier: '2ca9856f-f54a-4326-9ff3-668fd7da0b50', position: 1, isVisible: true },
|
||||
{ universalIdentifier: 'b92d7fd4-4a24-4333-89fe-5d726634d428', fieldMetadataUniversalIdentifier: 'd4fa6461-37b6-49ee-9181-dd482e74a70b', position: 2, isVisible: true },
|
||||
{ universalIdentifier: '2c34a120-b0f8-421b-9546-6483f1202d9f', fieldMetadataUniversalIdentifier: 'a77d7fa6-c398-47db-af0f-036a5c719f20', position: 3, isVisible: true },
|
||||
// Name (label identifier)
|
||||
{ universalIdentifier: 'b4f505d7-3849-4a74-a27f-1c91733702b5', fieldMetadataUniversalIdentifier: 'a0000001-0000-4000-8000-000000000001', position: 0, isVisible: true, size: 200 },
|
||||
// Categories (partnerScope)
|
||||
{ universalIdentifier: '2aff884c-5212-4ef7-9449-9be48ad1406c', fieldMetadataUniversalIdentifier: '500021ad-ca42-4fd3-8727-392dd26b722a', position: 1, isVisible: true, size: 260 },
|
||||
// Skills
|
||||
{ universalIdentifier: '851017c4-fb46-4574-b912-189b9f229f2e', fieldMetadataUniversalIdentifier: '6f260cc0-a860-41e6-ad40-a2ef32ecffbe', position: 2, isVisible: true, size: 200 },
|
||||
// Languages Spoken
|
||||
{ universalIdentifier: '02f31b03-bdda-4867-9bca-9e3378587120', fieldMetadataUniversalIdentifier: 'a0000007-0000-4000-8000-000000000007', position: 3, isVisible: true, size: 200 },
|
||||
// Country
|
||||
{ universalIdentifier: '2c34a120-b0f8-421b-9546-6483f1202d9f', fieldMetadataUniversalIdentifier: 'a77d7fa6-c398-47db-af0f-036a5c719f20', position: 4, isVisible: true },
|
||||
// LinkedIn
|
||||
{ universalIdentifier: 'bda8c170-a2b2-43d9-8a50-3bd51cccdf57', fieldMetadataUniversalIdentifier: '640bbf33-45d7-4174-a862-dbe611ab8d1a', position: 5, isVisible: true },
|
||||
// Type of Team (kept last)
|
||||
{ universalIdentifier: '1dcf30f4-f7f3-41ce-a1af-f4b1d05eb3d6', fieldMetadataUniversalIdentifier: 'a451e557-a488-470a-8b35-6f9b8cfb1a10', position: 6, isVisible: true },
|
||||
],
|
||||
// Application + Potential are visible; later stages are hidden so empty group
|
||||
// sections never show.
|
||||
groups: [
|
||||
{ universalIdentifier: '2441704f-c832-4ca4-b4ab-0e4c87102fa9', fieldValue: 'APPLICATION', position: 0, isVisible: true },
|
||||
{ universalIdentifier: '109b2df2-a3c2-4ed4-b84a-8ca1c846a6ae', fieldValue: 'POTENTIAL', position: 1, isVisible: true },
|
||||
{ universalIdentifier: 'e8bd3914-84b2-4b2c-a0be-118f36868242', fieldValue: 'VALIDATED', position: 2, isVisible: false },
|
||||
{ universalIdentifier: 'c5d3f331-11b2-4bc5-9c0d-0a64a5639587', fieldValue: 'FORMER', position: 3, isVisible: false },
|
||||
{ universalIdentifier: 'e1e5bec5-6d1f-4d0f-9807-5507db3759fc', fieldValue: 'REJECTED', position: 4, isVisible: false },
|
||||
],
|
||||
filters: [
|
||||
{
|
||||
universalIdentifier: '210deb57-cfca-4086-b9da-ca346fbd3126',
|
||||
fieldMetadataUniversalIdentifier: '2ca9856f-f54a-4326-9ff3-668fd7da0b50',
|
||||
operand: ViewFilterOperand.IS,
|
||||
value: ['APPLICATION'],
|
||||
value: ['APPLICATION', 'POTENTIAL'],
|
||||
},
|
||||
],
|
||||
});
|
||||
|
||||
@@ -6,20 +6,40 @@ import {
|
||||
} from 'src/constants/universal-identifiers';
|
||||
|
||||
// Validated partners — serves both partner intros and the public website list.
|
||||
// Columns mirror the Applications view (for consistent reading) plus Partner Tier;
|
||||
// Availability is dropped as a column because the view is grouped by it.
|
||||
export default defineView({
|
||||
universalIdentifier: VALIDATED_PARTNERS_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
name: 'Validated partners',
|
||||
name: 'Validated',
|
||||
icon: 'IconCircleCheck',
|
||||
objectUniversalIdentifier: PARTNER_OBJECT_UNIVERSAL_IDENTIFIER,
|
||||
type: ViewType.TABLE,
|
||||
position: 0,
|
||||
position: 1,
|
||||
// Group by Availability so unavailable partners are immediately visible as
|
||||
// their own section (hence no Availability column below).
|
||||
mainGroupByFieldMetadataUniversalIdentifier: 'a0000004-0000-4000-8000-000000000004',
|
||||
groups: [
|
||||
{ universalIdentifier: '1e23a5c8-a46d-4738-a610-d5a37ba64d08', fieldValue: 'AVAILABLE', position: 0, isVisible: true },
|
||||
{ universalIdentifier: '656bf55a-9762-410d-bd4f-cf50ee9d810b', fieldValue: 'UNAVAILABLE', position: 1, isVisible: true },
|
||||
],
|
||||
// Same column set/widths as Applications, plus Partner Tier right after Name.
|
||||
fields: [
|
||||
{ universalIdentifier: '9463bf58-69d5-4309-bc6e-4835df346246', fieldMetadataUniversalIdentifier: 'a0000001-0000-4000-8000-000000000001', position: 0, isVisible: true },
|
||||
{ universalIdentifier: 'c8fd88c5-ffa9-4944-b5b9-deec3acd3dff', fieldMetadataUniversalIdentifier: 'd4fa6461-37b6-49ee-9181-dd482e74a70b', position: 1, isVisible: true },
|
||||
{ universalIdentifier: '9cb93542-2a91-4e75-a9f8-4a1866445322', fieldMetadataUniversalIdentifier: '500021ad-ca42-4fd3-8727-392dd26b722a', position: 2, isVisible: true },
|
||||
{ universalIdentifier: 'd6df98ac-9c6c-46c2-8784-d4e1d6521f75', fieldMetadataUniversalIdentifier: '560503de-6330-4c1d-af97-a8dee125f2ad', position: 3, isVisible: true },
|
||||
{ universalIdentifier: '375cc871-fdda-42d0-8308-e60174b6d467', fieldMetadataUniversalIdentifier: 'a0000004-0000-4000-8000-000000000004', position: 4, isVisible: true },
|
||||
{ universalIdentifier: '6a7d6b14-9216-42af-bbd9-89bd185fd492', fieldMetadataUniversalIdentifier: 'a0000007-0000-4000-8000-000000000007', position: 5, isVisible: true },
|
||||
// Name (label identifier)
|
||||
{ universalIdentifier: '9463bf58-69d5-4309-bc6e-4835df346246', fieldMetadataUniversalIdentifier: 'a0000001-0000-4000-8000-000000000001', position: 0, isVisible: true, size: 200 },
|
||||
// Categories (partnerScope)
|
||||
{ universalIdentifier: '9cb93542-2a91-4e75-a9f8-4a1866445322', fieldMetadataUniversalIdentifier: '500021ad-ca42-4fd3-8727-392dd26b722a', position: 1, isVisible: true, size: 260 },
|
||||
// Skills
|
||||
{ universalIdentifier: '73022579-b4b1-4e0e-87f8-fee2cc5ff1a1', fieldMetadataUniversalIdentifier: '6f260cc0-a860-41e6-ad40-a2ef32ecffbe', position: 2, isVisible: true, size: 200 },
|
||||
// Partner Tier (after Skills)
|
||||
{ universalIdentifier: 'c8fd88c5-ffa9-4944-b5b9-deec3acd3dff', fieldMetadataUniversalIdentifier: 'd4fa6461-37b6-49ee-9181-dd482e74a70b', position: 3, isVisible: true },
|
||||
// Languages Spoken
|
||||
{ universalIdentifier: '6a7d6b14-9216-42af-bbd9-89bd185fd492', fieldMetadataUniversalIdentifier: 'a0000007-0000-4000-8000-000000000007', position: 4, isVisible: true, size: 200 },
|
||||
// Country
|
||||
{ universalIdentifier: '75d5dad8-259f-4911-9607-06f247410329', fieldMetadataUniversalIdentifier: 'a77d7fa6-c398-47db-af0f-036a5c719f20', position: 5, isVisible: true },
|
||||
// LinkedIn
|
||||
{ universalIdentifier: '72390fd5-b148-4074-b41d-c64bc28097a6', fieldMetadataUniversalIdentifier: '640bbf33-45d7-4174-a862-dbe611ab8d1a', position: 6, isVisible: true },
|
||||
// Type of Team (kept last)
|
||||
{ universalIdentifier: '300ea008-d311-4375-b8eb-74e8731c52cc', fieldMetadataUniversalIdentifier: 'a451e557-a488-470a-8b35-6f9b8cfb1a10', position: 7, isVisible: true },
|
||||
],
|
||||
filters: [
|
||||
{
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
import {
|
||||
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
|
||||
ViewFilterOperand,
|
||||
ViewSortDirection,
|
||||
ViewType,
|
||||
defineView,
|
||||
} from 'twenty-sdk/define';
|
||||
|
||||
import {
|
||||
MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER,
|
||||
WAITING_FOR_MATCH_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
} from 'src/constants/universal-identifiers';
|
||||
|
||||
// Ops inbox: opportunities awaiting a human matching decision.
|
||||
// Includes TO_BE_MATCHED (default for new opps) and MANUAL_MATCH
|
||||
// (opps that auto-match couldn't resolve or that ops opted to handle manually).
|
||||
export default defineView({
|
||||
universalIdentifier: WAITING_FOR_MATCH_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
name: 'Waiting for match',
|
||||
icon: 'IconClockHour4',
|
||||
objectUniversalIdentifier:
|
||||
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.opportunity.universalIdentifier,
|
||||
type: ViewType.KANBAN,
|
||||
mainGroupByFieldMetadataUniversalIdentifier: MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER,
|
||||
fields: [
|
||||
{ universalIdentifier: 'd74b5eb3-21ee-48fa-b703-4cfd629738b4', fieldMetadataUniversalIdentifier: '20202020-8609-4f65-a2d9-44009eb422b5', position: 0, isVisible: true },
|
||||
{ universalIdentifier: '50822cf9-c238-4450-ba31-5807011afa65', fieldMetadataUniversalIdentifier: '20202020-cbac-457e-b565-adece5fc815f', position: 1, isVisible: true },
|
||||
{ universalIdentifier: 'f432a71f-3bd0-495e-b5b1-8a78e155dc5a', fieldMetadataUniversalIdentifier: '20202020-d01b-4132-9b32-123456789abc', position: 2, isVisible: true },
|
||||
{ universalIdentifier: '9e47592f-9965-4ee7-9c6a-303477b293f4', fieldMetadataUniversalIdentifier: 'cc6b8a59-f860-493f-8b9a-f138c078fbf1', position: 3, isVisible: true },
|
||||
// matchStatus column (replaces the dropped partnerEligible column)
|
||||
{ universalIdentifier: '909e1eee-077a-4f23-8c9b-4c8027623a78', fieldMetadataUniversalIdentifier: MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER, position: 4, isVisible: true },
|
||||
],
|
||||
filters: [
|
||||
{
|
||||
universalIdentifier: '93476207-1471-49d9-898c-f8a1d52f468f',
|
||||
fieldMetadataUniversalIdentifier: MATCH_STATUS_FIELD_UNIVERSAL_IDENTIFIER,
|
||||
operand: ViewFilterOperand.IS,
|
||||
value: ['TO_BE_MATCHED', 'MANUAL_MATCH'],
|
||||
},
|
||||
],
|
||||
sorts: [
|
||||
{
|
||||
universalIdentifier: 'a7c5a89e-d9d7-4cf6-a6d2-3ad9f12a7b1f',
|
||||
fieldMetadataUniversalIdentifier: '20202020-d01b-4132-9b32-123456789abc',
|
||||
direction: ViewSortDirection.ASC,
|
||||
},
|
||||
],
|
||||
});
|
||||
Reference in New Issue
Block a user