Compare commits

...
Author SHA1 Message Date
bosiraphael 5d4424afb4 Merge branch 'r--people-data-labs-enrichment-mapper' of github.com:twentyhq/twenty into r--people-data-labs-enrichment-mapper 2026-06-05 18:38:57 +02:00
bosiraphael d7c3f2282d fixes and sdk version bump 2026-06-05 18:38:49 +02:00
Raphaël BosiandGitHub fd75c15db3 Merge branch 'main' into r--people-data-labs-enrichment-mapper 2026-06-05 18:13:37 +02:00
EtienneandGitHub 27db8bbae4 fixes - remove billing cancellation at trial end + disable ai chat if suspended (#21261)
- Remove billing cancelation if trial is ended (subscription activated)
- Disable AI Chat use if workspace suspended
2026-06-05 15:34:12 +00:00
84ba7eb8dc fix(app-dev): serialize dev sync per workspace with a cache lock (#21250)
Split out of #21240. Stacked on #21249 (review/merge that first).

Concurrent `syncApplication` calls on the same workspace could
interleave their metadata migrations and leave metadata partially
applied. Wrap the manifest sync in a per-workspace cache lock
(`app-sync:<workspaceId>`), mirroring the install path. The rate-limit
throttle stays outside the lock.

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
2026-06-05 17:30:55 +02:00
bosiraphael eafd31c919 Add icons 2026-06-05 16:55:58 +02:00
a3d73740a1 fix(server): guard role-permission cache against stripped permissionFlag relation during upgrade (#21257)
## Problem

Self-hosted upgrades that jump versions (e.g. `2.4 → 2.7/2.9`) abort
with:

```
TypeError: Cannot read properties of undefined (reading 'universalIdentifier')
  at WorkspaceRolesPermissionsCacheService.hasSettingsGatedObjectPermissions
  at WorkspaceRolesPermissionsCacheService.computeForCache
  at WorkspaceCacheService.recomputeDataFromProvider
```

Reported in #20841 (Failure #2). The sequence aborts mid-upgrade and
leaves the DB in a half-migrated state.

## Root cause

The per-workspace **cache recompute runs at a `2.5.0` workspace step —
before the `2.6` schema migrations apply**. At that cursor:

- `RolePermissionFlagEntity.permissionFlag` is
`@WasIntroducedInUpgrade('2.6.0_LinkRolePermissionFlagToPermissionFlag…')`,
so `UpgradeAwareRepositoryProxy` **strips the relation**
(`[upgrade-proxy] strip relation
RolePermissionFlagEntity.permissionFlag` in the logs) → `permissionFlag`
is `undefined`.
- `hasSettingsGatedObjectPermissions()` then does an **unguarded**
`rolePermissionFlag.permissionFlag.universalIdentifier` → throws.

The crash only manifests when a workspace has **≥1 `rolePermissionFlag`
row** (custom roles with gated settings perms / SDK `defineRole`). A
vanilla seed has an empty table, so `.find()` over `[]` never
dereferences anything — which is why it didn't reproduce on a clean
instance.

A null-safe fallback to the legacy `flag` column used to exist here; it
was dropped in #20730.

## Fix

Resolve the flag's universal identifier through a small helper that
falls back to the legacy `flag` column (only removed in `2.7.0`) when
the relation is unavailable:

```ts
private getRolePermissionFlagUniversalIdentifier(
  rolePermissionFlag: RolePermissionFlagEntity,
): string {
  // The `permissionFlag` relation is stripped during upgrades until the 2.6.0
  // cursor (@WasIntroducedInUpgrade), so fall back to the legacy `flag` column.
  return (
    rolePermissionFlag.permissionFlag?.universalIdentifier ??
    SystemPermissionFlag[rolePermissionFlag.flag]
  );
}
```

`SystemPermissionFlag[flag]` yields the same UUID the relation would, so
the comparison stays in a single space and the computed permission is
exact (not an over-grant). Correct at every transitional cursor:
pre-`2.6` (relation stripped → use `flag`), `2.6` (both present →
relation wins), post-`2.7` (`flag` removed → relation wins).

## Reproduction & validation

Locally jumped a real `2.4.0` DB → `v2.9.0` build via `yarn command:prod
upgrade`:

| Scenario | Result |
| --- | --- |
| Empty `permissionFlag` (vanilla seed) | passes (no crash) |
| **+1 flag row**, current code | `TypeError … universalIdentifier` →
**3 succeeded, 1 failed** |
| Same fixture, **this fix** | **16 succeeded, 0 failed**, DB fully
migrated to 2.9.0 |

`nx typecheck twenty-server` clean; existing cache-service unit tests
pass; app boots on the upgraded DB.

## Scope / follow-up

This fixes **Failure #2**. **Failure #1** in the same issue
(`viewFilter.relationTargetFieldMetadataId` selected before its column
exists) is a separate instance of the same theme — cache recompute
reading "future" schema before migrations run — and is worth a
follow-up. A more durable systemic fix would defer the workspace cache
recompute until after all schema-adding migrations; this PR is the
low-risk, backport-friendly fix for the immediate breakage.

> Note: an earlier bot branch
(`sonarly-39738-fixupgrade-guard-role-permission-flag-relation`)
proposed the same fallback inline. This PR supersedes it with a named
helper + a focused comment.

Fixes #20841

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 14:45:17 +00:00
bosiraphael d6ea28ba58 split files 2026-06-05 16:44:05 +02:00
bosiraphael a21e1420c1 Fixes on selects and add custom errors 2026-06-05 16:43:47 +02:00
Thomas TrompetteandGitHub 0d3c7a47af fix: guard against undefined logicFunctionId when destroying workflow CODE steps (#21256)
## Summary
- Adds `isDefined` guard in `handleLogicFunctionSubEntities` to skip
CODE steps with undefined `logicFunctionId` instead of crashing
- Adds same guard in `runWorkflowVersionStepDeletionSideEffects` for
consistency
- Rejects CODE steps in `create_complete_workflow` AI tool at runtime to
prevent creating workflows with missing logic functions in the first
place

Fixes `"Logic function with id undefined not found"`
INTERNAL_SERVER_ERROR when destroying workflows whose CODE steps were
created via `create_complete_workflow` without a proper logic function.

## Test plan
- [x] Destroy a workflow that has a CODE step with undefined
logicFunctionId → should succeed silently
- [x] Try creating a workflow with a CODE step via
`create_complete_workflow` tool → should return error message
- [x] Normal workflow destroy with valid CODE steps still deletes the
logic function
2026-06-05 14:30:19 +00:00
2dbdd72e65 chore: bump version to 2.11.0 (#21259)
## Summary

- Moves current version to previous versions array
- Sets TWENTY_CURRENT_VERSION to the new version
- Updates TWENTY_NEXT_VERSIONS with the next minor version
- Bumps twenty-client-sdk, twenty-sdk, and create-twenty-app to the same
version

## Checklist

- [ ] Verify version constants are correct
- [ ] Verify npm package versions match

Co-authored-by: Github Action Deploy <github-action-deploy@twenty.com>
2026-06-05 16:47:40 +02:00
f20d04eb6e feat(app-dev): surface metadata diff in dev sync and name failing migration actions (#21249)
Split out of #21240.

- Render the applied metadata changes (created/updated/deleted +
identifiers) in the dev sync output instead of a bare `✓ Synced`.
- Include the failing entity's `universalIdentifier` in
`WorkspaceMigrationRunnerException` messages so conflicts are
diagnosable.

<img width="637" height="114" alt="image"
src="https://github.com/user-attachments/assets/61422a16-370c-4e9b-a2f6-c29ce17f3b1b"
/>

<img width="497" height="104" alt="image"
src="https://github.com/user-attachments/assets/d493c398-da29-49c9-ac5e-aa0f26cd7389"
/>

<img width="593" height="127" alt="image"
src="https://github.com/user-attachments/assets/15e26edc-c0e4-4427-bd34-909040e970c9"
/>

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
2026-06-05 16:35:50 +02:00
nitinandGitHub f72898063a upgrade command patch - warn instead of throw when no calendarEvent object found in the workspace (#21258) 2026-06-05 16:32:16 +02:00
bosiraphael 09d68afeea Merge branch 'main' of github.com:twentyhq/twenty into r--people-data-labs-enrichment-mapper 2026-06-05 14:56:21 +02:00
bosiraphael 8e56d1d56c fixes 2026-06-05 14:56:16 +02:00
bosiraphael e0957490dc remove comment 2026-06-05 14:43:54 +02:00
bosiraphael 82e8d82848 create logic functions and utils 2026-06-05 13:58:21 +02:00
256 changed files with 6857 additions and 2562 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "create-twenty-app",
"version": "2.10.0",
"version": "2.11.0",
"description": "Command-line interface to create Twenty application",
"main": "dist/cli.cjs",
"bin": "dist/cli.cjs",
@@ -2,9 +2,32 @@
Enriches **Person** and **Company** records with [People Data Labs](https://www.peopledatalabs.com/) (PDL) data.
> **Status: data-model scaffold.** This package defines the fields, relation, indexes,
> views, role, and manifest. The enrichment **logic function (the "mapper") is not yet
> implemented** — see [What the mapper must do](#what-the-mapper-must-do).
> **Status: data model + enrichment mapper.** This package defines the fields, relation,
> indexes, views, role, and manifest, and implements the enrichment **logic functions**
> that call the PDL REST API and map the response onto the standard + `pdl*` fields.
---
## Enrichment logic functions
`enrich-person` / `enrich-company` (workflow actions, for the manual record action) plus
`enrich-person-tool` / `enrich-company-tool` (AI tools) all delegate to a shared,
trigger-agnostic core in `src/logic-functions/handlers/`:
- Read the record, guard against re-enriching within a TTL (`pdlLastEnrichedAt`), pick a
match identifier (person: `pdlId` → LinkedIn → email → name; company: `pdlId` → domain →
name), and call the PDL Person/Company Enrichment API (`src/logic-functions/utils/`).
- On a match: fill **standard fields only when empty** (never clobber user data), always
(re)write `pdl*` fields, and set `pdlEnrichmentStatus = MATCHED`, `pdlLastEnrichedAt`,
`pdlRawPayload` (+ `pdlLikelihood` for Person). PDL `404``NOT_FOUND`; other errors →
`ERROR`. No identifier / fresh TTL → skipped with no writes.
- SELECT/MULTI_SELECT values are normalized and dropped if not in the field's option set
(`src/logic-functions/utils/`); the option sets are the same `src/constants/*-options.ts`
the field definitions use.
Run locally: `yarn twenty dev:function:exec -n enrich-person -p '{"recordId":"<id>"}'`.
**Deferred to a later PR:** enrichment metering/billing, and auto-enrichment triggers.
---
@@ -25,9 +48,9 @@ PDL schema v34.1**:
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ | ------------------------------------------ |
| `pdlSeniority` (`job_title_levels`, array) | MULTI_SELECT | 10 |
| `pdlFundingStages` (`funding_stages`, array) | MULTI_SELECT | 29 |
| `pdlIndustry` / `pdlJobCompanyIndustry` (`industry`) | SELECT | 147 |
| `pdlIndustry` (`industry`) | SELECT | 147 |
| `pdlJobTitleSubRole` (`job_title_sub_role`) | SELECT | 106 |
| `pdlJobTitleClass`, `pdlInferredSalary`, `pdlSex`, `pdlCompanyType`, `pdlSizeRange`, `pdlJobCompanySize`, `pdlLatestFundingStage`, `pdlLocationContinent`, `pdlLocationMetro`, `pdlMicExchange` | SELECT | 5 / 11 / 2 / 6 / 8 / 8 / 29 / 7 / 384 / 70 |
| `pdlJobTitleClass`, `pdlInferredSalary`, `pdlSex`, `pdlCompanyType`, `pdlSizeRange`, `pdlLatestFundingStage`, `pdlLocationContinent`, `pdlLocationMetro`, `pdlMicExchange` | SELECT | 5 / 11 / 2 / 6 / 8 / 29 / 7 / 384 / 70 |
- Option `value`s are normalized to **GraphQL enum names** (`united states``UNITED_STATES`):
uppercase, accents stripped, non-alphanumeric → `_`, digit-leading prefixed.
@@ -58,11 +81,19 @@ into the standard bags).
- `pdlLocationMetro` (both) and `pdlLocationContinent` (company) stay SELECT — ADDRESS has no slot.
_Trade-off:_ ADDRESS `country` is free text, so the country SELECT was dropped.
### Relation
### Current company → standard `company`
Dedicated **`pdlCurrentCompany`** (Person `MANY_TO_ONE` → Company) ↔ inverse
**`pdlCurrentEmployees`** (Company `ONE_TO_MANY` → Person). Deliberately **not** the standard
`company` relation, so PDL's detected employer can't overwrite the user's CRM account link.
PDL's detected current employer (`job_company_*`) is resolved to a Company record
(**find-or-create**, matched by `pdlId` → domain → LinkedIn → name; created with
`name` / `domainName` / `linkedinLink` + `pdlId` / `pdlIndustry` / `pdlSizeRange` when none
matches) and linked via the **standard `company`** relation, **fill-only-if-empty** — it never
overwrites a company the user already set, and the lookup is skipped entirely when the person
already has one (no orphan companies).
Company attributes live on the **Company** record, not denormalized on the Person. The earlier
`pdlCurrentCompany` / `pdlCurrentEmployees` relation and the six `pdlJobCompany*` scalar fields
were **removed** as duplicates of the standard `company` relation and the linked Company's own
fields.
### Enrichment metadata
@@ -108,7 +139,8 @@ The logic function (to be built) must:
10. **CURRENCY**: `total_funding_raised` (USD float) → `{ amountMicros: value × 1_000_000, currencyCode: 'USD' }`.
11. **ADDRESS**: split PDL `location.*` into the composite — Company → standard `address`,
Person → `pdlLocation`.
12. **Relation**: resolve `job_company_id` → find/upsert a Company record → link `pdlCurrentCompany`.
12. **Company**: resolve `job_company_*` → find-or-create a Company record → link the standard
`company` relation (fill-only-if-empty).
13. **Dates**: handle partial PDL dates (`YYYY`, `YYYY-MM`) for `job_start_date`,
`last_funding_date`, `birth_date`.
14. Always set `pdlId`, `pdlLastEnrichedAt`, `pdlRawPayload`, `pdlLikelihood` (person).
@@ -16,12 +16,13 @@
"twenty": "twenty",
"lint": "oxlint -c .oxlintrc.json .",
"lint:fix": "oxlint --fix -c .oxlintrc.json .",
"test": "vitest run --passWithNoTests",
"test:watch": "vitest"
"test": "vitest run --config vitest.unit.config.ts --passWithNoTests",
"test:watch": "vitest --config vitest.unit.config.ts",
"test:integration": "vitest run --passWithNoTests"
},
"dependencies": {
"twenty-client-sdk": "2.4.0",
"twenty-sdk": "2.4.0"
"twenty-client-sdk": "2.9.1",
"twenty-sdk": "2.9.1"
},
"devDependencies": {
"@types/node": "^24.7.2",
@@ -0,0 +1,82 @@
import { describe, expect, it } from 'vitest';
import { COMPANY_TYPE_OPTIONS } from 'src/constants/company-type-options';
import { INFERRED_SALARY_OPTIONS } from 'src/constants/inferred-salary-options';
import { JOB_ROLE_OPTIONS } from 'src/constants/job-role-options';
import { JOB_TITLE_CLASS_OPTIONS } from 'src/constants/job-title-class-options';
import { JOB_TITLE_SUB_ROLE_OPTIONS } from 'src/constants/job-title-sub-role-options';
import { LOCATION_CONTINENT_OPTIONS } from 'src/constants/location-continent-options';
import { MIC_EXCHANGE_OPTIONS } from 'src/constants/mic-exchange-options';
import { SENIORITY_OPTIONS } from 'src/constants/seniority-options';
import { SEX_OPTIONS } from 'src/constants/sex-options';
import { type SelectOptionMeta } from 'src/types/select-option-meta.type';
import companyTypeField from 'src/fields/company/pdl-company-type.field';
import locationContinentField from 'src/fields/company/pdl-location-continent.field';
import micExchangeField from 'src/fields/company/pdl-mic-exchange.field';
import inferredSalaryField from 'src/fields/person/pdl-inferred-salary.field';
import jobRoleField from 'src/fields/person/pdl-job-role.field';
import jobTitleClassField from 'src/fields/person/pdl-job-title-class.field';
import jobTitleSubRoleField from 'src/fields/person/pdl-job-title-sub-role.field';
import seniorityField from 'src/fields/person/pdl-seniority.field';
import sexField from 'src/fields/person/pdl-sex.field';
type FieldOption = { id?: string; value: string };
const fieldOptions = (field: unknown): FieldOption[] => {
const options = (field as { config?: { options?: FieldOption[] } }).config
?.options;
return options ?? [];
};
const cases: {
name: string;
field: unknown;
options: readonly SelectOptionMeta[];
}[] = [
{ name: 'pdlSeniority', field: seniorityField, options: SENIORITY_OPTIONS },
{ name: 'pdlJobRole', field: jobRoleField, options: JOB_ROLE_OPTIONS },
{
name: 'pdlJobTitleClass',
field: jobTitleClassField,
options: JOB_TITLE_CLASS_OPTIONS,
},
{
name: 'pdlJobTitleSubRole',
field: jobTitleSubRoleField,
options: JOB_TITLE_SUB_ROLE_OPTIONS,
},
{ name: 'pdlSex', field: sexField, options: SEX_OPTIONS },
{
name: 'pdlInferredSalary',
field: inferredSalaryField,
options: INFERRED_SALARY_OPTIONS,
},
{
name: 'pdlCompanyType',
field: companyTypeField,
options: COMPANY_TYPE_OPTIONS,
},
{
name: 'pdlLocationContinent',
field: locationContinentField,
options: LOCATION_CONTINENT_OPTIONS,
},
{
name: 'pdlMicExchange',
field: micExchangeField,
options: MIC_EXCHANGE_OPTIONS,
},
];
describe.each(cases)('$name options', ({ field, options }) => {
it('resolves a universalIdentifier for every option', () => {
expect(fieldOptions(field).every((option) => Boolean(option.id))).toBe(true);
});
it('exposes exactly the values from its source constant', () => {
expect(fieldOptions(field).map((option) => option.value)).toEqual(
options.map((option) => option.value),
);
});
});
@@ -0,0 +1,46 @@
import { type SelectOptionMeta } from 'src/types/select-option-meta.type';
export const COMPANY_TYPE_OPTIONS: readonly SelectOptionMeta[] = [
{
key: 'public',
value: 'PUBLIC',
label: 'Public',
color: 'blue',
position: 0,
},
{
key: 'private',
value: 'PRIVATE',
label: 'Private',
color: 'red',
position: 1,
},
{
key: 'publicSubsidiary',
value: 'PUBLIC_SUBSIDIARY',
label: 'Public Subsidiary',
color: 'green',
position: 2,
},
{
key: 'educational',
value: 'EDUCATIONAL',
label: 'Educational',
color: 'orange',
position: 3,
},
{
key: 'government',
value: 'GOVERNMENT',
label: 'Government',
color: 'purple',
position: 4,
},
{
key: 'nonprofit',
value: 'NONPROFIT',
label: 'Nonprofit',
color: 'yellow',
position: 5,
},
];
@@ -0,0 +1,81 @@
import { type SelectOptionMeta } from 'src/types/select-option-meta.type';
export const INFERRED_SALARY_OPTIONS: readonly SelectOptionMeta[] = [
{
key: 'under20000',
value: 'UNDER_20000',
label: '<20K',
color: 'blue',
position: 0,
},
{
key: 'from20000To25000',
value: 'FROM_20000_TO_25000',
label: '20K-25K',
color: 'red',
position: 1,
},
{
key: 'from25000To35000',
value: 'FROM_25000_TO_35000',
label: '25K-35K',
color: 'green',
position: 2,
},
{
key: 'from35000To45000',
value: 'FROM_35000_TO_45000',
label: '35K-45K',
color: 'orange',
position: 3,
},
{
key: 'from45000To55000',
value: 'FROM_45000_TO_55000',
label: '45K-55K',
color: 'purple',
position: 4,
},
{
key: 'from55000To70000',
value: 'FROM_55000_TO_70000',
label: '55K-70K',
color: 'yellow',
position: 5,
},
{
key: 'from70000To85000',
value: 'FROM_70000_TO_85000',
label: '70K-85K',
color: 'pink',
position: 6,
},
{
key: 'from85000To100000',
value: 'FROM_85000_TO_100000',
label: '85K-100K',
color: 'cyan',
position: 7,
},
{
key: 'from100000To150000',
value: 'FROM_100000_TO_150000',
label: '100K-150K',
color: 'brown',
position: 8,
},
{
key: 'from150000To250000',
value: 'FROM_150000_TO_250000',
label: '150K-250K',
color: 'lime',
position: 9,
},
{
key: 'over250000',
value: 'OVER_250000',
label: '>250K',
color: 'violet',
position: 10,
},
];
@@ -0,0 +1,172 @@
import { type SelectOptionMeta } from 'src/types/select-option-meta.type';
export const JOB_ROLE_OPTIONS: readonly SelectOptionMeta[] = [
{
key: 'advisory',
value: 'ADVISORY',
label: 'Advisory',
color: 'blue',
position: 0,
},
{
key: 'analyst',
value: 'ANALYST',
label: 'Analyst',
color: 'red',
position: 1,
},
{
key: 'creative',
value: 'CREATIVE',
label: 'Creative',
color: 'green',
position: 2,
},
{
key: 'education',
value: 'EDUCATION',
label: 'Education',
color: 'orange',
position: 3,
},
{
key: 'engineering',
value: 'ENGINEERING',
label: 'Engineering',
color: 'purple',
position: 4,
},
{
key: 'finance',
value: 'FINANCE',
label: 'Finance',
color: 'yellow',
position: 5,
},
{
key: 'fulfillment',
value: 'FULFILLMENT',
label: 'Fulfillment',
color: 'pink',
position: 6,
},
{
key: 'health',
value: 'HEALTH',
label: 'Health',
color: 'cyan',
position: 7,
},
{
key: 'hospitality',
value: 'HOSPITALITY',
label: 'Hospitality',
color: 'brown',
position: 8,
},
{
key: 'humanResources',
value: 'HUMAN_RESOURCES',
label: 'Human Resources',
color: 'lime',
position: 9,
},
{
key: 'legal',
value: 'LEGAL',
label: 'Legal',
color: 'violet',
position: 10,
},
{
key: 'manufacturing',
value: 'MANUFACTURING',
label: 'Manufacturing',
color: 'gold',
position: 11,
},
{
key: 'marketing',
value: 'MARKETING',
label: 'Marketing',
color: 'turquoise',
position: 12,
},
{
key: 'operations',
value: 'OPERATIONS',
label: 'Operations',
color: 'crimson',
position: 13,
},
{
key: 'partnerships',
value: 'PARTNERSHIPS',
label: 'Partnerships',
color: 'sky',
position: 14,
},
{
key: 'product',
value: 'PRODUCT',
label: 'Product',
color: 'amber',
position: 15,
},
{
key: 'professionalService',
value: 'PROFESSIONAL_SERVICE',
label: 'Professional Service',
color: 'plum',
position: 16,
},
{
key: 'publicService',
value: 'PUBLIC_SERVICE',
label: 'Public Service',
color: 'grass',
position: 17,
},
{
key: 'research',
value: 'RESEARCH',
label: 'Research',
color: 'tomato',
position: 18,
},
{
key: 'sales',
value: 'SALES',
label: 'Sales',
color: 'iris',
position: 19,
},
{
key: 'salesEngineering',
value: 'SALES_ENGINEERING',
label: 'Sales Engineering',
color: 'mint',
position: 20,
},
{
key: 'support',
value: 'SUPPORT',
label: 'Support',
color: 'ruby',
position: 21,
},
{
key: 'trade',
value: 'TRADE',
label: 'Trade',
color: 'bronze',
position: 22,
},
{
key: 'unemployed',
value: 'UNEMPLOYED',
label: 'Unemployed',
color: 'jade',
position: 23,
},
];
@@ -0,0 +1,39 @@
import { type SelectOptionMeta } from 'src/types/select-option-meta.type';
export const JOB_TITLE_CLASS_OPTIONS: readonly SelectOptionMeta[] = [
{
key: 'generalAndAdministrative',
value: 'GENERAL_AND_ADMINISTRATIVE',
label: 'General and Administrative',
color: 'blue',
position: 0,
},
{
key: 'researchAndDevelopment',
value: 'RESEARCH_AND_DEVELOPMENT',
label: 'Research and Development',
color: 'red',
position: 1,
},
{
key: 'salesAndMarketing',
value: 'SALES_AND_MARKETING',
label: 'Sales and Marketing',
color: 'green',
position: 2,
},
{
key: 'services',
value: 'SERVICES',
label: 'Services',
color: 'orange',
position: 3,
},
{
key: 'unemployed',
value: 'UNEMPLOYED',
label: 'Unemployed',
color: 'purple',
position: 4,
},
];
@@ -0,0 +1,746 @@
import { type SelectOptionMeta } from 'src/types/select-option-meta.type';
export const JOB_TITLE_SUB_ROLE_OPTIONS: readonly SelectOptionMeta[] = [
{
key: 'academic',
value: 'ACADEMIC',
label: 'Academic',
color: 'blue',
position: 0,
},
{
key: 'accountExecutive',
value: 'ACCOUNT_EXECUTIVE',
label: 'Account Executive',
color: 'red',
position: 1,
},
{
key: 'accountManagement',
value: 'ACCOUNT_MANAGEMENT',
label: 'Account Management',
color: 'green',
position: 2,
},
{
key: 'accounting',
value: 'ACCOUNTING',
label: 'Accounting',
color: 'orange',
position: 3,
},
{
key: 'accountingServices',
value: 'ACCOUNTING_SERVICES',
label: 'Accounting Services',
color: 'purple',
position: 4,
},
{
key: 'administrative',
value: 'ADMINISTRATIVE',
label: 'Administrative',
color: 'yellow',
position: 5,
},
{
key: 'advisor',
value: 'ADVISOR',
label: 'Advisor',
color: 'pink',
position: 6,
},
{
key: 'agriculture',
value: 'AGRICULTURE',
label: 'Agriculture',
color: 'cyan',
position: 7,
},
{
key: 'aides',
value: 'AIDES',
label: 'Aides',
color: 'brown',
position: 8,
},
{
key: 'architecture',
value: 'ARCHITECTURE',
label: 'Architecture',
color: 'lime',
position: 9,
},
{
key: 'artist',
value: 'ARTIST',
label: 'Artist',
color: 'violet',
position: 10,
},
{
key: 'boardMember',
value: 'BOARD_MEMBER',
label: 'Board Member',
color: 'gold',
position: 11,
},
{
key: 'bookkeeping',
value: 'BOOKKEEPING',
label: 'Bookkeeping',
color: 'turquoise',
position: 12,
},
{
key: 'brand',
value: 'BRAND',
label: 'Brand',
color: 'crimson',
position: 13,
},
{
key: 'buildingAndGrounds',
value: 'BUILDING_AND_GROUNDS',
label: 'Building and Grounds',
color: 'sky',
position: 14,
},
{
key: 'businessAnalyst',
value: 'BUSINESS_ANALYST',
label: 'Business Analyst',
color: 'amber',
position: 15,
},
{
key: 'businessDevelopment',
value: 'BUSINESS_DEVELOPMENT',
label: 'Business Development',
color: 'plum',
position: 16,
},
{
key: 'chemical',
value: 'CHEMICAL',
label: 'Chemical',
color: 'grass',
position: 17,
},
{
key: 'compliance',
value: 'COMPLIANCE',
label: 'Compliance',
color: 'tomato',
position: 18,
},
{
key: 'construction',
value: 'CONSTRUCTION',
label: 'Construction',
color: 'iris',
position: 19,
},
{
key: 'consulting',
value: 'CONSULTING',
label: 'Consulting',
color: 'mint',
position: 20,
},
{
key: 'content',
value: 'CONTENT',
label: 'Content',
color: 'ruby',
position: 21,
},
{
key: 'corporateDevelopment',
value: 'CORPORATE_DEVELOPMENT',
label: 'Corporate Development',
color: 'bronze',
position: 22,
},
{
key: 'curation',
value: 'CURATION',
label: 'Curation',
color: 'jade',
position: 23,
},
{
key: 'customerSuccess',
value: 'CUSTOMER_SUCCESS',
label: 'Customer Success',
color: 'gray',
position: 24,
},
{
key: 'customerSupport',
value: 'CUSTOMER_SUPPORT',
label: 'Customer Support',
color: 'blue',
position: 25,
},
{
key: 'dataAnalyst',
value: 'DATA_ANALYST',
label: 'Data Analyst',
color: 'red',
position: 26,
},
{
key: 'dataEngineering',
value: 'DATA_ENGINEERING',
label: 'Data Engineering',
color: 'green',
position: 27,
},
{
key: 'dataScience',
value: 'DATA_SCIENCE',
label: 'Data Science',
color: 'orange',
position: 28,
},
{
key: 'dental',
value: 'DENTAL',
label: 'Dental',
color: 'purple',
position: 29,
},
{
key: 'devops',
value: 'DEVOPS',
label: 'DevOps',
color: 'yellow',
position: 30,
},
{
key: 'doctor',
value: 'DOCTOR',
label: 'Doctor',
color: 'pink',
position: 31,
},
{
key: 'electric',
value: 'ELECTRIC',
label: 'Electric',
color: 'cyan',
position: 32,
},
{
key: 'electrical',
value: 'ELECTRICAL',
label: 'Electrical',
color: 'brown',
position: 33,
},
{
key: 'emergencyServices',
value: 'EMERGENCY_SERVICES',
label: 'Emergency Services',
color: 'lime',
position: 34,
},
{
key: 'entertainment',
value: 'ENTERTAINMENT',
label: 'Entertainment',
color: 'violet',
position: 35,
},
{
key: 'executive',
value: 'EXECUTIVE',
label: 'Executive',
color: 'gold',
position: 36,
},
{
key: 'fashion',
value: 'FASHION',
label: 'Fashion',
color: 'turquoise',
position: 37,
},
{
key: 'financial',
value: 'FINANCIAL',
label: 'Financial',
color: 'crimson',
position: 38,
},
{
key: 'fitness',
value: 'FITNESS',
label: 'Fitness',
color: 'sky',
position: 39,
},
{
key: 'fraud',
value: 'FRAUD',
label: 'Fraud',
color: 'amber',
position: 40,
},
{
key: 'graphicDesign',
value: 'GRAPHIC_DESIGN',
label: 'Graphic Design',
color: 'plum',
position: 41,
},
{
key: 'growth',
value: 'GROWTH',
label: 'Growth',
color: 'grass',
position: 42,
},
{
key: 'hairStylist',
value: 'HAIR_STYLIST',
label: 'Hair Stylist',
color: 'tomato',
position: 43,
},
{
key: 'hardware',
value: 'HARDWARE',
label: 'Hardware',
color: 'iris',
position: 44,
},
{
key: 'healthAndSafety',
value: 'HEALTH_AND_SAFETY',
label: 'Health and Safety',
color: 'mint',
position: 45,
},
{
key: 'humanResources',
value: 'HUMAN_RESOURCES',
label: 'Human Resources',
color: 'ruby',
position: 46,
},
{
key: 'implementation',
value: 'IMPLEMENTATION',
label: 'Implementation',
color: 'bronze',
position: 47,
},
{
key: 'industrial',
value: 'INDUSTRIAL',
label: 'Industrial',
color: 'jade',
position: 48,
},
{
key: 'informationTechnology',
value: 'INFORMATION_TECHNOLOGY',
label: 'Information Technology',
color: 'gray',
position: 49,
},
{
key: 'insurance',
value: 'INSURANCE',
label: 'Insurance',
color: 'blue',
position: 50,
},
{
key: 'investmentBanking',
value: 'INVESTMENT_BANKING',
label: 'Investment Banking',
color: 'red',
position: 51,
},
{
key: 'investor',
value: 'INVESTOR',
label: 'Investor',
color: 'green',
position: 52,
},
{
key: 'investorRelations',
value: 'INVESTOR_RELATIONS',
label: 'Investor Relations',
color: 'orange',
position: 53,
},
{
key: 'journalism',
value: 'JOURNALISM',
label: 'Journalism',
color: 'purple',
position: 54,
},
{
key: 'judicial',
value: 'JUDICIAL',
label: 'Judicial',
color: 'yellow',
position: 55,
},
{
key: 'legal',
value: 'LEGAL',
label: 'Legal',
color: 'pink',
position: 56,
},
{
key: 'legalServices',
value: 'LEGAL_SERVICES',
label: 'Legal Services',
color: 'cyan',
position: 57,
},
{
key: 'logistics',
value: 'LOGISTICS',
label: 'Logistics',
color: 'brown',
position: 58,
},
{
key: 'machinist',
value: 'MACHINIST',
label: 'Machinist',
color: 'lime',
position: 59,
},
{
key: 'marketingDesign',
value: 'MARKETING_DESIGN',
label: 'Marketing Design',
color: 'violet',
position: 60,
},
{
key: 'marketingServices',
value: 'MARKETING_SERVICES',
label: 'Marketing Services',
color: 'gold',
position: 61,
},
{
key: 'mechanic',
value: 'MECHANIC',
label: 'Mechanic',
color: 'turquoise',
position: 62,
},
{
key: 'mechanical',
value: 'MECHANICAL',
label: 'Mechanical',
color: 'crimson',
position: 63,
},
{
key: 'military',
value: 'MILITARY',
label: 'Military',
color: 'sky',
position: 64,
},
{
key: 'network',
value: 'NETWORK',
label: 'Network',
color: 'amber',
position: 65,
},
{
key: 'nursing',
value: 'NURSING',
label: 'Nursing',
color: 'plum',
position: 66,
},
{
key: 'partnerships',
value: 'PARTNERSHIPS',
label: 'Partnerships',
color: 'grass',
position: 67,
},
{
key: 'pharmacy',
value: 'PHARMACY',
label: 'Pharmacy',
color: 'tomato',
position: 68,
},
{
key: 'planningAndAnalysis',
value: 'PLANNING_AND_ANALYSIS',
label: 'Planning and Analysis',
color: 'iris',
position: 69,
},
{
key: 'plumbing',
value: 'PLUMBING',
label: 'Plumbing',
color: 'mint',
position: 70,
},
{
key: 'political',
value: 'POLITICAL',
label: 'Political',
color: 'ruby',
position: 71,
},
{
key: 'primaryAndSecondary',
value: 'PRIMARY_AND_SECONDARY',
label: 'Primary and Secondary',
color: 'bronze',
position: 72,
},
{
key: 'procurement',
value: 'PROCUREMENT',
label: 'Procurement',
color: 'jade',
position: 73,
},
{
key: 'productDesign',
value: 'PRODUCT_DESIGN',
label: 'Product Design',
color: 'gray',
position: 74,
},
{
key: 'productManagement',
value: 'PRODUCT_MANAGEMENT',
label: 'Product Management',
color: 'blue',
position: 75,
},
{
key: 'professor',
value: 'PROFESSOR',
label: 'Professor',
color: 'red',
position: 76,
},
{
key: 'projectManagement',
value: 'PROJECT_MANAGEMENT',
label: 'Project Management',
color: 'green',
position: 77,
},
{
key: 'protectiveService',
value: 'PROTECTIVE_SERVICE',
label: 'Protective Service',
color: 'orange',
position: 78,
},
{
key: 'qaEngineering',
value: 'QA_ENGINEERING',
label: 'QA Engineering',
color: 'purple',
position: 79,
},
{
key: 'qualityAssurance',
value: 'QUALITY_ASSURANCE',
label: 'Quality Assurance',
color: 'yellow',
position: 80,
},
{
key: 'realtor',
value: 'REALTOR',
label: 'Realtor',
color: 'pink',
position: 81,
},
{
key: 'recruiting',
value: 'RECRUITING',
label: 'Recruiting',
color: 'cyan',
position: 82,
},
{
key: 'restaurants',
value: 'RESTAURANTS',
label: 'Restaurants',
color: 'brown',
position: 83,
},
{
key: 'retail',
value: 'RETAIL',
label: 'Retail',
color: 'lime',
position: 84,
},
{
key: 'revenueOperations',
value: 'REVENUE_OPERATIONS',
label: 'Revenue Operations',
color: 'violet',
position: 85,
},
{
key: 'risk',
value: 'RISK',
label: 'Risk',
color: 'gold',
position: 86,
},
{
key: 'salesDevelopment',
value: 'SALES_DEVELOPMENT',
label: 'Sales Development',
color: 'turquoise',
position: 87,
},
{
key: 'scientific',
value: 'SCIENTIFIC',
label: 'Scientific',
color: 'crimson',
position: 88,
},
{
key: 'security',
value: 'SECURITY',
label: 'Security',
color: 'sky',
position: 89,
},
{
key: 'socialService',
value: 'SOCIAL_SERVICE',
label: 'Social Service',
color: 'amber',
position: 90,
},
{
key: 'software',
value: 'SOFTWARE',
label: 'Software',
color: 'plum',
position: 91,
},
{
key: 'solutionsEngineer',
value: 'SOLUTIONS_ENGINEER',
label: 'Solutions Engineer',
color: 'grass',
position: 92,
},
{
key: 'strategy',
value: 'STRATEGY',
label: 'Strategy',
color: 'tomato',
position: 93,
},
{
key: 'student',
value: 'STUDENT',
label: 'Student',
color: 'iris',
position: 94,
},
{
key: 'talentAnalytics',
value: 'TALENT_ANALYTICS',
label: 'Talent Analytics',
color: 'mint',
position: 95,
},
{
key: 'therapy',
value: 'THERAPY',
label: 'Therapy',
color: 'ruby',
position: 96,
},
{
key: 'tourAndTravel',
value: 'TOUR_AND_TRAVEL',
label: 'Tour and Travel',
color: 'bronze',
position: 97,
},
{
key: 'training',
value: 'TRAINING',
label: 'Training',
color: 'jade',
position: 98,
},
{
key: 'translation',
value: 'TRANSLATION',
label: 'Translation',
color: 'gray',
position: 99,
},
{
key: 'transport',
value: 'TRANSPORT',
label: 'Transport',
color: 'blue',
position: 100,
},
{
key: 'unemployed',
value: 'UNEMPLOYED',
label: 'Unemployed',
color: 'red',
position: 101,
},
{
key: 'veterinarian',
value: 'VETERINARIAN',
label: 'Veterinarian',
color: 'green',
position: 102,
},
{
key: 'warehouse',
value: 'WAREHOUSE',
label: 'Warehouse',
color: 'orange',
position: 103,
},
{
key: 'web',
value: 'WEB',
label: 'Web',
color: 'purple',
position: 104,
},
{
key: 'wellness',
value: 'WELLNESS',
label: 'Wellness',
color: 'yellow',
position: 105,
},
];
@@ -0,0 +1,53 @@
import { type SelectOptionMeta } from 'src/types/select-option-meta.type';
export const LOCATION_CONTINENT_OPTIONS: readonly SelectOptionMeta[] = [
{
key: 'africa',
value: 'AFRICA',
label: 'Africa',
color: 'blue',
position: 0,
},
{
key: 'antarctica',
value: 'ANTARCTICA',
label: 'Antarctica',
color: 'red',
position: 1,
},
{
key: 'asia',
value: 'ASIA',
label: 'Asia',
color: 'green',
position: 2,
},
{
key: 'europe',
value: 'EUROPE',
label: 'Europe',
color: 'orange',
position: 3,
},
{
key: 'northAmerica',
value: 'NORTH_AMERICA',
label: 'North America',
color: 'purple',
position: 4,
},
{
key: 'oceania',
value: 'OCEANIA',
label: 'Oceania',
color: 'yellow',
position: 5,
},
{
key: 'southAmerica',
value: 'SOUTH_AMERICA',
label: 'South America',
color: 'pink',
position: 6,
},
];
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,494 @@
import { type SelectOptionMeta } from 'src/types/select-option-meta.type';
export const MIC_EXCHANGE_OPTIONS: readonly SelectOptionMeta[] = [
{
key: 'aqse',
value: 'AQSE',
label: 'AQSE',
color: 'blue',
position: 0,
},
{
key: 'arcx',
value: 'ARCX',
label: 'ARCX',
color: 'red',
position: 1,
},
{
key: 'asex',
value: 'ASEX',
label: 'ASEX',
color: 'green',
position: 2,
},
{
key: 'bcxe',
value: 'BCXE',
label: 'BCXE',
color: 'orange',
position: 3,
},
{
key: 'bvmf',
value: 'BVMF',
label: 'BVMF',
color: 'purple',
position: 4,
},
{
key: 'dsmd',
value: 'DSMD',
label: 'DSMD',
color: 'yellow',
position: 5,
},
{
key: 'misx',
value: 'MISX',
label: 'MISX',
color: 'pink',
position: 6,
},
{
key: 'neoe',
value: 'NEOE',
label: 'NEOE',
color: 'cyan',
position: 7,
},
{
key: 'xams',
value: 'XAMS',
label: 'XAMS',
color: 'brown',
position: 8,
},
{
key: 'xase',
value: 'XASE',
label: 'XASE',
color: 'lime',
position: 9,
},
{
key: 'xasx',
value: 'XASX',
label: 'XASX',
color: 'violet',
position: 10,
},
{
key: 'xber',
value: 'XBER',
label: 'XBER',
color: 'gold',
position: 11,
},
{
key: 'xbkk',
value: 'XBKK',
label: 'XBKK',
color: 'turquoise',
position: 12,
},
{
key: 'xbog',
value: 'XBOG',
label: 'XBOG',
color: 'crimson',
position: 13,
},
{
key: 'xbom',
value: 'XBOM',
label: 'XBOM',
color: 'sky',
position: 14,
},
{
key: 'xbru',
value: 'XBRU',
label: 'XBRU',
color: 'amber',
position: 15,
},
{
key: 'xbsp',
value: 'XBSP',
label: 'XBSP',
color: 'plum',
position: 16,
},
{
key: 'xbud',
value: 'XBUD',
label: 'XBUD',
color: 'grass',
position: 17,
},
{
key: 'xbue',
value: 'XBUE',
label: 'XBUE',
color: 'tomato',
position: 18,
},
{
key: 'xcai',
value: 'XCAI',
label: 'XCAI',
color: 'iris',
position: 19,
},
{
key: 'xcbo',
value: 'XCBO',
label: 'XCBO',
color: 'mint',
position: 20,
},
{
key: 'xcnq',
value: 'XCNQ',
label: 'XCNQ',
color: 'ruby',
position: 21,
},
{
key: 'xcse',
value: 'XCSE',
label: 'XCSE',
color: 'bronze',
position: 22,
},
{
key: 'xdfm',
value: 'XDFM',
label: 'XDFM',
color: 'jade',
position: 23,
},
{
key: 'xdub',
value: 'XDUB',
label: 'XDUB',
color: 'gray',
position: 24,
},
{
key: 'xdus',
value: 'XDUS',
label: 'XDUS',
color: 'blue',
position: 25,
},
{
key: 'xeqy',
value: 'XEQY',
label: 'XEQY',
color: 'red',
position: 26,
},
{
key: 'xfra',
value: 'XFRA',
label: 'XFRA',
color: 'green',
position: 27,
},
{
key: 'xham',
value: 'XHAM',
label: 'XHAM',
color: 'orange',
position: 28,
},
{
key: 'xhel',
value: 'XHEL',
label: 'XHEL',
color: 'purple',
position: 29,
},
{
key: 'xhkg',
value: 'XHKG',
label: 'XHKG',
color: 'yellow',
position: 30,
},
{
key: 'xice',
value: 'XICE',
label: 'XICE',
color: 'pink',
position: 31,
},
{
key: 'xidx',
value: 'XIDX',
label: 'XIDX',
color: 'cyan',
position: 32,
},
{
key: 'xjpx',
value: 'XJPX',
label: 'XJPX',
color: 'brown',
position: 33,
},
{
key: 'xjse',
value: 'XJSE',
label: 'XJSE',
color: 'lime',
position: 34,
},
{
key: 'xkls',
value: 'XKLS',
label: 'XKLS',
color: 'violet',
position: 35,
},
{
key: 'xkos',
value: 'XKOS',
label: 'XKOS',
color: 'gold',
position: 36,
},
{
key: 'xkrx',
value: 'XKRX',
label: 'XKRX',
color: 'turquoise',
position: 37,
},
{
key: 'xkuw',
value: 'XKUW',
label: 'XKUW',
color: 'crimson',
position: 38,
},
{
key: 'xlis',
value: 'XLIS',
label: 'XLIS',
color: 'sky',
position: 39,
},
{
key: 'xlon',
value: 'XLON',
label: 'XLON',
color: 'amber',
position: 40,
},
{
key: 'xmad',
value: 'XMAD',
label: 'XMAD',
color: 'plum',
position: 41,
},
{
key: 'xmex',
value: 'XMEX',
label: 'XMEX',
color: 'grass',
position: 42,
},
{
key: 'xmil',
value: 'XMIL',
label: 'XMIL',
color: 'tomato',
position: 43,
},
{
key: 'xmun',
value: 'XMUN',
label: 'XMUN',
color: 'iris',
position: 44,
},
{
key: 'xnas',
value: 'XNAS',
label: 'XNAS',
color: 'mint',
position: 45,
},
{
key: 'xnse',
value: 'XNSE',
label: 'XNSE',
color: 'ruby',
position: 46,
},
{
key: 'xnys',
value: 'XNYS',
label: 'XNYS',
color: 'bronze',
position: 47,
},
{
key: 'xnze',
value: 'XNZE',
label: 'XNZE',
color: 'jade',
position: 48,
},
{
key: 'xosl',
value: 'XOSL',
label: 'XOSL',
color: 'gray',
position: 49,
},
{
key: 'xotc',
value: 'XOTC',
label: 'XOTC',
color: 'blue',
position: 50,
},
{
key: 'xpar',
value: 'XPAR',
label: 'XPAR',
color: 'red',
position: 51,
},
{
key: 'xpra',
value: 'XPRA',
label: 'XPRA',
color: 'green',
position: 52,
},
{
key: 'xris',
value: 'XRIS',
label: 'XRIS',
color: 'orange',
position: 53,
},
{
key: 'xsau',
value: 'XSAU',
label: 'XSAU',
color: 'purple',
position: 54,
},
{
key: 'xses',
value: 'XSES',
label: 'XSES',
color: 'yellow',
position: 55,
},
{
key: 'xsgo',
value: 'XSGO',
label: 'XSGO',
color: 'pink',
position: 56,
},
{
key: 'xshe',
value: 'XSHE',
label: 'XSHE',
color: 'cyan',
position: 57,
},
{
key: 'xshg',
value: 'XSHG',
label: 'XSHG',
color: 'brown',
position: 58,
},
{
key: 'xstc',
value: 'XSTC',
label: 'XSTC',
color: 'lime',
position: 59,
},
{
key: 'xsto',
value: 'XSTO',
label: 'XSTO',
color: 'violet',
position: 60,
},
{
key: 'xstu',
value: 'XSTU',
label: 'XSTU',
color: 'gold',
position: 61,
},
{
key: 'xswx',
value: 'XSWX',
label: 'XSWX',
color: 'turquoise',
position: 62,
},
{
key: 'xtae',
value: 'XTAE',
label: 'XTAE',
color: 'crimson',
position: 63,
},
{
key: 'xtai',
value: 'XTAI',
label: 'XTAI',
color: 'sky',
position: 64,
},
{
key: 'xtal',
value: 'XTAL',
label: 'XTAL',
color: 'amber',
position: 65,
},
{
key: 'xtse',
value: 'XTSE',
label: 'XTSE',
color: 'plum',
position: 66,
},
{
key: 'xtsx',
value: 'XTSX',
label: 'XTSX',
color: 'grass',
position: 67,
},
{
key: 'xwar',
value: 'XWAR',
label: 'XWAR',
color: 'tomato',
position: 68,
},
{
key: 'xwbo',
value: 'XWBO',
label: 'XWBO',
color: 'iris',
position: 69,
},
];
@@ -0,0 +1,74 @@
import { type SelectOptionMeta } from 'src/types/select-option-meta.type';
export const SENIORITY_OPTIONS: readonly SelectOptionMeta[] = [
{
key: 'cxo',
value: 'CXO',
label: 'CXO',
color: 'blue',
position: 0,
},
{
key: 'owner',
value: 'OWNER',
label: 'Owner',
color: 'red',
position: 1,
},
{
key: 'vp',
value: 'VP',
label: 'VP',
color: 'green',
position: 2,
},
{
key: 'director',
value: 'DIRECTOR',
label: 'Director',
color: 'orange',
position: 3,
},
{
key: 'partner',
value: 'PARTNER',
label: 'Partner',
color: 'purple',
position: 4,
},
{
key: 'senior',
value: 'SENIOR',
label: 'Senior',
color: 'yellow',
position: 5,
},
{
key: 'manager',
value: 'MANAGER',
label: 'Manager',
color: 'pink',
position: 6,
},
{
key: 'entry',
value: 'ENTRY',
label: 'Entry',
color: 'cyan',
position: 7,
},
{
key: 'training',
value: 'TRAINING',
label: 'Training',
color: 'brown',
position: 8,
},
{
key: 'unpaid',
value: 'UNPAID',
label: 'Unpaid',
color: 'lime',
position: 9,
},
];
@@ -0,0 +1,18 @@
import { type SelectOptionMeta } from 'src/types/select-option-meta.type';
export const SEX_OPTIONS: readonly SelectOptionMeta[] = [
{
key: 'male',
value: 'MALE',
label: 'Male',
color: 'blue',
position: 0,
},
{
key: 'female',
value: 'FEMALE',
label: 'Female',
color: 'red',
position: 1,
},
];
@@ -4,6 +4,13 @@ export const APPLICATION_UNIVERSAL_IDENTIFIER =
export const DEFAULT_ROLE_UNIVERSAL_IDENTIFIER =
'abb2aa9f-8e9c-4e8b-a336-f864ee78b7cd';
export const PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS = {
enrichPerson: '65356a82-6734-4fc9-8172-7d30ed1b7859',
enrichPersonTool: 'c1539ca9-6f57-4036-a2a7-621ec23a66e6',
enrichCompany: 'c769fb49-d495-469f-a58f-1a69ab90ec24',
enrichCompanyTool: '88d126e1-a8f4-49f2-883f-39a7fa69cede',
} as const;
export const PDL_FIELD_UNIVERSAL_IDENTIFIERS = {
person: {
pdlId: 'f6c45913-4ad7-4889-8b70-6e49fbae72cf',
@@ -21,7 +28,6 @@ export const PDL_FIELD_UNIVERSAL_IDENTIFIERS = {
pdlRawPayload: '91153108-0576-4da8-a58d-bf8bfc693af1',
pdlLastEnrichedAt: '437e08e7-4a94-45af-9def-f202d54ea910',
pdlLocation: 'e25302a6-72ed-41e9-a089-1789a1e7ff3c',
pdlCurrentCompany: '0ed142f6-f4b9-4517-a4ad-4c09da25ef21',
pdlLinkedinUsername: 'b897abde-d051-459e-8761-1f8cdc2a93a5',
pdlFacebookUrl: '733a1f4e-43d7-4450-aaee-03436c6f3df8',
pdlProfiles: '63fd9ead-07a0-42b0-b230-17fb5c1b2666',
@@ -40,12 +46,6 @@ export const PDL_FIELD_UNIVERSAL_IDENTIFIERS = {
pdlCertifications: '02006f53-8c32-48a0-9738-73c38ad9412d',
pdlSummary: '243d13f9-74e7-4638-9f9a-33fe76d584dd',
pdlJobOnetCode: '48f70f1b-cad8-44e4-a27e-5dc26edfd391',
pdlJobCompanyName: '1426a17d-09c2-48aa-bd49-3adffeb2ec59',
pdlJobCompanyId: '3c8cd41b-1974-4da0-975c-1b3c18c436d9',
pdlJobCompanyWebsite: '7e44f20d-2443-4e33-999d-9c3b575112e1',
pdlJobCompanyLinkedinUrl: '3035757a-c93a-4d1f-9fb2-e4b581ea6cfa',
pdlJobCompanyIndustry: '4c37d4f1-3bf9-4881-afce-bbbc1e113832',
pdlJobCompanySize: '1c7c4e5a-fafa-4c7b-b4a7-3bf0b0ca07c5',
pdlLocationMetro: 'f5e7434d-c8f5-4eab-866b-59693c9e7111',
pdlLikelihood: '50583b08-f422-4964-a9ff-a4e4d6f7a6f0',
pdlEnrichmentStatus: 'f03774c1-2b8b-4c62-89af-6add78efc4df',
@@ -66,7 +66,6 @@ export const PDL_FIELD_UNIVERSAL_IDENTIFIERS = {
pdlFundingStages: 'ced2c9d6-93ea-40de-9636-c0e719b9dc0b',
pdlRawPayload: 'cc5bb8e5-c60d-4791-b838-3526942d6548',
pdlLastEnrichedAt: '4fd64027-0ba9-4d2c-85eb-26ff90b7c721',
pdlCurrentEmployees: 'e654855f-1f10-462b-9721-cdf953c9b1bb',
pdlLinkedinId: 'dd57bf00-e5b5-414d-a811-5480dac3b537',
pdlFacebookUrl: '4f7fe9ad-5c4f-451c-9dc0-d368e669879f',
pdlAlternativeNames: 'c53914e4-58b3-4fc2-b04b-94305675e130',
@@ -1090,155 +1089,6 @@ export const PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS = {
wireless: '3702d3db-f99b-44a3-b7ff-4bea043050db',
writingAndEditing: 'e25ffec5-db05-4488-85a6-4578c9ce1c9c',
},
personJobCompanyIndustry: {
accounting: 'c7646bb3-309c-4f7e-bd92-1145cd8fc53e',
airlinesAviation: 'ce4b50c2-81ce-473f-832c-d03dad5eb15c',
alternativeDisputeResolution: 'f3adb3b8-6d55-44f9-83d2-8c314f9e1b7f',
alternativeMedicine: 'e50695b4-e961-424c-ba35-f1552afb2972',
animation: '3025feb7-36ef-4c7c-94f3-0e6d8c198b12',
apparelFashion: '25f1bcec-3c54-48e7-8f27-5d1c905fc8b9',
architecturePlanning: 'ab4dee7a-3b6c-4494-b9c1-bd6cece38372',
artsAndCrafts: 'c61baa2c-3fba-444b-ab7d-a057b15a86d0',
automotive: 'dbc0cb0b-4d91-4ed9-be79-51bbf07e0ad2',
aviationAerospace: '73bf83ab-7ae0-438e-8c16-aff98d7a1bf5',
banking: 'b8358792-323c-4d65-af43-a550fba41896',
biotechnology: 'caa1993b-b5bc-4a38-bb35-461e9ac64cd9',
broadcastMedia: 'ebce7aa1-6d24-48f4-afa9-1ce469496447',
buildingMaterials: 'd0b16ab4-690a-4676-b88d-69b1879e5d6e',
businessSuppliesAndEquipment: '98c3aa81-d777-4b09-b94d-bf3a64214917',
capitalMarkets: 'af0ce50f-8d50-489e-962a-cf360bdb4b69',
chemicals: '11a423de-7ddd-466e-8914-bd8cd54e8a14',
civicSocialOrganization: 'e81d39f0-5411-49ab-90ab-d6fc1341d7f5',
civilEngineering: '30d1ce66-d5f9-4839-af59-0beca8b77bc4',
commercialRealEstate: '907f9a17-4090-4ff7-ad92-1fb1f2e14d7d',
computerNetworkSecurity: '6bd9dfae-fa74-48f1-83c9-59005daaa95a',
computerGames: '6587be1f-4d50-4155-846f-ea26da225f40',
computerHardware: 'fff38d7e-a166-4c6a-96b7-f28209b73136',
computerNetworking: 'f172e9f0-4217-4f59-ba31-0d6eaac5939f',
computerSoftware: '40092912-7856-4a92-b39f-8f17c7d477a7',
construction: '847712c3-37e8-4030-9735-5a04fccef373',
consumerElectronics: 'b76caec2-ce78-4aec-a1a5-d8a1b7a5b337',
consumerGoods: '3e59570f-4791-4545-aea8-1992cdc7af08',
consumerServices: '53ddcc27-a1d1-426e-9950-172ad4ac53f5',
cosmetics: '27740b0f-76a5-477d-a7e3-6335e5d1886f',
dairy: 'fdccb7e6-033f-460a-a237-e1b3ff8eeeb3',
defenseSpace: 'd87f7ba9-4f64-4b1c-a3cb-e4b26ffe9b28',
design: 'c58ea607-1436-42c6-b49b-01bede5d65be',
eLearning: '4dd2bbef-04f5-41a1-852c-a9066e9b56f4',
educationManagement: '5f99d759-6789-4e32-967b-53de2d247e65',
electricalElectronicManufacturing: '8ba94c6e-3d42-45d1-8a37-abfe0c916b09',
entertainment: '2534f3b2-2efd-4399-9189-ae0e80dea0b8',
environmentalServices: '4899a93c-912c-4969-a86d-481a9976cf7b',
eventsServices: '7a3af453-5241-4dd4-9962-4355a1569d26',
executiveOffice: 'e5563e78-6ebf-4ab4-a094-83f67b110c2a',
facilitiesServices: '4794543b-ade7-4975-a723-85d0c3c25e1f',
farming: '8ebd9eab-4fa9-45e4-8763-2386aa704729',
financialServices: '352126e6-b731-4531-bb55-45ed262b8790',
fineArt: 'e797e22f-f467-4e02-9678-6895183b12af',
fishery: 'f20950cd-5338-48b2-a368-19e3c5f54090',
foodBeverages: '0d25b31f-9715-4ef9-bb08-9332cd111a49',
foodProduction: '3509b838-e3e4-4b85-a2f7-c9350197a14e',
fundRaising: 'fd0d42aa-0b4e-46ef-b319-389bd77968d0',
furniture: '3e4a3b44-edeb-4266-aad7-64524e3db97b',
gamblingCasinos: '5e7bd38d-f0e1-4b8a-9085-d62bbbe5210d',
glassCeramicsConcrete: 'c0e67757-aaf3-40b3-833b-80c76f37c51c',
governmentAdministration: '930f7ae7-063a-429a-8130-6e4aed9b8f41',
governmentRelations: '26fe8ba1-c71a-4ad3-8026-ec3c147effe1',
graphicDesign: '124ba3b2-2557-4e63-9090-62ec0963f8d3',
healthWellnessAndFitness: 'a40465be-5a7a-44e3-a823-f5b9419c5be0',
higherEducation: 'cf1b074d-8cf5-484f-828e-2d2f9d037ad2',
hospitalHealthCare: '059bd3c7-88e6-468b-9842-81d33556ac17',
hospitality: '4df1f2ea-82a3-4ff4-890b-1cbe1f3203e7',
humanResources: '123531cc-7f88-4c0b-bd98-74c7fbe4ccbb',
importAndExport: '2053fa78-d93a-461d-8e84-695099a5e0b7',
individualFamilyServices: '48ecdf2b-faab-4979-904a-0d082bfcc83e',
industrialAutomation: 'be305ba6-fab3-4952-9fa0-2b4dc682b145',
informationServices: '40ae4e28-2c3a-416d-9f66-214808ec0cbf',
informationTechnologyAndServices: '58fc2d7c-a2e0-4284-b263-ff34f5a37d1b',
insurance: 'f3c59c70-6ad4-446e-97e1-27c5ea251c82',
internationalAffairs: '88b3db39-344c-4df7-a21b-9841d6d5e3c9',
internationalTradeAndDevelopment: 'f0b3eca1-3e03-402c-8398-ffcbd8148880',
internet: '26c060e8-e8bc-4ac6-a25a-e547cafd0050',
investmentBanking: '5ee3fbdc-2965-46f8-9b40-e748ce9cbe17',
investmentManagement: '76ffc3b2-6228-44fb-9cb9-9cf8cfff35ed',
judiciary: '373db33d-eae8-4946-a6b7-377a78bfc210',
lawEnforcement: 'cdaff85b-db82-4ef2-9493-51ab9523076b',
lawPractice: 'b26a48d2-1fec-444a-a39c-64b476588899',
legalServices: 'a7d8ff6a-a754-4a05-9830-d9b20e34160c',
legislativeOffice: '3f80fd4c-d564-468e-9808-9b43cb3167d0',
leisureTravelTourism: '3e7560d7-77af-4181-9f7e-38bb8d17a8b4',
libraries: '988b13ae-7bb1-472b-a991-bf040d079b11',
logisticsAndSupplyChain: 'c6cb1c2c-53d0-46f0-8004-0d9962d6106d',
luxuryGoodsJewelry: '15ac9e52-adb5-48e3-893d-87789511a966',
machinery: '509fbd7a-0a44-4f94-aa5c-685cce3faba4',
managementConsulting: '3a3d9a9b-f72c-4cde-bb76-ef9458bdc516',
maritime: '028d0304-43ba-48f6-aac9-33971bd5aac2',
marketResearch: '32f05431-ca91-456f-a1cf-8e45f64be5d2',
marketingAndAdvertising: '6e0c1593-b08a-4fe2-a985-186706777c13',
mechanicalOrIndustrialEngineering: '72a8c609-7ed2-454d-ae28-5ed7c10932ab',
mediaProduction: 'd82defb2-294b-4552-af09-0d0b3e3f87e4',
medicalDevices: 'efe813c7-5d54-4a8a-b97e-4290f670d1da',
medicalPractice: '58bad1fd-667f-40ca-ba18-aac0396a02b4',
mentalHealthCare: 'f03985f0-5cc7-4850-b97c-a7ea425cbee0',
military: '4a410e16-54ef-4312-bd3f-36c2ee36943e',
miningMetals: 'cd00c312-130f-49c8-9942-00ea24553ba5',
motionPicturesAndFilm: '5d935c3c-c8a3-4e51-a593-da3dbbab5783',
museumsAndInstitutions: 'd4c2a66f-88ae-4e2a-b3fd-855951d0376c',
music: '74cebb0e-dfa6-4fe4-9e10-2055d7265078',
nanotechnology: '1f02fa05-1464-4e32-9090-230ad2d0557b',
newspapers: 'b62a3423-075c-4bf9-a78c-528754df2841',
nonProfitOrganizationManagement: '92ae1c10-12c5-423d-bb73-6f7730c5d282',
oilEnergy: '3bea7331-2355-4a37-8604-3e83a363ef1b',
onlineMedia: '2f893d39-9975-44cf-a607-072be812d9a4',
outsourcingOffshoring: '29f227ec-2a83-418a-8bde-7627dd25add3',
packageFreightDelivery: '652bfc40-a5be-4191-a9ed-10db3f5ba059',
packagingAndContainers: '223e7263-2e3a-4a39-bef0-5a5c95759d7d',
paperForestProducts: '083402a8-f06d-4b0f-9654-2d4e0c51d4ae',
performingArts: 'd74ee411-6486-47ba-b0e2-56e606249a91',
pharmaceuticals: '99a8dae3-60a3-4cd5-80e6-a83651a28146',
philanthropy: '1744e009-9330-42e4-98ad-23da6d1cc898',
photography: 'a93a38e3-847e-4280-bb9a-cf7269115e13',
plastics: '8b06307f-df3b-45e2-adf6-f01b6c9a44a2',
politicalOrganization: '1a40650c-ed34-4d3e-97b9-70bfd48b1606',
primarySecondaryEducation: 'aeaa7034-3847-4e2b-83c6-5ad3c2c7370b',
printing: '29c4dd98-5f87-436f-8a9a-846daf36e648',
professionalTrainingCoaching: 'ddc493cb-208f-4c8f-b122-23cbe45c0ffe',
programDevelopment: 'e83e628a-9f57-4727-925f-37114ce125c1',
publicPolicy: '58c6e64d-e5a9-495d-b3ed-87987f976c4f',
publicRelationsAndCommunications: '19bc1020-8038-4be4-a4b5-be85e54c7535',
publicSafety: '69f06a55-17d5-4c4c-94ba-44625ec8e1f5',
publishing: '95e47f5e-d02b-4707-8510-c1310158260b',
railroadManufacture: '1eff24a9-db0f-463a-a9c6-2bdebd760ec6',
ranching: 'd3f2e4ad-d933-4cc0-ae2d-65f925bee53d',
realEstate: '9b81a975-c52e-46d2-b853-334a484f24e5',
recreationalFacilitiesAndServices: 'a2b4ba9b-65b7-4f06-8f99-78b4b03a5a8b',
religiousInstitutions: '9dc283bc-dfb2-4a7f-bce7-433ce0e4c22d',
renewablesEnvironment: 'dffe3cc0-13d3-48f4-8a72-f8f5509d97e5',
research: 'f3a47e4f-30c4-4b02-8cb0-8d493518ce57',
restaurants: 'ec0efd93-dffe-465d-9dfe-d23e91c3aa71',
retail: '143fdd79-0167-4701-b910-0640b69e6909',
securityAndInvestigations: '4072f339-ee30-465a-af76-0f58d8469e25',
semiconductors: 'c1103955-5e09-4f78-bfc2-9366c18bf22e',
shipbuilding: '2d6481c3-d46b-4e67-9328-dd2e22eacc02',
sportingGoods: 'ed197d67-bf55-4e50-a1ca-264c93a62961',
sports: '5183468a-5b8d-4442-9ea3-9a45de9a7630',
staffingAndRecruiting: '5e610095-5d70-4816-a56d-b9fc0705e0b0',
supermarkets: '4531f90a-d45a-4f84-8066-da2987fc46e6',
telecommunications: '94c7b837-0f22-4fca-a7a2-8951cf869c81',
textiles: 'a09422a2-e181-4faa-b904-3816b52bb7ee',
thinkTanks: 'c434dbe6-fa9a-4af1-8b40-9165b6a34530',
tobacco: '16ebae0f-59fc-4b8d-932f-840d54ae8b5c',
translationAndLocalization: 'b94949a2-bf18-4cd3-943a-c381540d088e',
transportationTruckingRailroad: '19882453-428c-4179-8614-a5e43dd40e5a',
utilities: '911dfaf3-d735-4fdb-92c0-d038dc993144',
ventureCapitalPrivateEquity: '478e405c-b780-45a9-9979-0910a9d10a40',
veterinary: '2ed603fb-0491-4386-82ca-d5e43bbcdd51',
warehousing: 'e0758679-11f6-45cf-af21-da21e297edbc',
wholesale: '14d5d2c2-cd70-4436-9e42-2cb913f942e8',
wineAndSpirits: 'd470d512-1736-4fe2-8c96-af30d8f03e60',
wireless: 'dcf165e4-c123-436f-bd52-b6ddafcb3d74',
writingAndEditing: 'a78d7014-682e-4455-a3d1-9f0c4bb21b01',
},
companyIndustry: {
accounting: '67406afe-dd7e-4a39-a86b-394e1f3b7428',
airlinesAviation: '6e5ea79c-fc34-4fd1-aaf0-67d94585ad84',
@@ -1516,16 +1366,6 @@ export const PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS = {
from150000To250000: '063ce36e-51ff-4dc2-86eb-3a4b2f823297',
over250000: 'fc3658bf-dec7-443b-84f3-0770f3aae62f',
},
personJobCompanySize: {
oneToTen: '9a958c46-b3e3-4e36-ba2f-08b5e0dd1ee7',
elevenToFifty: 'b383e032-cf52-4082-ba2e-67b02228e283',
fiftyOneToTwoHundred: '32fb12cb-49aa-4fbf-b683-365cea2f8d30',
twoHundredOneToFiveHundred: '333ec4cb-e922-4b80-8830-13bf89d600a0',
fiveHundredOneToOneThousand: '8d1612c8-5991-4d98-8901-f86effd8bd79',
oneThousandOneToFiveThousand: '77383346-4ec3-4c45-9473-4687ee8d58af',
fiveThousandOneToTenThousand: '9d654179-01b3-4694-ac24-f03f14023d4a',
tenThousandOnePlus: '2ff37073-c0ca-4893-ac0c-d0f52cce1ee2',
},
companyLocationContinent: {
africa: '0efd52cc-6ee3-4890-81ab-0a12a6c56d81',
antarctica: '68bdf16c-bf40-445f-86b6-093c51ed6416',
@@ -15,5 +15,6 @@ export default defineField({
name: 'pdlAffiliatedProfiles',
label: 'Affiliated Profiles',
description: 'Affiliated company profiles returned by People Data Labs.',
icon: 'IconAffiliate',
isNullable: true,
});
@@ -15,5 +15,6 @@ export default defineField({
name: 'pdlAlternativeDomains',
label: 'Alternative Domains',
description: 'Alternative domains returned by People Data Labs.',
icon: 'IconWorldWww',
isNullable: true,
});
@@ -15,5 +15,6 @@ export default defineField({
name: 'pdlAlternativeNames',
label: 'Alternative Names',
description: 'Alternative names returned by People Data Labs.',
icon: 'IconSignature',
isNullable: true,
});
@@ -4,10 +4,12 @@ import {
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk/define';
import { COMPANY_TYPE_OPTIONS } from 'src/constants/company-type-options';
import {
PDL_FIELD_UNIVERSAL_IDENTIFIERS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS,
} from 'src/constants/universal-identifiers';
import { buildSelectOptions } from 'src/utils/build-select-options';
export default defineField({
universalIdentifier: PDL_FIELD_UNIVERSAL_IDENTIFIERS.company.pdlCompanyType,
@@ -17,49 +19,10 @@ export default defineField({
name: 'pdlCompanyType',
label: 'Company Type',
description: 'People Data Labs canonical company type.',
icon: 'IconBuildingCommunity',
isNullable: true,
options: [
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyType.public,
value: 'PUBLIC',
label: 'Public',
color: 'blue',
position: 0,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyType.private,
value: 'PRIVATE',
label: 'Private',
color: 'red',
position: 1,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyType.publicSubsidiary,
value: 'PUBLIC_SUBSIDIARY',
label: 'Public Subsidiary',
color: 'green',
position: 2,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyType.educational,
value: 'EDUCATIONAL',
label: 'Educational',
color: 'orange',
position: 3,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyType.government,
value: 'GOVERNMENT',
label: 'Government',
color: 'purple',
position: 4,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyType.nonprofit,
value: 'NONPROFIT',
label: 'Nonprofit',
color: 'yellow',
position: 5,
},
],
options: buildSelectOptions(
COMPANY_TYPE_OPTIONS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyType,
),
});
@@ -1,28 +0,0 @@
import {
defineField,
FieldType,
RelationType,
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk/define';
import { PDL_FIELD_UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers';
export default defineField({
universalIdentifier:
PDL_FIELD_UNIVERSAL_IDENTIFIERS.company.pdlCurrentEmployees,
objectUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.universalIdentifier,
type: FieldType.RELATION,
name: 'pdlCurrentEmployees',
label: 'PDL Current Employees',
description:
'People whose current employer is this company, per People Data Labs.',
relationTargetObjectMetadataUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
relationTargetFieldMetadataUniversalIdentifier:
PDL_FIELD_UNIVERSAL_IDENTIFIERS.person.pdlCurrentCompany,
universalSettings: {
relationType: RelationType.ONE_TO_MANY,
},
icon: 'IconUsers',
});
@@ -16,5 +16,6 @@ export default defineField({
label: 'Employee Count by Country',
description:
'Employee count broken down by country returned by People Data Labs.',
icon: 'IconMapPins',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlEmployeeCount',
label: 'Employees',
description: 'Exact employee count returned by People Data Labs.',
icon: 'IconUsersGroup',
isNullable: true,
});
@@ -20,6 +20,7 @@ export default defineField({
name: 'pdlEnrichmentStatus',
label: 'Enrichment Status',
description: 'Outcome of the latest People Data Labs enrichment attempt.',
icon: 'IconProgressCheck',
isNullable: true,
options: buildSelectOptions(
ENRICHMENT_STATUS_OPTIONS,
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlFacebookUrl',
label: 'Facebook',
description: 'Facebook page returned by People Data Labs.',
icon: 'IconBrandFacebook',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlFoundedYear',
label: 'Founded Year',
description: 'Founding year returned by People Data Labs.',
icon: 'IconFlag',
isNullable: true,
});
@@ -19,6 +19,7 @@ export default defineField({
name: 'pdlFundingStages',
label: 'Funding Stages',
description: 'People Data Labs canonical funding stages.',
icon: 'IconChartArrowsVertical',
isNullable: true,
options: buildSelectOptions(
FUNDING_STAGE_OPTIONS,
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlHeadline',
label: 'Headline',
description: 'People Data Labs company headline or summary.',
icon: 'IconQuote',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlId',
label: 'PDL ID',
description: 'People Data Labs company identifier.',
icon: 'IconId',
isNullable: true,
});
@@ -15,5 +15,6 @@ export default defineField({
name: 'pdlIndustryDetail',
label: 'Industry (detailed)',
description: 'Detailed People Data Labs industry v2 value.',
icon: 'IconBuildingFactory',
isNullable: true,
});
@@ -19,6 +19,7 @@ export default defineField({
name: 'pdlIndustry',
label: 'Industry',
description: 'People Data Labs canonical industry.',
icon: 'IconBuildingFactory2',
isNullable: true,
options: buildSelectOptions(
INDUSTRY_OPTIONS,
@@ -15,5 +15,6 @@ export default defineField({
name: 'pdlLastEnrichedAt',
label: 'Last Enriched At',
description: 'Timestamp of the latest People Data Labs enrichment.',
icon: 'IconClock',
isNullable: true,
});
@@ -15,5 +15,6 @@ export default defineField({
name: 'pdlLastFundingDate',
label: 'Last Funding Date',
description: 'Date of the latest funding round returned by People Data Labs.',
icon: 'IconCalendar',
isNullable: true,
});
@@ -20,6 +20,7 @@ export default defineField({
name: 'pdlLatestFundingStage',
label: 'Latest Funding Stage',
description: 'People Data Labs canonical latest funding stage.',
icon: 'IconTrendingUp',
isNullable: true,
options: buildSelectOptions(
FUNDING_STAGE_OPTIONS,
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlLinkedinId',
label: 'LinkedIn ID',
description: 'LinkedIn identifier returned by People Data Labs.',
icon: 'IconBrandLinkedin',
isNullable: true,
});
@@ -4,10 +4,12 @@ import {
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk/define';
import { LOCATION_CONTINENT_OPTIONS } from 'src/constants/location-continent-options';
import {
PDL_FIELD_UNIVERSAL_IDENTIFIERS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS,
} from 'src/constants/universal-identifiers';
import { buildSelectOptions } from 'src/utils/build-select-options';
export default defineField({
universalIdentifier:
@@ -18,62 +20,10 @@ export default defineField({
name: 'pdlLocationContinent',
label: 'Continent',
description: 'People Data Labs canonical continent.',
icon: 'IconGlobe',
isNullable: true,
options: [
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyLocationContinent
.africa,
value: 'AFRICA',
label: 'Africa',
color: 'blue',
position: 0,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyLocationContinent
.antarctica,
value: 'ANTARCTICA',
label: 'Antarctica',
color: 'red',
position: 1,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyLocationContinent.asia,
value: 'ASIA',
label: 'Asia',
color: 'green',
position: 2,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyLocationContinent
.europe,
value: 'EUROPE',
label: 'Europe',
color: 'orange',
position: 3,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyLocationContinent
.northAmerica,
value: 'NORTH_AMERICA',
label: 'North America',
color: 'purple',
position: 4,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyLocationContinent
.oceania,
value: 'OCEANIA',
label: 'Oceania',
color: 'yellow',
position: 5,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyLocationContinent
.southAmerica,
value: 'SOUTH_AMERICA',
label: 'South America',
color: 'pink',
position: 6,
},
],
options: buildSelectOptions(
LOCATION_CONTINENT_OPTIONS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyLocationContinent,
),
});
@@ -19,6 +19,7 @@ export default defineField({
name: 'pdlLocationMetro',
label: 'Metro Area',
description: 'People Data Labs canonical metro area.',
icon: 'IconMap2',
isNullable: true,
options: buildSelectOptions(
METRO_OPTIONS,
@@ -4,10 +4,12 @@ import {
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk/define';
import { MIC_EXCHANGE_OPTIONS } from 'src/constants/mic-exchange-options';
import {
PDL_FIELD_UNIVERSAL_IDENTIFIERS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS,
} from 'src/constants/universal-identifiers';
import { buildSelectOptions } from 'src/utils/build-select-options';
export default defineField({
universalIdentifier: PDL_FIELD_UNIVERSAL_IDENTIFIERS.company.pdlMicExchange,
@@ -17,497 +19,10 @@ export default defineField({
name: 'pdlMicExchange',
label: 'Stock Exchange (MIC)',
description: 'People Data Labs canonical market identifier code.',
icon: 'IconBuildingBank',
isNullable: true,
options: [
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.aqse,
value: 'AQSE',
label: 'AQSE',
color: 'blue',
position: 0,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.arcx,
value: 'ARCX',
label: 'ARCX',
color: 'red',
position: 1,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.asex,
value: 'ASEX',
label: 'ASEX',
color: 'green',
position: 2,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.bcxe,
value: 'BCXE',
label: 'BCXE',
color: 'orange',
position: 3,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.bvmf,
value: 'BVMF',
label: 'BVMF',
color: 'purple',
position: 4,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.dsmd,
value: 'DSMD',
label: 'DSMD',
color: 'yellow',
position: 5,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.misx,
value: 'MISX',
label: 'MISX',
color: 'pink',
position: 6,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.neoe,
value: 'NEOE',
label: 'NEOE',
color: 'cyan',
position: 7,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xams,
value: 'XAMS',
label: 'XAMS',
color: 'brown',
position: 8,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xase,
value: 'XASE',
label: 'XASE',
color: 'lime',
position: 9,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xasx,
value: 'XASX',
label: 'XASX',
color: 'violet',
position: 10,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xber,
value: 'XBER',
label: 'XBER',
color: 'gold',
position: 11,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xbkk,
value: 'XBKK',
label: 'XBKK',
color: 'turquoise',
position: 12,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xbog,
value: 'XBOG',
label: 'XBOG',
color: 'crimson',
position: 13,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xbom,
value: 'XBOM',
label: 'XBOM',
color: 'sky',
position: 14,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xbru,
value: 'XBRU',
label: 'XBRU',
color: 'amber',
position: 15,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xbsp,
value: 'XBSP',
label: 'XBSP',
color: 'plum',
position: 16,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xbud,
value: 'XBUD',
label: 'XBUD',
color: 'grass',
position: 17,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xbue,
value: 'XBUE',
label: 'XBUE',
color: 'tomato',
position: 18,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xcai,
value: 'XCAI',
label: 'XCAI',
color: 'iris',
position: 19,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xcbo,
value: 'XCBO',
label: 'XCBO',
color: 'mint',
position: 20,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xcnq,
value: 'XCNQ',
label: 'XCNQ',
color: 'ruby',
position: 21,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xcse,
value: 'XCSE',
label: 'XCSE',
color: 'bronze',
position: 22,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xdfm,
value: 'XDFM',
label: 'XDFM',
color: 'jade',
position: 23,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xdub,
value: 'XDUB',
label: 'XDUB',
color: 'gray',
position: 24,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xdus,
value: 'XDUS',
label: 'XDUS',
color: 'blue',
position: 25,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xeqy,
value: 'XEQY',
label: 'XEQY',
color: 'red',
position: 26,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xfra,
value: 'XFRA',
label: 'XFRA',
color: 'green',
position: 27,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xham,
value: 'XHAM',
label: 'XHAM',
color: 'orange',
position: 28,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xhel,
value: 'XHEL',
label: 'XHEL',
color: 'purple',
position: 29,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xhkg,
value: 'XHKG',
label: 'XHKG',
color: 'yellow',
position: 30,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xice,
value: 'XICE',
label: 'XICE',
color: 'pink',
position: 31,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xidx,
value: 'XIDX',
label: 'XIDX',
color: 'cyan',
position: 32,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xjpx,
value: 'XJPX',
label: 'XJPX',
color: 'brown',
position: 33,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xjse,
value: 'XJSE',
label: 'XJSE',
color: 'lime',
position: 34,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xkls,
value: 'XKLS',
label: 'XKLS',
color: 'violet',
position: 35,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xkos,
value: 'XKOS',
label: 'XKOS',
color: 'gold',
position: 36,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xkrx,
value: 'XKRX',
label: 'XKRX',
color: 'turquoise',
position: 37,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xkuw,
value: 'XKUW',
label: 'XKUW',
color: 'crimson',
position: 38,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xlis,
value: 'XLIS',
label: 'XLIS',
color: 'sky',
position: 39,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xlon,
value: 'XLON',
label: 'XLON',
color: 'amber',
position: 40,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xmad,
value: 'XMAD',
label: 'XMAD',
color: 'plum',
position: 41,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xmex,
value: 'XMEX',
label: 'XMEX',
color: 'grass',
position: 42,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xmil,
value: 'XMIL',
label: 'XMIL',
color: 'tomato',
position: 43,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xmun,
value: 'XMUN',
label: 'XMUN',
color: 'iris',
position: 44,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xnas,
value: 'XNAS',
label: 'XNAS',
color: 'mint',
position: 45,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xnse,
value: 'XNSE',
label: 'XNSE',
color: 'ruby',
position: 46,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xnys,
value: 'XNYS',
label: 'XNYS',
color: 'bronze',
position: 47,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xnze,
value: 'XNZE',
label: 'XNZE',
color: 'jade',
position: 48,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xosl,
value: 'XOSL',
label: 'XOSL',
color: 'gray',
position: 49,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xotc,
value: 'XOTC',
label: 'XOTC',
color: 'blue',
position: 50,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xpar,
value: 'XPAR',
label: 'XPAR',
color: 'red',
position: 51,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xpra,
value: 'XPRA',
label: 'XPRA',
color: 'green',
position: 52,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xris,
value: 'XRIS',
label: 'XRIS',
color: 'orange',
position: 53,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xsau,
value: 'XSAU',
label: 'XSAU',
color: 'purple',
position: 54,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xses,
value: 'XSES',
label: 'XSES',
color: 'yellow',
position: 55,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xsgo,
value: 'XSGO',
label: 'XSGO',
color: 'pink',
position: 56,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xshe,
value: 'XSHE',
label: 'XSHE',
color: 'cyan',
position: 57,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xshg,
value: 'XSHG',
label: 'XSHG',
color: 'brown',
position: 58,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xstc,
value: 'XSTC',
label: 'XSTC',
color: 'lime',
position: 59,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xsto,
value: 'XSTO',
label: 'XSTO',
color: 'violet',
position: 60,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xstu,
value: 'XSTU',
label: 'XSTU',
color: 'gold',
position: 61,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xswx,
value: 'XSWX',
label: 'XSWX',
color: 'turquoise',
position: 62,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xtae,
value: 'XTAE',
label: 'XTAE',
color: 'crimson',
position: 63,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xtai,
value: 'XTAI',
label: 'XTAI',
color: 'sky',
position: 64,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xtal,
value: 'XTAL',
label: 'XTAL',
color: 'amber',
position: 65,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xtse,
value: 'XTSE',
label: 'XTSE',
color: 'plum',
position: 66,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xtsx,
value: 'XTSX',
label: 'XTSX',
color: 'grass',
position: 67,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xwar,
value: 'XWAR',
label: 'XWAR',
color: 'tomato',
position: 68,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange.xwbo,
value: 'XWBO',
label: 'XWBO',
color: 'iris',
position: 69,
},
],
options: buildSelectOptions(
MIC_EXCHANGE_OPTIONS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.companyMicExchange,
),
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlNaics',
label: 'NAICS Codes',
description: 'NAICS classification codes returned by People Data Labs.',
icon: 'IconNumbers',
isNullable: true,
});
@@ -15,5 +15,6 @@ export default defineField({
name: 'pdlNumberFundingRounds',
label: 'Number of Funding Rounds',
description: 'Number of funding rounds returned by People Data Labs.',
icon: 'IconCoins',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlRawPayload',
label: 'PDL Raw Payload',
description: 'Full People Data Labs company enrichment response.',
icon: 'IconBraces',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlSic',
label: 'SIC Codes',
description: 'SIC classification codes returned by People Data Labs.',
icon: 'IconHash',
isNullable: true,
});
@@ -19,6 +19,7 @@ export default defineField({
name: 'pdlSizeRange',
label: 'Employee Range',
description: 'People Data Labs canonical self-reported employee range.',
icon: 'IconChartBar',
isNullable: true,
options: buildSelectOptions(
SIZE_OPTIONS,
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlSummary',
label: 'Summary',
description: 'Company summary returned by People Data Labs.',
icon: 'IconFileText',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlTags',
label: 'Tags',
description: 'Tags returned by People Data Labs.',
icon: 'IconTags',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlTicker',
label: 'Ticker',
description: 'Company ticker returned by People Data Labs.',
icon: 'IconChartCandle',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlTotalFunding',
label: 'Total Funding Raised',
description: 'Total funding raised in USD returned by People Data Labs.',
icon: 'IconReportMoney',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlTwitterUrl',
label: 'X / Twitter',
description: 'X or Twitter company profile returned by People Data Labs.',
icon: 'IconBrandX',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlBirthDate',
label: 'Birth Date',
description: 'Birth date returned by People Data Labs.',
icon: 'IconCake',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlBirthYear',
label: 'Birth Year',
description: 'Birth year returned by People Data Labs.',
icon: 'IconCalendar',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlCertifications',
label: 'Certifications',
description: 'Certifications returned by People Data Labs.',
icon: 'IconCertificate',
isNullable: true,
});
@@ -1,26 +0,0 @@
import {
defineField,
FieldType,
RelationType,
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk/define';
import { PDL_FIELD_UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers';
export default defineField({
universalIdentifier: PDL_FIELD_UNIVERSAL_IDENTIFIERS.person.pdlCurrentCompany,
objectUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
type: FieldType.RELATION,
name: 'pdlCurrentCompany',
label: 'PDL Current Company',
description: 'Current employer detected by People Data Labs.',
relationTargetObjectMetadataUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.company.universalIdentifier,
relationTargetFieldMetadataUniversalIdentifier:
PDL_FIELD_UNIVERSAL_IDENTIFIERS.company.pdlCurrentEmployees,
universalSettings: {
relationType: RelationType.MANY_TO_ONE,
},
icon: 'IconBuilding',
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlEducation',
label: 'Education History',
description: 'Education history returned by People Data Labs.',
icon: 'IconSchool',
isNullable: true,
});
@@ -20,6 +20,7 @@ export default defineField({
name: 'pdlEnrichmentStatus',
label: 'Enrichment Status',
description: 'Outcome of the latest People Data Labs enrichment attempt.',
icon: 'IconProgressCheck',
isNullable: true,
options: buildSelectOptions(
ENRICHMENT_STATUS_OPTIONS,
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlExperience',
label: 'Experience History',
description: 'Experience history returned by People Data Labs.',
icon: 'IconTimeline',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlFacebookUrl',
label: 'Facebook',
description: 'Facebook profile returned by People Data Labs.',
icon: 'IconBrandFacebook',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlGithubUrl',
label: 'GitHub',
description: 'GitHub profile returned by People Data Labs.',
icon: 'IconBrandGithub',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlHeadline',
label: 'Headline',
description: 'People Data Labs person headline or job summary.',
icon: 'IconQuote',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlId',
label: 'PDL ID',
description: 'People Data Labs person identifier.',
icon: 'IconId',
isNullable: true,
});
@@ -19,6 +19,7 @@ export default defineField({
name: 'pdlIndustry',
label: 'Industry',
description: 'People Data Labs canonical industry.',
icon: 'IconBuildingFactory2',
isNullable: true,
options: buildSelectOptions(
INDUSTRY_OPTIONS,
@@ -4,10 +4,12 @@ import {
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk/define';
import { INFERRED_SALARY_OPTIONS } from 'src/constants/inferred-salary-options';
import {
PDL_FIELD_UNIVERSAL_IDENTIFIERS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS,
} from 'src/constants/universal-identifiers';
import { buildSelectOptions } from 'src/utils/build-select-options';
export default defineField({
universalIdentifier: PDL_FIELD_UNIVERSAL_IDENTIFIERS.person.pdlInferredSalary,
@@ -17,95 +19,10 @@ export default defineField({
name: 'pdlInferredSalary',
label: 'Inferred Salary (range)',
description: 'People Data Labs canonical inferred salary range.',
icon: 'IconCurrencyDollar',
isNullable: true,
options: [
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personInferredSalary
.under20000,
value: 'UNDER_20000',
label: '<20,000',
color: 'blue',
position: 0,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personInferredSalary
.from20000To25000,
value: 'FROM_20000_TO_25000',
label: '20,000-25,000',
color: 'red',
position: 1,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personInferredSalary
.from25000To35000,
value: 'FROM_25000_TO_35000',
label: '25,000-35,000',
color: 'green',
position: 2,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personInferredSalary
.from35000To45000,
value: 'FROM_35000_TO_45000',
label: '35,000-45,000',
color: 'orange',
position: 3,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personInferredSalary
.from45000To55000,
value: 'FROM_45000_TO_55000',
label: '45,000-55,000',
color: 'purple',
position: 4,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personInferredSalary
.from55000To70000,
value: 'FROM_55000_TO_70000',
label: '55,000-70,000',
color: 'yellow',
position: 5,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personInferredSalary
.from70000To85000,
value: 'FROM_70000_TO_85000',
label: '70,000-85,000',
color: 'pink',
position: 6,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personInferredSalary
.from85000To100000,
value: 'FROM_85000_TO_100000',
label: '85,000-100,000',
color: 'cyan',
position: 7,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personInferredSalary
.from100000To150000,
value: 'FROM_100000_TO_150000',
label: '100,000-150,000',
color: 'brown',
position: 8,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personInferredSalary
.from150000To250000,
value: 'FROM_150000_TO_250000',
label: '150,000-250,000',
color: 'lime',
position: 9,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personInferredSalary
.over250000,
value: 'OVER_250000',
label: '>250,000',
color: 'violet',
position: 10,
},
],
options: buildSelectOptions(
INFERRED_SALARY_OPTIONS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personInferredSalary,
),
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlInterests',
label: 'Interests',
description: 'Interests returned by People Data Labs.',
icon: 'IconHeart',
isNullable: true,
});
@@ -1,18 +0,0 @@
import {
defineField,
FieldType,
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk/define';
import { PDL_FIELD_UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers';
export default defineField({
universalIdentifier: PDL_FIELD_UNIVERSAL_IDENTIFIERS.person.pdlJobCompanyId,
objectUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
type: FieldType.TEXT,
name: 'pdlJobCompanyId',
label: 'Current Company PDL ID',
description: 'Current company PDL identifier returned by People Data Labs.',
isNullable: true,
});
@@ -1,29 +0,0 @@
import {
defineField,
FieldType,
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk/define';
import { INDUSTRY_OPTIONS } from 'src/constants/industry-options';
import {
PDL_FIELD_UNIVERSAL_IDENTIFIERS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS,
} from 'src/constants/universal-identifiers';
import { buildSelectOptions } from 'src/utils/build-select-options';
export default defineField({
universalIdentifier:
PDL_FIELD_UNIVERSAL_IDENTIFIERS.person.pdlJobCompanyIndustry,
objectUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
type: FieldType.SELECT,
name: 'pdlJobCompanyIndustry',
label: 'Current Company Industry',
description:
'Current company canonical industry returned by People Data Labs.',
isNullable: true,
options: buildSelectOptions(
INDUSTRY_OPTIONS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobCompanyIndustry,
),
});
@@ -1,19 +0,0 @@
import {
defineField,
FieldType,
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk/define';
import { PDL_FIELD_UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers';
export default defineField({
universalIdentifier:
PDL_FIELD_UNIVERSAL_IDENTIFIERS.person.pdlJobCompanyLinkedinUrl,
objectUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
type: FieldType.LINKS,
name: 'pdlJobCompanyLinkedinUrl',
label: 'Current Company LinkedIn',
description: 'Current company LinkedIn returned by People Data Labs.',
isNullable: true,
});
@@ -1,18 +0,0 @@
import {
defineField,
FieldType,
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk/define';
import { PDL_FIELD_UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers';
export default defineField({
universalIdentifier: PDL_FIELD_UNIVERSAL_IDENTIFIERS.person.pdlJobCompanyName,
objectUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
type: FieldType.TEXT,
name: 'pdlJobCompanyName',
label: 'Current Company',
description: 'Current company name returned by People Data Labs.',
isNullable: true,
});
@@ -1,27 +0,0 @@
import {
defineField,
FieldType,
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk/define';
import { SIZE_OPTIONS } from 'src/constants/size-options';
import {
PDL_FIELD_UNIVERSAL_IDENTIFIERS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS,
} from 'src/constants/universal-identifiers';
import { buildSelectOptions } from 'src/utils/build-select-options';
export default defineField({
universalIdentifier: PDL_FIELD_UNIVERSAL_IDENTIFIERS.person.pdlJobCompanySize,
objectUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
type: FieldType.SELECT,
name: 'pdlJobCompanySize',
label: 'Current Company Size',
description: 'Current company size range returned by People Data Labs.',
isNullable: true,
options: buildSelectOptions(
SIZE_OPTIONS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobCompanySize,
),
});
@@ -1,19 +0,0 @@
import {
defineField,
FieldType,
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk/define';
import { PDL_FIELD_UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers';
export default defineField({
universalIdentifier:
PDL_FIELD_UNIVERSAL_IDENTIFIERS.person.pdlJobCompanyWebsite,
objectUniversalIdentifier:
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS.person.universalIdentifier,
type: FieldType.LINKS,
name: 'pdlJobCompanyWebsite',
label: 'Current Company Website',
description: 'Current company website returned by People Data Labs.',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlJobHistory',
label: 'Job History',
description: 'Job history returned by People Data Labs.',
icon: 'IconHistory',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlJobOnetCode',
label: 'O*NET Code',
description: 'O*NET occupation code returned by People Data Labs.',
icon: 'IconBarcode',
isNullable: true,
});
@@ -4,10 +4,12 @@ import {
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk/define';
import { JOB_ROLE_OPTIONS } from 'src/constants/job-role-options';
import {
PDL_FIELD_UNIVERSAL_IDENTIFIERS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS,
} from 'src/constants/universal-identifiers';
import { buildSelectOptions } from 'src/utils/build-select-options';
export default defineField({
universalIdentifier: PDL_FIELD_UNIVERSAL_IDENTIFIERS.person.pdlJobRole,
@@ -17,175 +19,10 @@ export default defineField({
name: 'pdlJobRole',
label: 'Job Role',
description: 'People Data Labs canonical job title role.',
icon: 'IconBriefcase',
isNullable: true,
options: [
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.advisory,
value: 'ADVISORY',
label: 'Advisory',
color: 'blue',
position: 0,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.analyst,
value: 'ANALYST',
label: 'Analyst',
color: 'red',
position: 1,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.creative,
value: 'CREATIVE',
label: 'Creative',
color: 'green',
position: 2,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.education,
value: 'EDUCATION',
label: 'Education',
color: 'orange',
position: 3,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.engineering,
value: 'ENGINEERING',
label: 'Engineering',
color: 'purple',
position: 4,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.finance,
value: 'FINANCE',
label: 'Finance',
color: 'yellow',
position: 5,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.fulfillment,
value: 'FULFILLMENT',
label: 'Fulfillment',
color: 'pink',
position: 6,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.health,
value: 'HEALTH',
label: 'Health',
color: 'cyan',
position: 7,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.hospitality,
value: 'HOSPITALITY',
label: 'Hospitality',
color: 'brown',
position: 8,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.humanResources,
value: 'HUMAN_RESOURCES',
label: 'Human Resources',
color: 'lime',
position: 9,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.legal,
value: 'LEGAL',
label: 'Legal',
color: 'violet',
position: 10,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.manufacturing,
value: 'MANUFACTURING',
label: 'Manufacturing',
color: 'gold',
position: 11,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.marketing,
value: 'MARKETING',
label: 'Marketing',
color: 'turquoise',
position: 12,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.operations,
value: 'OPERATIONS',
label: 'Operations',
color: 'crimson',
position: 13,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.partnerships,
value: 'PARTNERSHIPS',
label: 'Partnerships',
color: 'sky',
position: 14,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.product,
value: 'PRODUCT',
label: 'Product',
color: 'amber',
position: 15,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.professionalService,
value: 'PROFESSIONAL_SERVICE',
label: 'Professional Service',
color: 'plum',
position: 16,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.publicService,
value: 'PUBLIC_SERVICE',
label: 'Public Service',
color: 'grass',
position: 17,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.research,
value: 'RESEARCH',
label: 'Research',
color: 'tomato',
position: 18,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.sales,
value: 'SALES',
label: 'Sales',
color: 'iris',
position: 19,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.salesEngineering,
value: 'SALES_ENGINEERING',
label: 'Sales Engineering',
color: 'mint',
position: 20,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.support,
value: 'SUPPORT',
label: 'Support',
color: 'ruby',
position: 21,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.trade,
value: 'TRADE',
label: 'Trade',
color: 'bronze',
position: 22,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole.unemployed,
value: 'UNEMPLOYED',
label: 'Unemployed',
color: 'jade',
position: 23,
},
],
options: buildSelectOptions(
JOB_ROLE_OPTIONS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.jobRole,
),
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlJobStartDate',
label: 'Job Start Date',
description: 'Current job start date returned by People Data Labs.',
icon: 'IconCalendarTime',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlJobSummary',
label: 'Job Summary',
description: 'Current job summary returned by People Data Labs.',
icon: 'IconFileDescription',
isNullable: true,
});
@@ -4,10 +4,12 @@ import {
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk/define';
import { JOB_TITLE_CLASS_OPTIONS } from 'src/constants/job-title-class-options';
import {
PDL_FIELD_UNIVERSAL_IDENTIFIERS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS,
} from 'src/constants/universal-identifiers';
import { buildSelectOptions } from 'src/utils/build-select-options';
export default defineField({
universalIdentifier: PDL_FIELD_UNIVERSAL_IDENTIFIERS.person.pdlJobTitleClass,
@@ -17,45 +19,10 @@ export default defineField({
name: 'pdlJobTitleClass',
label: 'Job Class',
description: 'People Data Labs canonical job class.',
icon: 'IconCategory',
isNullable: true,
options: [
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobClass
.generalAndAdministrative,
value: 'GENERAL_AND_ADMINISTRATIVE',
label: 'General and Administrative',
color: 'blue',
position: 0,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobClass
.researchAndDevelopment,
value: 'RESEARCH_AND_DEVELOPMENT',
label: 'Research and Development',
color: 'red',
position: 1,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobClass
.salesAndMarketing,
value: 'SALES_AND_MARKETING',
label: 'Sales and Marketing',
color: 'green',
position: 2,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobClass.services,
value: 'SERVICES',
label: 'Services',
color: 'orange',
position: 3,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobClass.unemployed,
value: 'UNEMPLOYED',
label: 'Unemployed',
color: 'purple',
position: 4,
},
],
options: buildSelectOptions(
JOB_TITLE_CLASS_OPTIONS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobClass,
),
});
@@ -4,10 +4,12 @@ import {
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk/define';
import { JOB_TITLE_SUB_ROLE_OPTIONS } from 'src/constants/job-title-sub-role-options';
import {
PDL_FIELD_UNIVERSAL_IDENTIFIERS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS,
} from 'src/constants/universal-identifiers';
import { buildSelectOptions } from 'src/utils/build-select-options';
export default defineField({
universalIdentifier:
@@ -18,786 +20,10 @@ export default defineField({
name: 'pdlJobTitleSubRole',
label: 'Job Sub-Role',
description: 'People Data Labs canonical job sub-role.',
icon: 'IconSubtask',
isNullable: true,
options: [
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.academic,
value: 'ACADEMIC',
label: 'Academic',
color: 'blue',
position: 0,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.accountExecutive,
value: 'ACCOUNT_EXECUTIVE',
label: 'Account Executive',
color: 'red',
position: 1,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.accountManagement,
value: 'ACCOUNT_MANAGEMENT',
label: 'Account Management',
color: 'green',
position: 2,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.accounting,
value: 'ACCOUNTING',
label: 'Accounting',
color: 'orange',
position: 3,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.accountingServices,
value: 'ACCOUNTING_SERVICES',
label: 'Accounting Services',
color: 'purple',
position: 4,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.administrative,
value: 'ADMINISTRATIVE',
label: 'Administrative',
color: 'yellow',
position: 5,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.advisor,
value: 'ADVISOR',
label: 'Advisor',
color: 'pink',
position: 6,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.agriculture,
value: 'AGRICULTURE',
label: 'Agriculture',
color: 'cyan',
position: 7,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.aides,
value: 'AIDES',
label: 'Aides',
color: 'brown',
position: 8,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.architecture,
value: 'ARCHITECTURE',
label: 'Architecture',
color: 'lime',
position: 9,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.artist,
value: 'ARTIST',
label: 'Artist',
color: 'violet',
position: 10,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.boardMember,
value: 'BOARD_MEMBER',
label: 'Board Member',
color: 'gold',
position: 11,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.bookkeeping,
value: 'BOOKKEEPING',
label: 'Bookkeeping',
color: 'turquoise',
position: 12,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.brand,
value: 'BRAND',
label: 'Brand',
color: 'crimson',
position: 13,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.buildingAndGrounds,
value: 'BUILDING_AND_GROUNDS',
label: 'Building and Grounds',
color: 'sky',
position: 14,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.businessAnalyst,
value: 'BUSINESS_ANALYST',
label: 'Business Analyst',
color: 'amber',
position: 15,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.businessDevelopment,
value: 'BUSINESS_DEVELOPMENT',
label: 'Business Development',
color: 'plum',
position: 16,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.chemical,
value: 'CHEMICAL',
label: 'Chemical',
color: 'grass',
position: 17,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.compliance,
value: 'COMPLIANCE',
label: 'Compliance',
color: 'tomato',
position: 18,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.construction,
value: 'CONSTRUCTION',
label: 'Construction',
color: 'iris',
position: 19,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.consulting,
value: 'CONSULTING',
label: 'Consulting',
color: 'mint',
position: 20,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.content,
value: 'CONTENT',
label: 'Content',
color: 'ruby',
position: 21,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.corporateDevelopment,
value: 'CORPORATE_DEVELOPMENT',
label: 'Corporate Development',
color: 'bronze',
position: 22,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.curation,
value: 'CURATION',
label: 'Curation',
color: 'jade',
position: 23,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.customerSuccess,
value: 'CUSTOMER_SUCCESS',
label: 'Customer Success',
color: 'gray',
position: 24,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.customerSupport,
value: 'CUSTOMER_SUPPORT',
label: 'Customer Support',
color: 'blue',
position: 25,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.dataAnalyst,
value: 'DATA_ANALYST',
label: 'Data Analyst',
color: 'red',
position: 26,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.dataEngineering,
value: 'DATA_ENGINEERING',
label: 'Data Engineering',
color: 'green',
position: 27,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.dataScience,
value: 'DATA_SCIENCE',
label: 'Data Science',
color: 'orange',
position: 28,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.dental,
value: 'DENTAL',
label: 'Dental',
color: 'purple',
position: 29,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.devops,
value: 'DEVOPS',
label: 'DevOps',
color: 'yellow',
position: 30,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.doctor,
value: 'DOCTOR',
label: 'Doctor',
color: 'pink',
position: 31,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.electric,
value: 'ELECTRIC',
label: 'Electric',
color: 'cyan',
position: 32,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.electrical,
value: 'ELECTRICAL',
label: 'Electrical',
color: 'brown',
position: 33,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.emergencyServices,
value: 'EMERGENCY_SERVICES',
label: 'Emergency Services',
color: 'lime',
position: 34,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.entertainment,
value: 'ENTERTAINMENT',
label: 'Entertainment',
color: 'violet',
position: 35,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.executive,
value: 'EXECUTIVE',
label: 'Executive',
color: 'gold',
position: 36,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.fashion,
value: 'FASHION',
label: 'Fashion',
color: 'turquoise',
position: 37,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.financial,
value: 'FINANCIAL',
label: 'Financial',
color: 'crimson',
position: 38,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.fitness,
value: 'FITNESS',
label: 'Fitness',
color: 'sky',
position: 39,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.fraud,
value: 'FRAUD',
label: 'Fraud',
color: 'amber',
position: 40,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.graphicDesign,
value: 'GRAPHIC_DESIGN',
label: 'Graphic Design',
color: 'plum',
position: 41,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.growth,
value: 'GROWTH',
label: 'Growth',
color: 'grass',
position: 42,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.hairStylist,
value: 'HAIR_STYLIST',
label: 'Hair Stylist',
color: 'tomato',
position: 43,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.hardware,
value: 'HARDWARE',
label: 'Hardware',
color: 'iris',
position: 44,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.healthAndSafety,
value: 'HEALTH_AND_SAFETY',
label: 'Health and Safety',
color: 'mint',
position: 45,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.humanResources,
value: 'HUMAN_RESOURCES',
label: 'Human Resources',
color: 'ruby',
position: 46,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.implementation,
value: 'IMPLEMENTATION',
label: 'Implementation',
color: 'bronze',
position: 47,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.industrial,
value: 'INDUSTRIAL',
label: 'Industrial',
color: 'jade',
position: 48,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.informationTechnology,
value: 'INFORMATION_TECHNOLOGY',
label: 'Information Technology',
color: 'gray',
position: 49,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.insurance,
value: 'INSURANCE',
label: 'Insurance',
color: 'blue',
position: 50,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.investmentBanking,
value: 'INVESTMENT_BANKING',
label: 'Investment Banking',
color: 'red',
position: 51,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.investor,
value: 'INVESTOR',
label: 'Investor',
color: 'green',
position: 52,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.investorRelations,
value: 'INVESTOR_RELATIONS',
label: 'Investor Relations',
color: 'orange',
position: 53,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.journalism,
value: 'JOURNALISM',
label: 'Journalism',
color: 'purple',
position: 54,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.judicial,
value: 'JUDICIAL',
label: 'Judicial',
color: 'yellow',
position: 55,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.legal,
value: 'LEGAL',
label: 'Legal',
color: 'pink',
position: 56,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.legalServices,
value: 'LEGAL_SERVICES',
label: 'Legal Services',
color: 'cyan',
position: 57,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.logistics,
value: 'LOGISTICS',
label: 'Logistics',
color: 'brown',
position: 58,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.machinist,
value: 'MACHINIST',
label: 'Machinist',
color: 'lime',
position: 59,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.marketingDesign,
value: 'MARKETING_DESIGN',
label: 'Marketing Design',
color: 'violet',
position: 60,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.marketingServices,
value: 'MARKETING_SERVICES',
label: 'Marketing Services',
color: 'gold',
position: 61,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.mechanic,
value: 'MECHANIC',
label: 'Mechanic',
color: 'turquoise',
position: 62,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.mechanical,
value: 'MECHANICAL',
label: 'Mechanical',
color: 'crimson',
position: 63,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.military,
value: 'MILITARY',
label: 'Military',
color: 'sky',
position: 64,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.network,
value: 'NETWORK',
label: 'Network',
color: 'amber',
position: 65,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.nursing,
value: 'NURSING',
label: 'Nursing',
color: 'plum',
position: 66,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.partnerships,
value: 'PARTNERSHIPS',
label: 'Partnerships',
color: 'grass',
position: 67,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.pharmacy,
value: 'PHARMACY',
label: 'Pharmacy',
color: 'tomato',
position: 68,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.planningAndAnalysis,
value: 'PLANNING_AND_ANALYSIS',
label: 'Planning and Analysis',
color: 'iris',
position: 69,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.plumbing,
value: 'PLUMBING',
label: 'Plumbing',
color: 'mint',
position: 70,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.political,
value: 'POLITICAL',
label: 'Political',
color: 'ruby',
position: 71,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.primaryAndSecondary,
value: 'PRIMARY_AND_SECONDARY',
label: 'Primary and Secondary',
color: 'bronze',
position: 72,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.procurement,
value: 'PROCUREMENT',
label: 'Procurement',
color: 'jade',
position: 73,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.productDesign,
value: 'PRODUCT_DESIGN',
label: 'Product Design',
color: 'gray',
position: 74,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.productManagement,
value: 'PRODUCT_MANAGEMENT',
label: 'Product Management',
color: 'blue',
position: 75,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.professor,
value: 'PROFESSOR',
label: 'Professor',
color: 'red',
position: 76,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.projectManagement,
value: 'PROJECT_MANAGEMENT',
label: 'Project Management',
color: 'green',
position: 77,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.protectiveService,
value: 'PROTECTIVE_SERVICE',
label: 'Protective Service',
color: 'orange',
position: 78,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.qaEngineering,
value: 'QA_ENGINEERING',
label: 'QA Engineering',
color: 'purple',
position: 79,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.qualityAssurance,
value: 'QUALITY_ASSURANCE',
label: 'Quality Assurance',
color: 'yellow',
position: 80,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.realtor,
value: 'REALTOR',
label: 'Realtor',
color: 'pink',
position: 81,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.recruiting,
value: 'RECRUITING',
label: 'Recruiting',
color: 'cyan',
position: 82,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.restaurants,
value: 'RESTAURANTS',
label: 'Restaurants',
color: 'brown',
position: 83,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.retail,
value: 'RETAIL',
label: 'Retail',
color: 'lime',
position: 84,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.revenueOperations,
value: 'REVENUE_OPERATIONS',
label: 'Revenue Operations',
color: 'violet',
position: 85,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.risk,
value: 'RISK',
label: 'Risk',
color: 'gold',
position: 86,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.salesDevelopment,
value: 'SALES_DEVELOPMENT',
label: 'Sales Development',
color: 'turquoise',
position: 87,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.scientific,
value: 'SCIENTIFIC',
label: 'Scientific',
color: 'crimson',
position: 88,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.security,
value: 'SECURITY',
label: 'Security',
color: 'sky',
position: 89,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.socialService,
value: 'SOCIAL_SERVICE',
label: 'Social Service',
color: 'amber',
position: 90,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.software,
value: 'SOFTWARE',
label: 'Software',
color: 'plum',
position: 91,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.solutionsEngineer,
value: 'SOLUTIONS_ENGINEER',
label: 'Solutions Engineer',
color: 'grass',
position: 92,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.strategy,
value: 'STRATEGY',
label: 'Strategy',
color: 'tomato',
position: 93,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.student,
value: 'STUDENT',
label: 'Student',
color: 'iris',
position: 94,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.talentAnalytics,
value: 'TALENT_ANALYTICS',
label: 'Talent Analytics',
color: 'mint',
position: 95,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.therapy,
value: 'THERAPY',
label: 'Therapy',
color: 'ruby',
position: 96,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole
.tourAndTravel,
value: 'TOUR_AND_TRAVEL',
label: 'Tour and Travel',
color: 'bronze',
position: 97,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.training,
value: 'TRAINING',
label: 'Training',
color: 'jade',
position: 98,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.translation,
value: 'TRANSLATION',
label: 'Translation',
color: 'gray',
position: 99,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.transport,
value: 'TRANSPORT',
label: 'Transport',
color: 'blue',
position: 100,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.unemployed,
value: 'UNEMPLOYED',
label: 'Unemployed',
color: 'red',
position: 101,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.veterinarian,
value: 'VETERINARIAN',
label: 'Veterinarian',
color: 'green',
position: 102,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.warehouse,
value: 'WAREHOUSE',
label: 'Warehouse',
color: 'orange',
position: 103,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.web,
value: 'WEB',
label: 'Web',
color: 'purple',
position: 104,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole.wellness,
value: 'WELLNESS',
label: 'Wellness',
color: 'yellow',
position: 105,
},
],
options: buildSelectOptions(
JOB_TITLE_SUB_ROLE_OPTIONS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.personJobSubRole,
),
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlLanguages',
label: 'Languages',
description: 'Languages returned by People Data Labs.',
icon: 'IconLanguage',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlLastEnrichedAt',
label: 'Last Enriched At',
description: 'Timestamp of the latest People Data Labs enrichment.',
icon: 'IconClock',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlLikelihood',
label: 'Match Likelihood',
description: 'People Data Labs match confidence score (1-10).',
icon: 'IconGauge',
isNullable: true,
});
@@ -15,5 +15,6 @@ export default defineField({
name: 'pdlLinkedinConnections',
label: 'LinkedIn Connections',
description: 'LinkedIn connection count returned by People Data Labs.',
icon: 'IconAffiliate',
isNullable: true,
});
@@ -15,5 +15,6 @@ export default defineField({
name: 'pdlLinkedinUsername',
label: 'LinkedIn Username',
description: 'LinkedIn username returned by People Data Labs.',
icon: 'IconBrandLinkedin',
isNullable: true,
});
@@ -19,6 +19,7 @@ export default defineField({
name: 'pdlLocationMetro',
label: 'Metro Area',
description: 'People Data Labs canonical metro area.',
icon: 'IconMap2',
isNullable: true,
options: buildSelectOptions(
METRO_OPTIONS,
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlLocation',
label: 'Location',
description: 'Location returned by People Data Labs.',
icon: 'IconMapPin',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlNameAliases',
label: 'Name Aliases',
description: 'Name aliases returned by People Data Labs.',
icon: 'IconSignature',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlProfiles',
label: 'Social Profiles',
description: 'All social profiles returned by People Data Labs.',
icon: 'IconUserCircle',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlRawPayload',
label: 'PDL Raw Payload',
description: 'Full People Data Labs person enrichment response.',
icon: 'IconBraces',
isNullable: true,
});
@@ -4,10 +4,12 @@ import {
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk/define';
import { SENIORITY_OPTIONS } from 'src/constants/seniority-options';
import {
PDL_FIELD_UNIVERSAL_IDENTIFIERS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS,
} from 'src/constants/universal-identifiers';
import { buildSelectOptions } from 'src/utils/build-select-options';
export default defineField({
universalIdentifier: PDL_FIELD_UNIVERSAL_IDENTIFIERS.person.pdlSeniority,
@@ -17,77 +19,10 @@ export default defineField({
name: 'pdlSeniority',
label: 'Seniority',
description: 'People Data Labs canonical job title levels.',
icon: 'IconStairsUp',
isNullable: true,
options: [
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.seniority.cxo,
value: 'CXO',
label: 'CXO',
color: 'blue',
position: 0,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.seniority.owner,
value: 'OWNER',
label: 'Owner',
color: 'red',
position: 1,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.seniority.vp,
value: 'VP',
label: 'VP',
color: 'green',
position: 2,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.seniority.director,
value: 'DIRECTOR',
label: 'Director',
color: 'orange',
position: 3,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.seniority.partner,
value: 'PARTNER',
label: 'Partner',
color: 'purple',
position: 4,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.seniority.senior,
value: 'SENIOR',
label: 'Senior',
color: 'yellow',
position: 5,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.seniority.manager,
value: 'MANAGER',
label: 'Manager',
color: 'pink',
position: 6,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.seniority.entry,
value: 'ENTRY',
label: 'Entry',
color: 'cyan',
position: 7,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.seniority.training,
value: 'TRAINING',
label: 'Training',
color: 'brown',
position: 8,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.seniority.unpaid,
value: 'UNPAID',
label: 'Unpaid',
color: 'lime',
position: 9,
},
],
options: buildSelectOptions(
SENIORITY_OPTIONS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.seniority,
),
});
@@ -4,10 +4,12 @@ import {
STANDARD_OBJECT_UNIVERSAL_IDENTIFIERS,
} from 'twenty-sdk/define';
import { SEX_OPTIONS } from 'src/constants/sex-options';
import {
PDL_FIELD_UNIVERSAL_IDENTIFIERS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS,
} from 'src/constants/universal-identifiers';
import { buildSelectOptions } from 'src/utils/build-select-options';
export default defineField({
universalIdentifier: PDL_FIELD_UNIVERSAL_IDENTIFIERS.person.pdlSex,
@@ -17,21 +19,10 @@ export default defineField({
name: 'pdlSex',
label: 'Sex',
description: 'Sex returned by People Data Labs.',
icon: 'IconGenderBigender',
isNullable: true,
options: [
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.sex.male,
value: 'MALE',
label: 'Male',
color: 'blue',
position: 0,
},
{
id: PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.sex.female,
value: 'FEMALE',
label: 'Female',
color: 'red',
position: 1,
},
],
options: buildSelectOptions(
SEX_OPTIONS,
PDL_SELECT_OPTION_UNIVERSAL_IDENTIFIERS.sex,
),
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlSkills',
label: 'Skills',
description: 'Skills returned by People Data Labs.',
icon: 'IconBulb',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlSummary',
label: 'Summary',
description: 'Profile summary returned by People Data Labs.',
icon: 'IconFileText',
isNullable: true,
});
@@ -14,5 +14,6 @@ export default defineField({
name: 'pdlTwitterUrl',
label: 'X / Twitter',
description: 'X or Twitter profile returned by People Data Labs.',
icon: 'IconBrandX',
isNullable: true,
});
@@ -16,5 +16,6 @@ export default defineField({
label: 'Years of Experience',
description:
'Inferred years of professional experience from People Data Labs.',
icon: 'IconHourglass',
isNullable: true,
});
@@ -0,0 +1,11 @@
import { type CompanyNode } from 'src/types/company-node.type';
export const COMPANY_NODE_MOCK: CompanyNode = {
id: 'c1',
name: '',
domainName: { primaryLinkUrl: 'acme.com' },
linkedinLink: null,
address: null,
pdlId: null,
pdlLastEnrichedAt: null,
};
@@ -0,0 +1,35 @@
import { type CoreApiClient } from 'twenty-client-sdk/core';
import { vi } from 'vitest';
type Resolver<TResult> = TResult | ((request: unknown) => TResult);
type CoreApiClientMockOptions = {
queryResult?: Resolver<unknown>;
mutationResult?: Resolver<unknown>;
onMutation?: (request: unknown) => void;
};
const resolve = <TResult>(
resolver: Resolver<TResult> | undefined,
request: unknown,
): TResult | undefined =>
typeof resolver === 'function'
? (resolver as (request: unknown) => TResult)(request)
: resolver;
export const createCoreApiClientMock = ({
queryResult,
mutationResult,
onMutation,
}: CoreApiClientMockOptions = {}): CoreApiClient => {
const query = vi.fn((request: unknown) =>
Promise.resolve(resolve(queryResult, request)),
);
const mutation = vi.fn((request: unknown) => {
onMutation?.(request);
return Promise.resolve(resolve(mutationResult, request) ?? {});
});
return { query, mutation } as unknown as CoreApiClient;
};
@@ -0,0 +1,27 @@
import { type PdlCompanyData } from 'src/types/pdl-company-data.type';
export const PDL_COMPANY_DATA_MOCK: PdlCompanyData = {
id: 'pdl-company-1',
display_name: 'Acme Corp',
website: 'acme.com',
linkedin_url: 'https://linkedin.com/company/acme',
industry: 'accounting',
type: 'private',
size: '51-200',
employee_count: 120,
founded: 2001,
total_funding_raised: 1234.5,
latest_funding_stage: 'series_a',
funding_stages: ['seed', 'series_a', 'not-a-stage'],
last_funding_date: '2020-05',
number_funding_rounds: 3,
tags: ['saas', 'b2b'],
naics: [{ naics_code: '541511' }],
location: {
locality: 'San Francisco',
region: 'California',
postal_code: '94107',
country: 'United States',
continent: 'north america',
},
};
@@ -0,0 +1,23 @@
import { type PdlPersonData } from 'src/types/pdl-person-data.type';
export const PDL_PERSON_DATA_MOCK: PdlPersonData = {
id: 'pdl-person-1',
first_name: 'Jane',
last_name: 'Doe',
work_email: 'jane.doe@acme.com',
personal_emails: ['jane@personal.com'],
job_title: 'Chief Executive Officer',
linkedin_url: 'https://linkedin.com/in/janedoe',
industry: 'accounting',
job_title_role: 'engineering',
job_title_levels: ['cxo', 'not-a-level'],
inferred_salary: '45,000-55,000',
job_company_size: '11-50',
skills: ['leadership', 'strategy', 'leadership'],
experience: [{ company: { name: 'Acme' } }],
birth_date: '1990',
location_locality: 'San Francisco',
location_region: 'California',
location_postal_code: '94107',
location_country: 'United States',
};
@@ -0,0 +1,12 @@
import { type PersonNode } from 'src/types/person-node.type';
export const PERSON_NODE_MOCK: PersonNode = {
id: 'p1',
name: { firstName: '', lastName: '' },
emails: null,
phones: null,
jobTitle: '',
linkedinLink: { primaryLinkUrl: 'https://linkedin.com/in/existing' },
pdlId: null,
pdlLastEnrichedAt: null,
};
@@ -0,0 +1,35 @@
import { defineLogicFunction } from 'twenty-sdk/define';
import { PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers';
import { enrichCompanyCore } from 'src/logic-functions/handlers/enrich-company.core';
import { type EnrichInput } from 'src/types/enrich-input.type';
const handler = (input: EnrichInput) => enrichCompanyCore(input);
export default defineLogicFunction({
universalIdentifier:
PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS.enrichCompanyTool,
name: 'enrich-company-tool',
description:
'Enrich a Company record with People Data Labs data (industry, size, funding, location, etc.) given its record id.',
timeoutSeconds: 30,
handler,
toolTriggerSettings: {
inputSchema: {
type: 'object',
properties: {
recordId: {
type: 'string',
description: 'The id of the Company record to enrich.',
},
force: {
type: 'boolean',
description:
'Re-enrich even if the record was enriched recently (bypasses the freshness guard).',
},
},
required: ['recordId'],
additionalProperties: false,
},
},
});
@@ -0,0 +1,40 @@
import { defineLogicFunction } from 'twenty-sdk/define';
import { PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers';
import { enrichCompanyCore } from 'src/logic-functions/handlers/enrich-company.core';
import { type EnrichInput } from 'src/types/enrich-input.type';
const handler = (input: EnrichInput) => enrichCompanyCore(input);
export default defineLogicFunction({
universalIdentifier: PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS.enrichCompany,
name: 'enrich-company',
description: 'Enrich a Company with People Data Labs data',
timeoutSeconds: 30,
handler,
workflowActionTriggerSettings: {
label: 'Enrich with People Data Labs',
icon: 'IconSparkles',
inputSchema: [
{
type: 'object',
properties: {
recordId: { type: 'string' },
force: { type: 'boolean' },
},
},
],
outputSchema: [
{
type: 'object',
properties: {
success: { type: 'boolean' },
status: { type: 'string' },
updatedFields: { type: 'array', items: { type: 'string' } },
message: { type: 'string' },
error: { type: 'string' },
},
},
],
},
});
@@ -0,0 +1,34 @@
import { defineLogicFunction } from 'twenty-sdk/define';
import { PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers';
import { enrichPersonCore } from 'src/logic-functions/handlers/enrich-person.core';
import { type EnrichInput } from 'src/types/enrich-input.type';
const handler = (input: EnrichInput) => enrichPersonCore(input);
export default defineLogicFunction({
universalIdentifier: PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS.enrichPersonTool,
name: 'enrich-person-tool',
description:
'Enrich a Person record with People Data Labs data (job, location, social profiles, etc.) given its record id.',
timeoutSeconds: 30,
handler,
toolTriggerSettings: {
inputSchema: {
type: 'object',
properties: {
recordId: {
type: 'string',
description: 'The id of the Person record to enrich.',
},
force: {
type: 'boolean',
description:
'Re-enrich even if the record was enriched recently (bypasses the freshness guard).',
},
},
required: ['recordId'],
additionalProperties: false,
},
},
});
@@ -0,0 +1,40 @@
import { defineLogicFunction } from 'twenty-sdk/define';
import { PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers';
import { enrichPersonCore } from 'src/logic-functions/handlers/enrich-person.core';
import { type EnrichInput } from 'src/types/enrich-input.type';
const handler = (input: EnrichInput) => enrichPersonCore(input);
export default defineLogicFunction({
universalIdentifier: PDL_LOGIC_FUNCTION_UNIVERSAL_IDENTIFIERS.enrichPerson,
name: 'enrich-person',
description: 'Enrich a Person with People Data Labs data',
timeoutSeconds: 30,
handler,
workflowActionTriggerSettings: {
label: 'Enrich with People Data Labs',
icon: 'IconSparkles',
inputSchema: [
{
type: 'object',
properties: {
recordId: { type: 'string' },
force: { type: 'boolean' },
},
},
],
outputSchema: [
{
type: 'object',
properties: {
success: { type: 'boolean' },
status: { type: 'string' },
updatedFields: { type: 'array', items: { type: 'string' } },
message: { type: 'string' },
error: { type: 'string' },
},
},
],
},
});
@@ -0,0 +1,16 @@
import { describe, expect, it } from 'vitest';
import { PdlConfigError } from 'src/logic-functions/errors/pdl-config-error';
import { PdlError } from 'src/logic-functions/errors/pdl-error';
describe('PdlConfigError', () => {
it('is a PdlError with a dedicated name, code, and the given message', () => {
const error = new PdlConfigError('missing key');
expect(error).toBeInstanceOf(Error);
expect(error).toBeInstanceOf(PdlError);
expect(error.name).toBe('PdlConfigError');
expect(error.code).toBe('CONFIGURATION');
expect(error.message).toBe('missing key');
});
});

Some files were not shown because too many files have changed in this diff Show More