diff --git a/.github/ISSUE_TEMPLATE/oss-gg-hack-submission.yml b/.github/ISSUE_TEMPLATE/oss-gg-hack-submission.yml
new file mode 100644
index 000000000000..d68d45cffb14
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/oss-gg-hack-submission.yml
@@ -0,0 +1,33 @@
+name: oss.gg hack submission ๐น๏ธ
+description: "Submit your contribution for the for the oss.gg hackathon"
+title: "[๐น๏ธ]"
+labels: ๐น๏ธ oss.gg, player submission, hacktoberfest
+assignees: []
+body:
+ - type: textarea
+ id: contribution-name
+ attributes:
+ label: What side quest or challenge are you solving?
+ description: Add the name of the side quest or challenge.
+ validations:
+ required: true
+ - type: textarea
+ id: points
+ attributes:
+ label: Points
+ description: How many points are assigned to this contribution?
+ validations:
+ required: true
+ - type: textarea
+ id: description
+ attributes:
+ label: Description
+ description: What's the task your performed?
+ validations:
+ - type: textarea
+ id: proof
+ attributes:
+ label: Provide proof that you've completed the task
+ description: Screenshots, loom recordings, links to the content you shared or interacted with.
+ validations:
+ required: true
diff --git a/.github/workflows/ci-front.yaml b/.github/workflows/ci-front.yaml
index aa6955723796..b61506709f93 100644
--- a/.github/workflows/ci-front.yaml
+++ b/.github/workflows/ci-front.yaml
@@ -31,6 +31,8 @@ jobs:
uses: actions/checkout@v4
- name: Install dependencies
uses: ./.github/workflows/actions/yarn-install
+ - name: Diagnostic disk space issue
+ run: df -h
- name: Front / Restore Storybook Task Cache
uses: ./.github/workflows/actions/task-cache
with:
diff --git a/.github/workflows/ci-server.yaml b/.github/workflows/ci-server.yaml
index 857dec2fc863..074d63fdda40 100644
--- a/.github/workflows/ci-server.yaml
+++ b/.github/workflows/ci-server.yaml
@@ -54,7 +54,7 @@ jobs:
- name: Server / Write .env
run: npx nx reset:env twenty-server
- name: Worker / Run
- run: MESSAGE_QUEUE_TYPE=sync npx nx worker twenty-server
+ run: npx nx run twenty-server:worker:ci
server-test:
runs-on: ubuntu-latest
diff --git a/README.md b/README.md
index f0c96b0a32ac..86ed0fe51a6f 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,12 @@
+
+
+
+
+
@@ -34,7 +43,7 @@ We felt the need for a CRM platform that empowers rather than constrains. We bel
Go to demo.twenty.com and login with the following credentials:
```
-email: noah@demo.dev
+email: tim@apple.dev
password: Applecar2025
```
diff --git a/oss-gg/twenty-content-challenges/1-create-youtube-video-about-20.md b/oss-gg/twenty-content-challenges/1-create-youtube-video-about-20.md
new file mode 100644
index 000000000000..455b5e35bae3
--- /dev/null
+++ b/oss-gg/twenty-content-challenges/1-create-youtube-video-about-20.md
@@ -0,0 +1,21 @@
+**Side Quest**: Create a YouTube Video about Twenty showcasing a specific way to use Twenty effectively.
+**Points**: 750 Points
+**Proof**: Add your oss handle and YouTube video link to the list below.
+
+Please follow the following schema:
+
+---
+
+ยป 05-April-2024 by YOUR oss.gg HANDLE ยป YouTube Link: https://link.to/content
+
+---
+
+////////////////////////////
+
+Your turn ๐
+
+////////////////////////////
+
+ยป 02-October-2024 by [yourhandle](https://oss.gg/yourhandle) YouTube Link: [YouTube](https://twenty.com/)
+
+---
\ No newline at end of file
diff --git a/oss-gg/twenty-content-challenges/2-write-blog-post-about-20.md b/oss-gg/twenty-content-challenges/2-write-blog-post-about-20.md
new file mode 100644
index 000000000000..a4c4e6bee944
--- /dev/null
+++ b/oss-gg/twenty-content-challenges/2-write-blog-post-about-20.md
@@ -0,0 +1,21 @@
+**Side Quest**: Write a blog post about sharing your experience using Twenty in a detailed format on any platform.
+**Points**: 750 Points
+**Proof**: Add your oss handle and blog link to the list below.
+
+Please follow the following schema:
+
+---
+
+ยป 05-April-2024 by YOUR oss.gg HANDLE ยป blog Link: https://link.to/content
+
+---
+
+////////////////////////////
+
+Your turn ๐
+
+////////////////////////////
+
+ยป 02-October-2024 by [yourhandle](https://oss.gg/yourhandle) blog Link: [blog](https://twenty.com/)
+
+---
\ No newline at end of file
diff --git a/oss-gg/twenty-content-challenges/3-write-selfthost-guide-blog-post-20.md b/oss-gg/twenty-content-challenges/3-write-selfthost-guide-blog-post-20.md
new file mode 100644
index 000000000000..c7352ec430fc
--- /dev/null
+++ b/oss-gg/twenty-content-challenges/3-write-selfthost-guide-blog-post-20.md
@@ -0,0 +1,21 @@
+**Side Quest**: Write a blog post about self-hosting Twenty in a detailed format on any platform.
+**Points**: 750 Points
+**Proof**: Add your oss handle and blog link to the list below.
+
+Please follow the following schema:
+
+---
+
+ยป 05-April-2024 by YOUR oss.gg HANDLE ยป blog Link: https://link.to/content
+
+---
+
+////////////////////////////
+
+Your turn ๐
+
+////////////////////////////
+
+ยป 02-October-2024 by [yourhandle](https://oss.gg/yourhandle) blog Link: [blog](https://twenty.com/)
+
+---
\ No newline at end of file
diff --git a/oss-gg/twenty-content-challenges/4-create-promotional-video-20-share.md b/oss-gg/twenty-content-challenges/4-create-promotional-video-20-share.md
new file mode 100644
index 000000000000..e52cb43a4247
--- /dev/null
+++ b/oss-gg/twenty-content-challenges/4-create-promotional-video-20-share.md
@@ -0,0 +1,21 @@
+**Side Quest**: Create a promotional video for Twenty and share it on social media.
+**Points**: 750 Points
+**Proof**: Add your oss handle and video link to the list below.
+
+Please follow the following schema:
+
+---
+
+ยป 05-April-2024 by YOUR oss.gg HANDLE ยป video Link: https://link.to/content
+
+---
+
+////////////////////////////
+
+Your turn ๐
+
+////////////////////////////
+
+ยป 02-October-2024 by [yourhandle](https://oss.gg/yourhandle) video Link: [video](https://twenty.com/)
+
+---
\ No newline at end of file
diff --git a/oss-gg/twenty-design-challenges/1-design-promotional-poster-20-share.md b/oss-gg/twenty-design-challenges/1-design-promotional-poster-20-share.md
new file mode 100644
index 000000000000..b61f187117b5
--- /dev/null
+++ b/oss-gg/twenty-design-challenges/1-design-promotional-poster-20-share.md
@@ -0,0 +1,25 @@
+**Side Quest**: Design a promotional poster of Twenty and share it on social media.
+**Points**: 300 Points
+**Proof**: Add your oss handle and poster link to the list below.
+
+Please follow the following schema:
+
+---
+
+ยป 05-April-2024 by YOUR oss.gg HANDLE ยป poster Link: https://link.to/content
+
+---
+
+////////////////////////////
+
+Your turn ๐
+
+////////////////////////////
+
+ยป 02-October-2024 by [yourhandle](https://oss.gg/yourhandle) poster Link: [poster](https://twenty.com/)
+
+ยป 11-October-2024 by [thefool76](https://oss.gg/thefool76) poster Link: [poster](https://drive.google.com/file/d/1cIC1eitvY6zKVTXKq2LnVrS_2Ho9H8-P/view?usp=sharing)
+
+ยป 12-October-2024 by [Ionfinisher](https://oss.gg/Ionfinisher) poster Link: [poster](https://x.com/ion_finisher/status/1845168965963628802)
+
+---
diff --git a/oss-gg/twenty-design-challenges/2-design-new-logo-twenty.md b/oss-gg/twenty-design-challenges/2-design-new-logo-twenty.md
new file mode 100644
index 000000000000..ceee0fa8e4da
--- /dev/null
+++ b/oss-gg/twenty-design-challenges/2-design-new-logo-twenty.md
@@ -0,0 +1,28 @@
+**Side Quest**: Design/Create new Twenty logo, tweet your design, and mention @twentycrm.
+**Points**: 300 Points
+**Proof**: Create a logo upload it on any of the platform and add your oss handle and logo link to the list below.
+
+Please follow the following schema:
+
+---
+
+ยป 05-April-2024 by YOUR oss.gg HANDLE ยป Logo Link: https://link.to/content ยป tweet Link: https://link.to/content
+
+---
+
+////////////////////////////
+
+Your turn ๐
+
+////////////////////////////
+
+ยป 08-October-2024 by [adityadeshlahre](https://oss.gg/adityadeshlahre) Logo Link: [logo](https://drive.google.com/drive/folders/13k22xMnX2fhnWK94vas_hO1t-ImqXcHZ?usp=drive_link) ยป tweet Link: [tweet](https://x.com/adityadeshlahre/status/1843354963176718374)
+
+ยป 11-October-2024 by [thefool76](https://oss.gg/thefool76) Logo Link: [logo](https://drive.google.com/file/d/1DxSwNY_i90kGgWzPQj5SxScBz_6r02l4/view?usp=sharing) ยป tweet Link: [tweet](https://x.com/thefool1135/status/1844693487067034008)
+
+ยป 13-October-2024 by [Atharva_404](https://oss.gg/Atharva-3000) Logo Link: [logo](https://drive.google.com/drive/folders/1XB7ELR7kPA4x7Fx5RQr8wo5etdZAZgcs?usp=drive_link) ยป tweet Link: [tweet](https://x.com/0x_atharva/status/1845421218914095453)
+
+ยป 13-October-2024 by [Ionfinisher](https://oss.gg/Ionfinisher) Logo Link: [logo](https://drive.google.com/file/d/1l9vE8CIjW9KfdioI5WKzxrdmvO8LR4j7/view?usp=drive_link) ยป tweet Link: [tweet](https://x.com/ion_finisher/status/1845466470429442163)
+
+
+---
diff --git a/oss-gg/twenty-design-challenges/3-create-custom-interfact-theme-20.md b/oss-gg/twenty-design-challenges/3-create-custom-interfact-theme-20.md
new file mode 100644
index 000000000000..e51945ea9988
--- /dev/null
+++ b/oss-gg/twenty-design-challenges/3-create-custom-interfact-theme-20.md
@@ -0,0 +1,21 @@
+**Side Quest**: Duplicate the Figma file from the main repo and customize the variables to create a unique interface theme for Twenty.
+**Points**: 750 Points
+**Proof**: Add your oss handle and Figma link to the list below.
+
+Please follow the following schema:
+
+---
+
+ยป 05-April-2024 by YOUR oss.gg HANDLE ยป Figma Link: https://link.to/content
+
+---
+
+////////////////////////////
+
+Your turn ๐
+
+////////////////////////////
+
+ยป 02-October-2024 by [yourhandle](https://oss.gg/yourhandle) Figma Link: [Figma](https://twenty.com/)
+
+---
\ No newline at end of file
diff --git a/oss-gg/twenty-dev-challenges/1-write-migration-script-other-crm-to-20.md b/oss-gg/twenty-dev-challenges/1-write-migration-script-other-crm-to-20.md
new file mode 100644
index 000000000000..249d8e158cfa
--- /dev/null
+++ b/oss-gg/twenty-dev-challenges/1-write-migration-script-other-crm-to-20.md
@@ -0,0 +1,21 @@
+**Side Quest**: Develop a script to facilitate the migration of data from another CRM to Twenty.
+**Points**: 750 Points
+**Proof**: Add your oss handle and record video and share link to the list below. In video show the working proof of your created script.
+
+Please follow the following schema:
+
+---
+
+ยป 05-April-2024 by YOUR oss.gg HANDLE ยป video Link: https://link.to/content
+
+---
+
+////////////////////////////
+
+Your turn ๐
+
+////////////////////////////
+
+ยป 02-October-2024 by [yourhandle](https://oss.gg/yourhandle) video Link: [video](https://twenty.com/)
+
+---
\ No newline at end of file
diff --git a/oss-gg/twenty-dev-challenges/2-create-raycast-integration-for-20.md b/oss-gg/twenty-dev-challenges/2-create-raycast-integration-for-20.md
new file mode 100644
index 000000000000..e4793c40d66f
--- /dev/null
+++ b/oss-gg/twenty-dev-challenges/2-create-raycast-integration-for-20.md
@@ -0,0 +1,21 @@
+**Side Quest**: Develop an integration for Raycast that enables users to create records on any object within Twenty directly from Raycast.
+**Points**: 1500 Points
+**Proof**: Add your oss handle and record video and share link to the list below. In video show the workflow of the your integration created and perform some task.
+
+Please follow the following schema:
+
+---
+
+ยป 05-April-2024 by YOUR oss.gg HANDLE ยป video Link: https://link.to/content
+
+---
+
+////////////////////////////
+
+Your turn ๐
+
+////////////////////////////
+
+ยป 02-October-2024 by [yourhandle](https://oss.gg/yourhandle) video Link: [video](https://twenty.com/)
+
+---
\ No newline at end of file
diff --git a/oss-gg/twenty-no-code-challenges/1-create-n8n-template-integrate-20-API.md b/oss-gg/twenty-no-code-challenges/1-create-n8n-template-integrate-20-API.md
new file mode 100644
index 000000000000..6786e5a94553
--- /dev/null
+++ b/oss-gg/twenty-no-code-challenges/1-create-n8n-template-integrate-20-API.md
@@ -0,0 +1,21 @@
+**Side Quest**: Create an n8n workflow that empowers Twenty by connecting it to another tool.
+**Points**: 750 Points
+**Proof**: Add your oss handle and template link to the list below.
+
+Please follow the following schema:
+
+---
+
+ยป 05-April-2024 by YOUR oss.gg HANDLE ยป template Link: https://link.to/content
+
+---
+
+////////////////////////////
+
+Your turn ๐
+
+////////////////////////////
+
+ยป 02-October-2024 by [yourhandle](https://oss.gg/yourhandle) template Link: [template](https://twenty.com/)
+
+---
\ No newline at end of file
diff --git a/oss-gg/twenty-no-code-challenges/2-write-selfthost-guide-blog-post-20.md b/oss-gg/twenty-no-code-challenges/2-write-selfthost-guide-blog-post-20.md
new file mode 100644
index 000000000000..58fa6de4d8d6
--- /dev/null
+++ b/oss-gg/twenty-no-code-challenges/2-write-selfthost-guide-blog-post-20.md
@@ -0,0 +1,21 @@
+**Side Quest**: Write a comprehensive guide on how to integrate Twenty with marketing automation tool (n8n, Zapier). Include a concrete use case and explain how to leverage AI to write API requests for non-developers and share it.
+**Points**: 1500 Points
+**Proof**: Add your oss handle and guide link to the list below.
+
+Please follow the following schema:
+
+---
+
+ยป 05-April-2024 by YOUR oss.gg HANDLE ยป guide Link: https://link.to/content
+
+---
+
+////////////////////////////
+
+Your turn ๐
+
+////////////////////////////
+
+ยป 02-October-2024 by [yourhandle](https://oss.gg/yourhandle) guide Link: [guide](https://twenty.com/)
+
+---
\ No newline at end of file
diff --git a/oss-gg/twenty-side-quest/1-quote-tweet-20-oss-gg-launch.md b/oss-gg/twenty-side-quest/1-quote-tweet-20-oss-gg-launch.md
new file mode 100644
index 000000000000..168e311b9a32
--- /dev/null
+++ b/oss-gg/twenty-side-quest/1-quote-tweet-20-oss-gg-launch.md
@@ -0,0 +1,45 @@
+**Side Quest**: Like & Re-Tweet oss.gg Launch Tweet. Quote-tweet it tagging @twentycrm to say youโll be contributing.
+**Points**: 50 Points
+**Proof**: Add a screenshot of the retweet to the PR description. Add a link to your retweet in the list below.
+
+Please follow the following schema:
+
+---
+
+ยป 05-April-2024 by YOUR NAME
+ยป Link to Tweet: https://x.com/...
+
+---
+
+////////////////////////////
+
+Your turn ๐
+
+////////////////////////////
+
+ยป 13-October-2024 by Vanshika Dargan
+ยป Link to Tweet: https://x.com/VanshikaDargan/status/1845467453108949123
+
+ยป 13-October-2024 by Utsav Bhattarai
+ยป Link to Tweet: https://x.com/utsavdotdev/status/1845417863462649900
+
+ยป 10-October-2024 by Devansh Baghel
+ยป Link to Tweet: https://x.com/DevanshBaghel5/status/1844359648037748954
+
+ยป 11-October-2024 by Bhavesh Mishra
+ยป Link to Tweet: https://x.com/thefool1135/status/1844453425188405326
+
+ยป 11-October-2024 by Chirag Arora
+ยป Link to Tweet: https://x.com/Chirag8023/status/1844689900668682699
+
+ยป 11-October-2024 by Aritra Sadhukhan
+ยป Link to Tweet: https://x.com/AritraDevelops/status/1844670236512878646
+
+ยป 13-October-2024 by Nabhag Motivaras
+ยป Link to Tweet: https://x.com/NabhagMotivaras/status/1845449144695218357
+
+ยป 13-October-2024 by Ali Yar Khan
+ยป Link to Tweet: https://x.com/Mr_Programmer14/status/1845527862549577860
+
+ยป 13-October-2024 by Yash Parmar
+ยป Link to Tweet: https://x.com/yashp3020/status/1845720834716959009
diff --git a/oss-gg/twenty-side-quest/2-tweet-about-fav-twenty-feature.md b/oss-gg/twenty-side-quest/2-tweet-about-fav-twenty-feature.md
new file mode 100644
index 000000000000..508210ae5a6e
--- /dev/null
+++ b/oss-gg/twenty-side-quest/2-tweet-about-fav-twenty-feature.md
@@ -0,0 +1,28 @@
+**Side Quest**: Share a tweet about your favorite feature in Twenty. Tweet about your favorite feature in Twenty and mention @twentycrm.
+**Points**: 50 Points
+**Proof**: Add a screenshot of the tweet to the PR description. Add a link to your tweet in the list below.
+
+Please follow the following schema:
+
+---
+
+ยป 05-April-2024 by YOUR NAME
+ยป Link to Tweet: https://x.com/...
+
+---
+
+////////////////////////////
+
+Your turn ๐
+
+////////////////////////////
+
+ยป 10-October-2024 by Devansh Baghel
+ยป Link to Tweet: https://x.com/DevanshBaghel5/status/1844384722119704972
+
+ยป 11-October-2024 by Bhavesh Mishra
+ยป Link to Tweet: https://x.com/thefool1135/status/1844456500380696969
+
+ยป 13-October-2024 by Ali Yar Khan
+ยป Link to Tweet: https://x.com/Mr_Programmer14/status/1845530448245711197
+---
diff --git a/oss-gg/twenty-side-quest/3-bug-report.md b/oss-gg/twenty-side-quest/3-bug-report.md
new file mode 100644
index 000000000000..d393a2cbeac8
--- /dev/null
+++ b/oss-gg/twenty-side-quest/3-bug-report.md
@@ -0,0 +1,23 @@
+**Side Quest**: Create a bug report. Use the Twenty bug issue template to report a bug in detail, including steps to reproduce it.
+**Points**: 50-150 Points
+**Proof**: Add a link to your bug report in the list below.
+
+Please follow the following schema:
+
+---
+
+ยป 05-April-2024 by YOUR NAME
+ยป Link to bug report: https://github.com/twentyhq/twenty/issues/...
+
+---
+
+////////////////////////////
+
+Your turn ๐
+
+////////////////////////////
+
+ยป 10-October-2024 by Devansh Baghel
+ยป Link to bug report: https://github.com/twentyhq/twenty/issues/7560
+
+---
diff --git a/oss-gg/twenty-side-quest/4-meme-magic.md b/oss-gg/twenty-side-quest/4-meme-magic.md
new file mode 100644
index 000000000000..b5cb3263d218
--- /dev/null
+++ b/oss-gg/twenty-side-quest/4-meme-magic.md
@@ -0,0 +1,34 @@
+**Side Quest**: Meme Magic: Craft a meme where the number twenty plays a role. Tweet it, and tag @twentycrm.
+**Points**: 150 Points
+**Proof**: Add a screenshot of meme to the PR description. Add a link to your tweet in the list below.
+
+Please follow the following schema:
+
+---
+
+ยป 05-April-2024 by YOUR NAME
+ยป Link to Tweet: https://x.com/...
+
+---
+
+////////////////////////////
+
+Your turn ๐
+
+////////////////////////////
+
+ยป 10-October-2024 by Teddy ASSIH
+ยป Link to Tweet: https://x.com/ion_finisher/status/1844389252253299173
+
+ยป 11-October-2024 by Bhavesh Mishra
+ยป Link to Tweet: https://x.com/thefool1135/status/1844458836402503931
+
+ยป 12-October-2024 by Chirag Arora
+ยป Link to Tweet: https://x.com/Chirag8023/status/1845108226527994222
+
+ยป 13-October-2024 by Ali Yar Khan
+ยป Link to Tweet: https://x.com/Mr_Programmer14/status/1845537662587072697
+
+ยป 14-October-2024 by Yash Parmar
+ยป Link to Tweet: [https://x.com/yashp3020/status/1845108226527994222](https://x.com/yashp3020/status/1845720142702842093)
+---
diff --git a/oss-gg/twenty-side-quest/5-gif-magic.md b/oss-gg/twenty-side-quest/5-gif-magic.md
new file mode 100644
index 000000000000..20467fef4784
--- /dev/null
+++ b/oss-gg/twenty-side-quest/5-gif-magic.md
@@ -0,0 +1,33 @@
+**Side Quest**: Gif Magic: Create a gif related to Twenty. Tweet it, and tag @twentycrm.
+**Points**: 150 Points
+**Proof**: Add a screenshot of GIF on Giphy to the PR description. Add a link to your GIPHY in the list below.
+
+Please follow the following schema:
+
+---
+
+ยป 05-April-2024 by YOUR NAME
+ยป Link to gif: https://giphy.com/...
+
+---
+
+////////////////////////////
+
+Your turn ๐
+
+////////////////////////////
+
+ยป 10-October-2024 by Teddy ASSIH
+ยป Link to gif: https://giphy.com/gifs/oss-crm-twenty-VWDHAIlGTbc6Nqdza9
+
+ยป 11-October-2024 by Bhavesh Mishra
+ยป Link to gif: https://shorturl.at/yln9H
+
+ยป 12-October-2024 by Chirag Arora
+ยป Link to gif: https://giphy.com/gifs/yCJIS2MGbBdifbnuj0
+
+ยป 13-October-2024 by Nabhag Motivaras
+ยป Link to gif: https://giphy.com/gifs/twenty-twentycrm-opensourcecrm-wCcsmnJuzzzGrfuf9B
+
+
+---
diff --git a/oss-gg/twenty-side-quest/6-quest-wizard.md b/oss-gg/twenty-side-quest/6-quest-wizard.md
new file mode 100644
index 000000000000..9543e3767d6f
--- /dev/null
+++ b/oss-gg/twenty-side-quest/6-quest-wizard.md
@@ -0,0 +1,19 @@
+**Side Quest**: Complete all Twenty side quests
+**Points**: 300 Points
+**Proof**: Add screenshots for each side quest to the PR description. Add your name to the list below.
+
+Please follow the following schema:
+
+---
+
+ ยป 05-April-2024 by YOUR NAME
+
+////////////////////////////
+
+Your turn ๐
+
+////////////////////////////
+
+ยป 01-October-2024 by X
+
+---
diff --git a/package.json b/package.json
index 640ba3bb5c96..a4dc90df92ac 100644
--- a/package.json
+++ b/package.json
@@ -10,8 +10,6 @@
"@blocknote/react": "^0.15.3",
"@codesandbox/sandpack-react": "^2.13.5",
"@dagrejs/dagre": "^1.1.2",
- "@docusaurus/core": "^3.1.0",
- "@docusaurus/preset-classic": "^3.1.0",
"@emotion/react": "^11.11.1",
"@emotion/styled": "^11.11.0",
"@envelop/on-resolve": "^4.1.0",
@@ -38,8 +36,6 @@
"@nestjs/serve-static": "^4.0.1",
"@nestjs/terminus": "^9.2.2",
"@nestjs/typeorm": "^10.0.0",
- "@nivo/calendar": "^0.84.0",
- "@nivo/core": "^0.84.0",
"@nx/eslint-plugin": "^17.2.8",
"@octokit/graphql": "^7.0.2",
"@ptc-org/nestjs-query-core": "^4.2.0",
@@ -77,13 +73,13 @@
"class-transformer": "^0.5.1",
"clsx": "^2.1.1",
"cross-env": "^7.0.3",
+ "css-loader": "^7.1.2",
"danger-plugin-todos": "^1.3.1",
"dataloader": "^2.2.2",
"date-fns": "^2.30.0",
"date-fns-tz": "^2.0.0",
"debounce": "^2.0.0",
"deep-equal": "^2.2.2",
- "docusaurus-node-polyfills": "^1.0.0",
"dompurify": "^3.0.11",
"dotenv-cli": "^7.2.1",
"drizzle-orm": "^0.29.3",
@@ -198,8 +194,6 @@
"@babel/preset-react": "^7.14.5",
"@babel/preset-typescript": "^7.24.6",
"@crxjs/vite-plugin": "^1.0.14",
- "@docusaurus/module-type-aliases": "^3.1.0",
- "@docusaurus/tsconfig": "3.1.0",
"@graphql-codegen/cli": "^3.3.1",
"@graphql-codegen/client-preset": "^4.1.0",
"@graphql-codegen/typescript": "^3.0.4",
@@ -273,6 +267,7 @@
"@types/node": "18.19.26",
"@types/passport-google-oauth20": "^2.0.11",
"@types/passport-jwt": "^3.0.8",
+ "@types/pluralize": "^0.0.33",
"@types/react": "^18.2.39",
"@types/react-datepicker": "^6.2.0",
"@types/react-dom": "^18.2.15",
@@ -343,7 +338,7 @@
},
"license": "AGPL-3.0",
"name": "twenty",
- "packageManager": "yarn@4.3.1",
+ "packageManager": "yarn@4.4.0",
"resolutions": {
"graphql": "16.8.0",
"type-fest": "4.10.1",
diff --git a/packages/twenty-chrome-extension/src/options/modules/ui/input/components/TextInput.tsx b/packages/twenty-chrome-extension/src/options/modules/ui/input/components/TextInput.tsx
index 1b1af1e59ac0..760b7625ee2a 100644
--- a/packages/twenty-chrome-extension/src/options/modules/ui/input/components/TextInput.tsx
+++ b/packages/twenty-chrome-extension/src/options/modules/ui/input/components/TextInput.tsx
@@ -1,5 +1,5 @@
-import React from 'react';
import styled from '@emotion/styled';
+import React, { useId } from 'react';
interface TextInputProps {
label?: string;
@@ -18,7 +18,7 @@ const StyledContainer = styled.div<{ fullWidth?: boolean }>`
margin-bottom: ${({ theme }) => theme.spacing(4)};
`;
-const StyledLabel = styled.span`
+const StyledLabel = styled.label`
color: ${({ theme }) => theme.font.color.light};
font-size: ${({ theme }) => theme.font.size.xs};
font-weight: ${({ theme }) => theme.font.weight.semiBold};
@@ -65,12 +65,15 @@ const TextInput: React.FC = ({
placeholder,
icon,
}) => {
+ const inputId = useId();
+
return (
- {label && {label}}
+ {label && {label}}
{icon && {icon}}
onChange(e.target.value)}
diff --git a/packages/twenty-docker/.env.example b/packages/twenty-docker/.env.example
index c25482220fce..59d8d03f93a7 100644
--- a/packages/twenty-docker/.env.example
+++ b/packages/twenty-docker/.env.example
@@ -5,6 +5,8 @@ TAG=latest
PG_DATABASE_HOST=db:5432
SERVER_URL=http://localhost:3000
+# REDIS_HOST=redis
+# REDIS_PORT=6379
# Use openssl rand -base64 32 for each secret
# ACCESS_TOKEN_SECRET=replace_me_with_a_random_string_access
@@ -19,5 +21,3 @@ STORAGE_TYPE=local
# STORAGE_S3_REGION=eu-west3
# STORAGE_S3_NAME=my-bucket
# STORAGE_S3_ENDPOINT=
-
-MESSAGE_QUEUE_TYPE=pg-boss
diff --git a/packages/twenty-docker/Makefile b/packages/twenty-docker/Makefile
index deee953f19cb..e8d77b60bf53 100644
--- a/packages/twenty-docker/Makefile
+++ b/packages/twenty-docker/Makefile
@@ -1,28 +1,3 @@
-dev-build:
- @docker compose -f dev/docker-compose.yml down -v
- @docker compose -f dev/docker-compose.yml build
-
-dev-up:
- @docker compose -f dev/docker-compose.yml up -d
-
-dev-start:
- @docker compose -f dev/docker-compose.yml start
-
-dev-stop:
- @docker compose -f dev/docker-compose.yml stop
-
-dev-down:
- @docker compose -f dev/docker-compose.yml down -v
-
-dev-sh:
- @docker compose -f dev/docker-compose.yml exec twenty-dev sh
-
-dev-postgres-build:
- @docker stop twenty_postgres || true
- @docker rm twenty_postgres || true
- @docker volume rm twenty_db_data || true
- @docker compose -f dev/docker-compose.yml up --build postgres -d
-
prod-build:
@cd ../.. && docker build -f ./packages/twenty-docker/twenty/Dockerfile --tag twenty . && cd -
diff --git a/packages/twenty-docker/docker-compose.yml b/packages/twenty-docker/docker-compose.yml
index 553d8ca6c9fa..b2efc1a168e4 100644
--- a/packages/twenty-docker/docker-compose.yml
+++ b/packages/twenty-docker/docker-compose.yml
@@ -25,7 +25,8 @@ services:
PG_DATABASE_URL: postgres://twenty:twenty@${PG_DATABASE_HOST}/default
SERVER_URL: ${SERVER_URL}
FRONT_BASE_URL: ${FRONT_BASE_URL:-$SERVER_URL}
- MESSAGE_QUEUE_TYPE: ${MESSAGE_QUEUE_TYPE}
+ REDIS_PORT: ${REDIS_PORT:-6379}
+ REDIS_HOST: ${REDIS_HOST:-redis}
ENABLE_DB_MIGRATIONS: "true"
@@ -34,6 +35,7 @@ services:
STORAGE_S3_REGION: ${STORAGE_S3_REGION}
STORAGE_S3_NAME: ${STORAGE_S3_NAME}
STORAGE_S3_ENDPOINT: ${STORAGE_S3_ENDPOINT}
+
ACCESS_TOKEN_SECRET: ${ACCESS_TOKEN_SECRET}
LOGIN_TOKEN_SECRET: ${LOGIN_TOKEN_SECRET}
REFRESH_TOKEN_SECRET: ${REFRESH_TOKEN_SECRET}
@@ -57,7 +59,8 @@ services:
PG_DATABASE_URL: postgres://twenty:twenty@${PG_DATABASE_HOST}/default
SERVER_URL: ${SERVER_URL}
FRONT_BASE_URL: ${FRONT_BASE_URL:-$SERVER_URL}
- MESSAGE_QUEUE_TYPE: ${MESSAGE_QUEUE_TYPE}
+ REDIS_PORT: ${REDIS_PORT:-6379}
+ REDIS_HOST: ${REDIS_HOST:-redis}
ENABLE_DB_MIGRATIONS: "false" # it already runs on the server
@@ -65,6 +68,7 @@ services:
STORAGE_S3_REGION: ${STORAGE_S3_REGION}
STORAGE_S3_NAME: ${STORAGE_S3_NAME}
STORAGE_S3_ENDPOINT: ${STORAGE_S3_ENDPOINT}
+
ACCESS_TOKEN_SECRET: ${ACCESS_TOKEN_SECRET}
LOGIN_TOKEN_SECRET: ${LOGIN_TOKEN_SECRET}
REFRESH_TOKEN_SECRET: ${REFRESH_TOKEN_SECRET}
@@ -89,6 +93,12 @@ services:
retries: 10
restart: always
+ redis:
+ image: redis
+ ports:
+ - "6379:6379"
+ restart: always
+
volumes:
docker-data:
db-data:
diff --git a/packages/twenty-docker/k8s/manifests/deployment-db.yaml b/packages/twenty-docker/k8s/manifests/deployment-db.yaml
index 2e317376d53b..31a3361774e4 100644
--- a/packages/twenty-docker/k8s/manifests/deployment-db.yaml
+++ b/packages/twenty-docker/k8s/manifests/deployment-db.yaml
@@ -22,33 +22,33 @@ spec:
app: twentycrm-db
spec:
volumes:
- - name: twentycrm-db-data
- persistentVolumeClaim:
- claimName: twentycrm-db-pvc
+ - name: twentycrm-db-data
+ persistentVolumeClaim:
+ claimName: twentycrm-db-pvc
containers:
- - env:
- - name: POSTGRES_PASSWORD
- value: "twenty"
- - name: BITNAMI_DEBUG
- value: "true"
- - image: twentycrm/twenty-postgres:latest
- imagePullPolicy: Always
- name: twentycrm
- ports:
- - containerPort: 5432
- name: tcp
- protocol: TCP
- resources:
- requests:
- memory: "256Mi"
- cpu: "250m"
- limits:
- memory: "1024Mi"
- cpu: "1000m"
- stdin: true
- tty: true
- volumeMounts:
- - mountPath: /bitnami/postgresql
- name: twentycrm-db-data
+ - name: twentycrm
+ image: twentycrm/twenty-postgres:latest
+ imagePullPolicy: Always
+ env:
+ - name: POSTGRES_PASSWORD
+ value: "twenty"
+ - name: BITNAMI_DEBUG
+ value: "true"
+ ports:
+ - containerPort: 5432
+ name: tcp
+ protocol: TCP
+ resources:
+ requests:
+ memory: "256Mi"
+ cpu: "250m"
+ limits:
+ memory: "1024Mi"
+ cpu: "1000m"
+ stdin: true
+ tty: true
+ volumeMounts:
+ - mountPath: /bitnami/postgresql
+ name: twentycrm-db-data
dnsPolicy: ClusterFirst
restartPolicy: Always
diff --git a/packages/twenty-docker/k8s/manifests/deployment-redis.yaml b/packages/twenty-docker/k8s/manifests/deployment-redis.yaml
new file mode 100644
index 000000000000..e09874aac262
--- /dev/null
+++ b/packages/twenty-docker/k8s/manifests/deployment-redis.yaml
@@ -0,0 +1,44 @@
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ labels:
+ app: twentycrm-redis
+ name: twentycrm-redis
+ namespace: twentycrm
+spec:
+ progressDeadlineSeconds: 600
+ replicas: 1
+ strategy:
+ rollingUpdate:
+ maxSurge: 1
+ maxUnavailable: 1
+ type: RollingUpdate
+ selector:
+ matchLabels:
+ app: twentycrm-redis
+ template:
+ metadata:
+ labels:
+ app: twentycrm-redis
+ spec:
+ containers:
+ - name: redis
+ image: redis/redis-stack-server:latest
+ imagePullPolicy: Always
+ env:
+ - name: PORT
+ value: 6379
+ ports:
+ - containerPort: 6379
+ name: redis
+ protocol: TCP
+ resources:
+ requests:
+ memory: "1024Mi"
+ cpu: "250m"
+ limits:
+ memory: "2048Mi"
+ cpu: "500m"
+
+ dnsPolicy: ClusterFirst
+ restartPolicy: Always
diff --git a/packages/twenty-docker/k8s/manifests/deployment-server.yaml b/packages/twenty-docker/k8s/manifests/deployment-server.yaml
index b4596e9fc87b..b1229d649bbb 100644
--- a/packages/twenty-docker/k8s/manifests/deployment-server.yaml
+++ b/packages/twenty-docker/k8s/manifests/deployment-server.yaml
@@ -22,67 +22,78 @@ spec:
app: twentycrm-server
spec:
volumes:
- - name: twentycrm-server-data
- persistentVolumeClaim:
- claimName: twentycrm-server-pvc
+ - name: twentycrm-server-data
+ persistentVolumeClaim:
+ claimName: twentycrm-server-pvc
+ - name: twentycrm-docker-data
+ persistentVolumeClaim:
+ claimName: twentycrm-docker-data-pvc
containers:
- - env:
- - name: PORT
- value: 3000
- - name: SERVER_URL
- value: "https://crm.example.com:443"
- - name: FRONT_BASE_URL
- value: "https://crm.example.com:443"
- - name: PG_DATABASE_URL
- value: "postgres://twenty:twenty@twenty-db.twentycrm.svc.cluster.local/default"
- - name: ENABLE_DB_MIGRATIONS
- value: "true"
- - name: SIGN_IN_PREFILLED
- value: "true"
- - name: STORAGE_TYPE
- value: "local"
- - name: "MESSAGE_QUEUE_TYPE"
- value: "pg-boss"
- - name: ACCESS_TOKEN_SECRET
- valueFrom:
- secretKeyRef:
- name: tokens
- key: accessToken
- - name: LOGIN_TOKEN_SECRET
- valueFrom:
- secretKeyRef:
- name: tokens
- key: loginToken
- - name: REFRESH_TOKEN_SECRET
- valueFrom:
- secretKeyRef:
- name: tokens
- key: refreshToken
- - name: FILE_TOKEN_SECRET
- valueFrom:
- secretKeyRef:
- name: tokens
- key: fileToken
- - image: twentycrm/twenty:latest
- imagePullPolicy: Always
- name: twentycrm
- ports:
- - containerPort: 3000
- name: http-tcp
- protocol: TCP
- resources:
- requests:
- memory: "256Mi"
- cpu: "250m"
- limits:
- memory: "1024Mi"
- cpu: "1000m"
- stdin: true
- tty: true
- volumeMounts:
- - mountPath: /app/docker-data
- name: twentycrm-server-data
- - mountPath: /app/.local-storage
- name: twentycrm-server-data
+ - name: twentycrm
+ image: twentycrm/twenty:latest
+ imagePullPolicy: Always
+ env:
+ - name: PORT
+ value: 3000
+ - name: SERVER_URL
+ value: "https://crm.example.com:443"
+ - name: FRONT_BASE_URL
+ value: "https://crm.example.com:443"
+ - name: "PG_DATABASE_URL"
+ value: "postgres://twenty:twenty@twenty-db.twentycrm.svc.cluster.local/default"
+ - name: "REDIS_HOST"
+ value: "twentycrm-redis.twentycrm.svc.cluster.local"
+ - name: "REDIS_PORT"
+ value: 6379
+ - name: ENABLE_DB_MIGRATIONS
+ value: "true"
+ - name: SIGN_IN_PREFILLED
+ value: "true"
+ - name: STORAGE_TYPE
+ value: "local"
+ - name: "MESSAGE_QUEUE_TYPE"
+ value: "bull-mq"
+ - name: "ACCESS_TOKEN_EXPIRES_IN"
+ value: "7d"
+ - name: "LOGIN_TOKEN_EXPIRES_IN"
+ value: "1h"
+ - name: ACCESS_TOKEN_SECRET
+ valueFrom:
+ secretKeyRef:
+ name: tokens
+ key: accessToken
+ - name: LOGIN_TOKEN_SECRET
+ valueFrom:
+ secretKeyRef:
+ name: tokens
+ key: loginToken
+ - name: REFRESH_TOKEN_SECRET
+ valueFrom:
+ secretKeyRef:
+ name: tokens
+ key: refreshToken
+ - name: FILE_TOKEN_SECRET
+ valueFrom:
+ secretKeyRef:
+ name: tokens
+ key: fileToken
+ ports:
+ - containerPort: 3000
+ name: http-tcp
+ protocol: TCP
+ resources:
+ requests:
+ memory: "256Mi"
+ cpu: "250m"
+ limits:
+ memory: "1024Mi"
+ cpu: "1000m"
+ stdin: true
+ tty: true
+ volumeMounts:
+ - mountPath: /app/docker-data
+ name: twentycrm-docker-data
+ - mountPath: /app/packages/twenty-server/.local-storage
+ name: twentycrm-server-data
dnsPolicy: ClusterFirst
restartPolicy: Always
diff --git a/packages/twenty-docker/k8s/manifests/deployment-worker.yaml b/packages/twenty-docker/k8s/manifests/deployment-worker.yaml
index b3834c46e515..b3a7e07a19aa 100644
--- a/packages/twenty-docker/k8s/manifests/deployment-worker.yaml
+++ b/packages/twenty-docker/k8s/manifests/deployment-worker.yaml
@@ -21,58 +21,60 @@ spec:
labels:
app: twentycrm-worker
spec:
- volumes:
- - name: twentycrm-worker-data
- persistentVolumeClaim:
- claimName: twentycrm-worker-pvc
containers:
- - env:
- - name: SERVER_URL
- value: "https://crm.example.com:443"
- - name: FRONT_BASE_URL
- value: "https://crm.example.com:443"
- - name: PG_DATABASE_URL
- value: "postgres://twenty:twenty@twenty-db.twentycrm.svc.cluster.local/default"
- - name: ENABLE_DB_MIGRATIONS
- value: "false" # it already runs on the server
- - name: STORAGE_TYPE
- value: "local"
- - name: "MESSAGE_QUEUE_TYPE"
- value: "pg-boss"
- - name: ACCESS_TOKEN_SECRET
- valueFrom:
- secretKeyRef:
- name: tokens
- key: accessToken
- - name: LOGIN_TOKEN_SECRET
- valueFrom:
- secretKeyRef:
- name: tokens
- key: loginToken
- - name: REFRESH_TOKEN_SECRET
- valueFrom:
- secretKeyRef:
- name: tokens
- key: refreshToken
- - name: FILE_TOKEN_SECRET
- valueFrom:
- secretKeyRef:
- name: tokens
- key: fileToken
- - image: twentycrm/twenty:latest
- imagePullPolicy: Always
- name: twentycrm
- command:
- - yarn
- - worker:prod
- resources:
- requests:
- memory: "256Mi"
- cpu: "250m"
- limits:
- memory: "1024Mi"
- cpu: "1000m"
- stdin: true
- tty: true
+ - name: twentycrm
+ image: twentycrm/twenty:latest
+ imagePullPolicy: Always
+ env:
+ - name: SERVER_URL
+ value: "https://crm.example.com:443"
+ - name: FRONT_BASE_URL
+ value: "https://crm.example.com:443"
+ - name: PG_DATABASE_URL
+ value: "postgres://twenty:twenty@twenty-db.twentycrm.svc.cluster.local/default"
+ - name: ENABLE_DB_MIGRATIONS
+ value: "false" # it already runs on the server
+ - name: STORAGE_TYPE
+ value: "local"
+ - name: "MESSAGE_QUEUE_TYPE"
+ value: "bull-mq"
+ - name: "CACHE_STORAGE_TYPE"
+ value: "redis"
+ - name: "REDIS_HOST"
+ value: "twentycrm-redis.twentycrm.svc.cluster.local"
+ - name: "REDIS_PORT"
+ value: 6379
+ - name: ACCESS_TOKEN_SECRET
+ valueFrom:
+ secretKeyRef:
+ name: tokens
+ key: accessToken
+ - name: LOGIN_TOKEN_SECRET
+ valueFrom:
+ secretKeyRef:
+ name: tokens
+ key: loginToken
+ - name: REFRESH_TOKEN_SECRET
+ valueFrom:
+ secretKeyRef:
+ name: tokens
+ key: refreshToken
+ - name: FILE_TOKEN_SECRET
+ valueFrom:
+ secretKeyRef:
+ name: tokens
+ key: fileToken
+ command:
+ - yarn
+ - worker:prod
+ resources:
+ requests:
+ memory: "1024Mi"
+ cpu: "250m"
+ limits:
+ memory: "2048Mi"
+ cpu: "1000m"
+ stdin: true
+ tty: true
dnsPolicy: ClusterFirst
restartPolicy: Always
diff --git a/packages/twenty-docker/k8s/manifests/ingress.yaml b/packages/twenty-docker/k8s/manifests/ingress.yaml
index b334aac21916..0bbae11dd72b 100644
--- a/packages/twenty-docker/k8s/manifests/ingress.yaml
+++ b/packages/twenty-docker/k8s/manifests/ingress.yaml
@@ -4,21 +4,21 @@ metadata:
name: twentycrm
namespace: twentycrm
annotations:
- nginx.ingress.kubernetes.io/configuration-snippet: |
+ nginx.ingress.kubernetes.io/configuration-snippet: |
more_set_headers "X-Forwarded-For $http_x_forwarded_for";
- nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
- kubernetes.io/ingress.class: "nginx"
- nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
+ nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
+ kubernetes.io/ingress.class: "nginx"
+ nginx.ingress.kubernetes.io/backend-protocol: "HTTP"
spec:
ingressClassName: nginx
rules:
- - host: crm.example.com
- http:
- paths:
- - path: /
- pathType: Prefix
- backend:
- service:
- name: twentycrm-server
- port:
- name: http-tcp
+ - host: crm.example.com
+ http:
+ paths:
+ - path: /
+ pathType: Prefix
+ backend:
+ service:
+ name: twentycrm-server
+ port:
+ name: http-tcp
diff --git a/packages/twenty-docker/k8s/manifests/pv-docker-data.yaml b/packages/twenty-docker/k8s/manifests/pv-docker-data.yaml
new file mode 100644
index 000000000000..95fc52a26251
--- /dev/null
+++ b/packages/twenty-docker/k8s/manifests/pv-docker-data.yaml
@@ -0,0 +1,11 @@
+apiVersion: v1
+kind: PersistentVolume
+metadata:
+ name: twentycrm-docker-data-pv
+spec:
+ storageClassName: default
+ capacity:
+ storage: 100Mi
+ accessModes:
+ - ReadWriteOnce
+ persistentVolumeReclaimPolicy: Retain
diff --git a/packages/twenty-docker/k8s/manifests/pvc-docker-data.yaml b/packages/twenty-docker/k8s/manifests/pvc-docker-data.yaml
new file mode 100644
index 000000000000..12dd071a7f21
--- /dev/null
+++ b/packages/twenty-docker/k8s/manifests/pvc-docker-data.yaml
@@ -0,0 +1,13 @@
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+ name: twentycrm-docker-data-pvc
+ namespace: twentycrm
+spec:
+ storageClassName: default
+ volumeName: twentycrm-docker-data-pv
+ accessModes:
+ - ReadWriteOnce
+ resources:
+ requests:
+ storage: 100Mi
diff --git a/packages/twenty-docker/k8s/manifests/service-db.yaml b/packages/twenty-docker/k8s/manifests/service-db.yaml
index bb0e38df6d6d..89dbd1464bed 100644
--- a/packages/twenty-docker/k8s/manifests/service-db.yaml
+++ b/packages/twenty-docker/k8s/manifests/service-db.yaml
@@ -6,9 +6,9 @@ metadata:
spec:
internalTrafficPolicy: Cluster
ports:
- - port: 5432
- protocol: TCP
- targetPort: 5432
+ - port: 5432
+ protocol: TCP
+ targetPort: 5432
selector:
app: twentycrm-db
sessionAffinity: ClientIP
diff --git a/packages/twenty-docker/k8s/manifests/service-redis.yaml b/packages/twenty-docker/k8s/manifests/service-redis.yaml
new file mode 100644
index 000000000000..49f508897dfa
--- /dev/null
+++ b/packages/twenty-docker/k8s/manifests/service-redis.yaml
@@ -0,0 +1,18 @@
+apiVersion: v1
+kind: Service
+metadata:
+ name: twentycrm-redis
+ namespace: twentycrm
+spec:
+ internalTrafficPolicy: Cluster
+ ports:
+ - port: 6379
+ protocol: TCP
+ targetPort: 6379
+ selector:
+ app: twentycrm-redis
+ sessionAffinity: ClientIP
+ sessionAffinityConfig:
+ clientIP:
+ timeoutSeconds: 10800
+ type: ClusterIP
diff --git a/packages/twenty-docker/k8s/manifests/service-server.yaml b/packages/twenty-docker/k8s/manifests/service-server.yaml
index 7fcc869a6edc..b45b28f312ff 100644
--- a/packages/twenty-docker/k8s/manifests/service-server.yaml
+++ b/packages/twenty-docker/k8s/manifests/service-server.yaml
@@ -6,10 +6,10 @@ metadata:
spec:
internalTrafficPolicy: Cluster
ports:
- - name: http-tcp
- port: 3000
- protocol: TCP
- targetPort: 3000
+ - name: http-tcp
+ port: 3000
+ protocol: TCP
+ targetPort: 3000
selector:
app: twentycrm-server
sessionAffinity: ClientIP
diff --git a/packages/twenty-docker/k8s/terraform/.terraform-docs.yml b/packages/twenty-docker/k8s/terraform/.terraform-docs.yml
index 00778168f3ee..792c543f4d30 100644
--- a/packages/twenty-docker/k8s/terraform/.terraform-docs.yml
+++ b/packages/twenty-docker/k8s/terraform/.terraform-docs.yml
@@ -15,12 +15,12 @@ output:
# TwentyCRM Terraform Docs
- This file was generated by [terraform-docs](https://terraform-docs.io/), for more information on how to install, configure and use visit their website.
+ This file was generated by [terraform-docs](https://terraform-docs.io/), for more information on how to install, configure, and use visit their website.
- To update this `README.md` after changes to the Terraform code in this folder, run: `terraform-docs .`
+ To update this `README.md` after changes to the Terraform code in this folder, run: `terraform-docs -c `./.terraform-docs.yml .`
To make configuration changes to how this doc is generated, see `./.terraform-docs.yml`
-
+
{{ .Content }}
@@ -45,4 +45,4 @@ settings:
read-comments: true
required: true
sensitive: true
- type: true
\ No newline at end of file
+ type: true
diff --git a/packages/twenty-docker/k8s/terraform/README.md b/packages/twenty-docker/k8s/terraform/README.md
index 10a7ab557cb7..f6955300a63f 100644
--- a/packages/twenty-docker/k8s/terraform/README.md
+++ b/packages/twenty-docker/k8s/terraform/README.md
@@ -1,9 +1,9 @@
# TwentyCRM Terraform Docs
-This file was generated by [terraform-docs](https://terraform-docs.io/), for more information on how to install, configure and use visit their website.
+This file was generated by [terraform-docs](https://terraform-docs.io/), for more information on how to install, configure, and use visit their website.
-To update this `README.md` after changes to the Terraform code in this folder, run: `terraform-docs .`
+To update this `README.md` after changes to the Terraform code in this folder, run: `terraform-docs -c `./.terraform-docs.yml .`
To make configuration changes to how this doc is generated, see `./.terraform-docs.yml`
@@ -12,30 +12,37 @@ To make configuration changes to how this doc is generated, see `./.terraform-do
| Name | Version |
|------|---------|
| [terraform](#requirement\_terraform) | >= 1.9.2 |
-| [kubernetes](#requirement\_kubernetes) | >= 2.31.0 |
+| [kubernetes](#requirement\_kubernetes) | >= 2.32.0 |
+| [random](#requirement\_random) | >= 3.6.3 |
## Providers
| Name | Version |
|------|---------|
-| [kubernetes](#provider\_kubernetes) | >= 2.31.0 |
+| [kubernetes](#provider\_kubernetes) | >= 2.32.0 |
+| [random](#provider\_random) | >= 3.6.3 |
## Resources
| Name | Type |
|------|------|
| [kubernetes_deployment.twentycrm_db](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/deployment) | resource |
+| [kubernetes_deployment.twentycrm_redis](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/deployment) | resource |
| [kubernetes_deployment.twentycrm_server](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/deployment) | resource |
| [kubernetes_deployment.twentycrm_worker](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/deployment) | resource |
| [kubernetes_ingress.twentycrm](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/ingress) | resource |
| [kubernetes_namespace.twentycrm](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/namespace) | resource |
| [kubernetes_persistent_volume.db](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/persistent_volume) | resource |
+| [kubernetes_persistent_volume.docker_data](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/persistent_volume) | resource |
| [kubernetes_persistent_volume.server](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/persistent_volume) | resource |
| [kubernetes_persistent_volume_claim.db](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/persistent_volume_claim) | resource |
+| [kubernetes_persistent_volume_claim.docker_data](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/persistent_volume_claim) | resource |
| [kubernetes_persistent_volume_claim.server](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/persistent_volume_claim) | resource |
| [kubernetes_secret.twentycrm_tokens](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/secret) | resource |
| [kubernetes_service.twentycrm_db](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/service) | resource |
+| [kubernetes_service.twentycrm_redis](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/service) | resource |
| [kubernetes_service.twentycrm_server](https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/service) | resource |
+| [random_bytes.this](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/bytes) | resource |
## Inputs
@@ -43,22 +50,24 @@ To make configuration changes to how this doc is generated, see `./.terraform-do
|------|-------------|------|---------|:--------:|
| [twentycrm\_app\_hostname](#input\_twentycrm\_app\_hostname) | The protocol, DNS fully qualified hostname, and port used to access TwentyCRM in your environment. Ex: https://crm.example.com:443 | `string` | n/a | yes |
| [twentycrm\_pgdb\_admin\_password](#input\_twentycrm\_pgdb\_admin\_password) | TwentyCRM password for postgres database. | `string` | n/a | yes |
-| [twentycrm\_token\_accessToken](#input\_twentycrm\_token\_accessToken) | TwentyCRM access Token | `string` | n/a | yes |
-| [twentycrm\_token\_fileToken](#input\_twentycrm\_token\_fileToken) | TwentyCRM file Token | `string` | n/a | yes |
-| [twentycrm\_token\_loginToken](#input\_twentycrm\_token\_loginToken) | TwentyCRM login Token | `string` | n/a | yes |
-| [twentycrm\_token\_refreshToken](#input\_twentycrm\_token\_refreshToken) | TwentyCRM refresh Token | `string` | n/a | yes |
| [twentycrm\_app\_name](#input\_twentycrm\_app\_name) | A friendly name prefix to use for every component deployed. | `string` | `"twentycrm"` | no |
| [twentycrm\_db\_image](#input\_twentycrm\_db\_image) | TwentyCRM image for database deployment. This defaults to latest. | `string` | `"twentycrm/twenty-postgres:latest"` | no |
| [twentycrm\_db\_pv\_capacity](#input\_twentycrm\_db\_pv\_capacity) | Storage capacity provisioned for database persistent volume. | `string` | `"10Gi"` | no |
| [twentycrm\_db\_pv\_path](#input\_twentycrm\_db\_pv\_path) | Local path to use to store the physical volume if using local storage on nodes. | `string` | `""` | no |
| [twentycrm\_db\_pvc\_requests](#input\_twentycrm\_db\_pvc\_requests) | Storage capacity reservation for database persistent volume claim. | `string` | `"10Gi"` | no |
| [twentycrm\_db\_replicas](#input\_twentycrm\_db\_replicas) | Number of replicas for the TwentyCRM database deployment. This defaults to 1. | `number` | `1` | no |
+| [twentycrm\_docker\_data\_mount\_path](#input\_twentycrm\_docker\_data\_mount\_path) | TwentyCRM mount path for servers application data. Defaults to '/app/docker-data'. | `string` | `"/app/docker-data"` | no |
+| [twentycrm\_docker\_data\_pv\_capacity](#input\_twentycrm\_docker\_data\_pv\_capacity) | Storage capacity provisioned for server persistent volume. | `string` | `"10Gi"` | no |
+| [twentycrm\_docker\_data\_pv\_path](#input\_twentycrm\_docker\_data\_pv\_path) | Local path to use to store the physical volume if using local storage on nodes. | `string` | `""` | no |
+| [twentycrm\_docker\_data\_pvc\_requests](#input\_twentycrm\_docker\_data\_pvc\_requests) | Storage capacity reservation for server persistent volume claim. | `string` | `"10Gi"` | no |
| [twentycrm\_namespace](#input\_twentycrm\_namespace) | Namespace for all TwentyCRM resources | `string` | `"twentycrm"` | no |
-| [twentycrm\_server\_data\_mount\_path](#input\_twentycrm\_server\_data\_mount\_path) | TwentyCRM mount path for servers application data. Defaults to '/app/docker-data'. | `string` | `"/app/docker-data"` | no |
+| [twentycrm\_redis\_image](#input\_twentycrm\_redis\_image) | TwentyCRM image for Redis deployment. This defaults to latest. | `string` | `"redis/redis-stack-server:latest"` | no |
+| [twentycrm\_redis\_replicas](#input\_twentycrm\_redis\_replicas) | Number of replicas for the TwentyCRM Redis deployment. This defaults to 1. | `number` | `1` | no |
+| [twentycrm\_server\_data\_mount\_path](#input\_twentycrm\_server\_data\_mount\_path) | TwentyCRM mount path for servers application data. Defaults to '/app/packages/twenty-server/.local-storage'. | `string` | `"/app/packages/twenty-server/.local-storage"` | no |
| [twentycrm\_server\_image](#input\_twentycrm\_server\_image) | TwentyCRM server image for the server deployment. This defaults to latest. This value is also used for the workers image. | `string` | `"twentycrm/twenty:latest"` | no |
| [twentycrm\_server\_pv\_capacity](#input\_twentycrm\_server\_pv\_capacity) | Storage capacity provisioned for server persistent volume. | `string` | `"10Gi"` | no |
| [twentycrm\_server\_pv\_path](#input\_twentycrm\_server\_pv\_path) | Local path to use to store the physical volume if using local storage on nodes. | `string` | `""` | no |
| [twentycrm\_server\_pvc\_requests](#input\_twentycrm\_server\_pvc\_requests) | Storage capacity reservation for server persistent volume claim. | `string` | `"10Gi"` | no |
| [twentycrm\_server\_replicas](#input\_twentycrm\_server\_replicas) | Number of replicas for the TwentyCRM server deployment. This defaults to 1. | `number` | `1` | no |
| [twentycrm\_worker\_replicas](#input\_twentycrm\_worker\_replicas) | Number of replicas for the TwentyCRM worker deployment. This defaults to 1. | `number` | `1` | no |
-
\ No newline at end of file
+
diff --git a/packages/twenty-docker/k8s/terraform/deployment-redis.tf b/packages/twenty-docker/k8s/terraform/deployment-redis.tf
new file mode 100644
index 000000000000..d867dac76ee0
--- /dev/null
+++ b/packages/twenty-docker/k8s/terraform/deployment-redis.tf
@@ -0,0 +1,60 @@
+resource "kubernetes_deployment" "twentycrm_redis" {
+ metadata {
+ name = "${var.twentycrm_app_name}-redis"
+ namespace = kubernetes_namespace.twentycrm.metadata.0.name
+
+ labels = {
+ app = "${var.twentycrm_app_name}-redis"
+ }
+ }
+
+ spec {
+ replicas = var.twentycrm_redis_replicas
+ selector {
+ match_labels = {
+ app = "${var.twentycrm_app_name}-redis"
+ }
+ }
+
+ strategy {
+ type = "RollingUpdate"
+ rolling_update {
+ max_surge = "1"
+ max_unavailable = "1"
+ }
+ }
+
+ template {
+ metadata {
+ labels = {
+ app = "${var.twentycrm_app_name}-redis"
+ }
+ }
+
+ spec {
+ container {
+ image = var.twentycrm_redis_image
+ name = "redis"
+
+ port {
+ container_port = 6379
+ protocol = "TCP"
+ }
+
+ resources {
+ requests = {
+ cpu = "250m"
+ memory = "1024Mi"
+ }
+ limits = {
+ cpu = "500m"
+ memory = "2048Mi"
+ }
+ }
+ }
+ dns_policy = "ClusterFirst"
+ restart_policy = "Always"
+ }
+ }
+ }
+}
diff --git a/packages/twenty-docker/k8s/terraform/deployment-server.tf b/packages/twenty-docker/k8s/terraform/deployment-server.tf
index a3c1f9ac1d11..1868b17624da 100644
--- a/packages/twenty-docker/k8s/terraform/deployment-server.tf
+++ b/packages/twenty-docker/k8s/terraform/deployment-server.tf
@@ -37,20 +37,14 @@ resource "kubernetes_deployment" "twentycrm_server" {
stdin = true
tty = true
- security_context {
- allow_privilege_escalation = true
- privileged = true
- run_as_user = 1000
- }
-
env {
name = "PORT"
value = "3000"
}
- env {
- name = "DEBUG_MODE"
- value = false
- }
+ # env {
+ # name = "DEBUG_MODE"
+ # value = false
+ # }
env {
name = "SERVER_URL"
@@ -64,9 +58,16 @@ resource "kubernetes_deployment" "twentycrm_server" {
env {
name = "PG_DATABASE_URL"
- value = "postgres://twenty:${var.twentycrm_pgdb_admin_password}@${var.twentycrm_app_name}-db.${kubernetes_namespace.twentycrm.metadata.0.name}.svc.cluster.local/default"
+ value = "postgres://twenty:${var.twentycrm_pgdb_admin_password}@${kubernetes_service.twentycrm_db.metadata.0.name}.${kubernetes_namespace.twentycrm.metadata.0.name}.svc.cluster.local/default"
+ }
+ env {
+ name = "REDIS_HOST"
+ value = "${kubernetes_service.twentycrm_redis.metadata.0.name}.${kubernetes_namespace.twentycrm.metadata.0.name}.svc.cluster.local"
+ }
+ env {
+ name = "REDIS_PORT"
+ value = 6379
}
-
env {
name = "ENABLE_DB_MIGRATIONS"
value = "true"
@@ -83,7 +84,15 @@ resource "kubernetes_deployment" "twentycrm_server" {
}
env {
name = "MESSAGE_QUEUE_TYPE"
- value = "pg-boss"
+ value = "bull-mq"
+ }
+ env {
+ name = "ACCESS_TOKEN_EXPIRES_IN"
+ value = "7d"
+ }
+ env {
+ name = "LOGIN_TOKEN_EXPIRES_IN"
+ value = "1h"
}
env {
name = "ACCESS_TOKEN_SECRET"
@@ -145,6 +154,11 @@ resource "kubernetes_deployment" "twentycrm_server" {
name = "server-data"
mount_path = var.twentycrm_server_data_mount_path
}
+
+ volume_mount {
+ name = "docker-data"
+ mount_path = var.twentycrm_docker_data_mount_path
+ }
}
volume {
@@ -155,6 +169,14 @@ resource "kubernetes_deployment" "twentycrm_server" {
}
}
+ volume {
+ name = "docker-data"
+
+ persistent_volume_claim {
+ claim_name = kubernetes_persistent_volume_claim.docker_data.metadata.0.name
+ }
+ }
+
dns_policy = "ClusterFirst"
restart_policy = "Always"
}
@@ -162,6 +184,7 @@ resource "kubernetes_deployment" "twentycrm_server" {
}
depends_on = [
kubernetes_deployment.twentycrm_db,
+ kubernetes_deployment.twentycrm_redis,
kubernetes_secret.twentycrm_tokens
]
}
diff --git a/packages/twenty-docker/k8s/terraform/deployment-worker.tf b/packages/twenty-docker/k8s/terraform/deployment-worker.tf
index 9a005839ddda..78e5ea6dcc1d 100644
--- a/packages/twenty-docker/k8s/terraform/deployment-worker.tf
+++ b/packages/twenty-docker/k8s/terraform/deployment-worker.tf
@@ -50,7 +50,22 @@ resource "kubernetes_deployment" "twentycrm_worker" {
env {
name = "PG_DATABASE_URL"
- value = "postgres://twenty:${var.twentycrm_pgdb_admin_password}@${var.twentycrm_app_name}-db.${kubernetes_namespace.twentycrm.metadata.0.name}.svc.cluster.local/default"
+ value = "postgres://twenty:${var.twentycrm_pgdb_admin_password}@${kubernetes_service.twentycrm_db.metadata.0.name}.${kubernetes_namespace.twentycrm.metadata.0.name}.svc.cluster.local/default"
+ }
+
+ env {
+ name = "CACHE_STORAGE_TYPE"
+ value = "redis"
+ }
+
+ env {
+ name = "REDIS_HOST"
+ value = "${kubernetes_service.twentycrm_redis.metadata.0.name}.${kubernetes_namespace.twentycrm.metadata.0.name}.svc.cluster.local"
+ }
+
+ env {
+ name = "REDIS_PORT"
+ value = 6379
}
env {
@@ -64,7 +79,7 @@ resource "kubernetes_deployment" "twentycrm_worker" {
}
env {
name = "MESSAGE_QUEUE_TYPE"
- value = "pg-boss"
+ value = "bull-mq"
}
env {
@@ -110,11 +125,11 @@ resource "kubernetes_deployment" "twentycrm_worker" {
resources {
requests = {
cpu = "250m"
- memory = "256Mi"
+ memory = "1024Mi"
}
limits = {
cpu = "1000m"
- memory = "1024Mi"
+ memory = "2048Mi"
}
}
}
@@ -126,6 +141,8 @@ resource "kubernetes_deployment" "twentycrm_worker" {
}
depends_on = [
kubernetes_deployment.twentycrm_db,
- kubernetes_secret.twentycrm_tokens
+ kubernetes_deployment.twentycrm_redis,
+ kubernetes_deployment.twentycrm_server,
+ kubernetes_secret.twentycrm_tokens,
]
}
diff --git a/packages/twenty-docker/k8s/terraform/main.tf b/packages/twenty-docker/k8s/terraform/main.tf
index 66ae6e18e061..a0e208d15f5d 100644
--- a/packages/twenty-docker/k8s/terraform/main.tf
+++ b/packages/twenty-docker/k8s/terraform/main.tf
@@ -13,7 +13,11 @@ terraform {
required_providers {
kubernetes = {
source = "hashicorp/kubernetes"
- version = ">= 2.31.0"
+ version = ">= 2.32.0"
+ }
+ random = {
+ source = "hashicorp/random"
+ version = ">= 3.6.3"
}
}
}
diff --git a/packages/twenty-docker/k8s/terraform/pv-docker-data.tf b/packages/twenty-docker/k8s/terraform/pv-docker-data.tf
new file mode 100644
index 000000000000..9195fff61c8a
--- /dev/null
+++ b/packages/twenty-docker/k8s/terraform/pv-docker-data.tf
@@ -0,0 +1,19 @@
+resource "kubernetes_persistent_volume" "docker_data" {
+ metadata {
+ name = "${var.twentycrm_app_name}-docker-data-pv"
+ }
+ spec {
+ storage_class_name = "default"
+ capacity = {
+ storage = var.twentycrm_docker_data_pv_capacity
+ }
+ access_modes = ["ReadWriteOnce"]
+ # refer to Terraform Docs for your specific implementation requirements
+ # https://registry.terraform.io/providers/hashicorp/kubernetes/latest/docs/resources/persistent_volume
+ persistent_volume_source {
+ local {
+ path = var.twentycrm_docker_data_pv_path
+ }
+ }
+ }
+}
diff --git a/packages/twenty-docker/k8s/terraform/pvc-docker-data.tf b/packages/twenty-docker/k8s/terraform/pvc-docker-data.tf
new file mode 100644
index 000000000000..daac13dcc3a3
--- /dev/null
+++ b/packages/twenty-docker/k8s/terraform/pvc-docker-data.tf
@@ -0,0 +1,15 @@
+resource "kubernetes_persistent_volume_claim" "docker_data" {
+ metadata {
+ name = "${var.twentycrm_app_name}-docker-data-pvc"
+ namespace = kubernetes_namespace.twentycrm.metadata.0.name
+ }
+ spec {
+ access_modes = ["ReadWriteOnce"]
+ resources {
+ requests = {
+ storage = var.twentycrm_docker_data_pvc_requests
+ }
+ }
+ volume_name = kubernetes_persistent_volume.docker_data.metadata.0.name
+ }
+}
diff --git a/packages/twenty-docker/k8s/terraform/secret.tf b/packages/twenty-docker/k8s/terraform/secret.tf
index 664d07803ccc..2aa7ccf4765a 100644
--- a/packages/twenty-docker/k8s/terraform/secret.tf
+++ b/packages/twenty-docker/k8s/terraform/secret.tf
@@ -1,3 +1,18 @@
+locals {
+ tokens = [
+ "accessToken",
+ "loginToken",
+ "refreshToken",
+ "fileToken"
+ ]
+}
+
+resource "random_bytes" "this" {
+ for_each = toset(local.tokens)
+
+ length = 32
+}
+
resource "kubernetes_secret" "twentycrm_tokens" {
metadata {
name = "tokens"
@@ -5,11 +20,9 @@ resource "kubernetes_secret" "twentycrm_tokens" {
}
data = {
- accessToken = var.twentycrm_token_accessToken
- loginToken = var.twentycrm_token_loginToken
- refreshToken = var.twentycrm_token_refreshToken
- fileToken = var.twentycrm_token_fileToken
+ accessToken = random_bytes.this["accessToken"].base64
+ loginToken = random_bytes.this["loginToken"].base64
+ refreshToken = random_bytes.this["refreshToken"].base64
+ fileToken = random_bytes.this["fileToken"].base64
}
-
- # type = "kubernetes.io/basic-auth"
}
diff --git a/packages/twenty-docker/k8s/terraform/service-redis.tf b/packages/twenty-docker/k8s/terraform/service-redis.tf
new file mode 100644
index 000000000000..fab1c0051ccf
--- /dev/null
+++ b/packages/twenty-docker/k8s/terraform/service-redis.tf
@@ -0,0 +1,18 @@
+resource "kubernetes_service" "twentycrm_redis" {
+ metadata {
+ name = "${var.twentycrm_app_name}-redis"
+ namespace = kubernetes_namespace.twentycrm.metadata.0.name
+ }
+ spec {
+ selector = {
+ app = "${var.twentycrm_app_name}-redis"
+ }
+ session_affinity = "ClientIP"
+ port {
+ port = 6379
+ target_port = 6379
+ }
+
+ type = "ClusterIP"
+ }
+}
diff --git a/packages/twenty-docker/k8s/terraform/variables.tf b/packages/twenty-docker/k8s/terraform/variables.tf
index 53255aaf1489..7b682db79a35 100644
--- a/packages/twenty-docker/k8s/terraform/variables.tf
+++ b/packages/twenty-docker/k8s/terraform/variables.tf
@@ -1,30 +1,6 @@
######################
# Required Variables #
######################
-variable "twentycrm_token_accessToken" {
- type = string
- description = "TwentyCRM access Token"
- sensitive = true
-}
-
-variable "twentycrm_token_loginToken" {
- type = string
- description = "TwentyCRM login Token"
- sensitive = true
-}
-
-variable "twentycrm_token_refreshToken" {
- type = string
- description = "TwentyCRM refresh Token"
- sensitive = true
-}
-
-variable "twentycrm_token_fileToken" {
- type = string
- description = "TwentyCRM file Token"
- sensitive = true
-}
-
variable "twentycrm_pgdb_admin_password" {
type = string
description = "TwentyCRM password for postgres database."
@@ -77,8 +53,8 @@ variable "twentycrm_db_replicas" {
variable "twentycrm_server_data_mount_path" {
type = string
- default = "/app/docker-data"
- description = "TwentyCRM mount path for servers application data. Defaults to '/app/docker-data'."
+ default = "/app/packages/twenty-server/.local-storage"
+ description = "TwentyCRM mount path for servers application data. Defaults to '/app/packages/twenty-server/.local-storage'."
}
variable "twentycrm_db_pv_path" {
@@ -122,3 +98,39 @@ variable "twentycrm_namespace" {
default = "twentycrm"
description = "Namespace for all TwentyCRM resources"
}
+
+variable "twentycrm_redis_replicas" {
+ type = number
+ default = 1
+ description = "Number of replicas for the TwentyCRM Redis deployment. This defaults to 1."
+}
+
+variable "twentycrm_redis_image" {
+ type = string
+ default = "redis/redis-stack-server:latest"
+ description = "TwentyCRM image for Redis deployment. This defaults to latest."
+}
+
+variable "twentycrm_docker_data_mount_path" {
+ type = string
+ default = "/app/docker-data"
+ description = "TwentyCRM mount path for servers application data. Defaults to '/app/docker-data'."
+}
+
+variable "twentycrm_docker_data_pv_path" {
+ type = string
+ default = ""
+ description = "Local path to use to store the physical volume if using local storage on nodes."
+}
+
+variable "twentycrm_docker_data_pv_capacity" {
+ type = string
+ default = "100Mi"
+ description = "Storage capacity provisioned for server persistent volume."
+}
+
+variable "twentycrm_docker_data_pvc_requests" {
+ type = string
+ default = "100Mi"
+ description = "Storage capacity reservation for server persistent volume claim."
+}
diff --git a/packages/twenty-docker/twenty-website/Dockerfile b/packages/twenty-docker/twenty-website/Dockerfile
deleted file mode 100644
index e3b7420ff76a..000000000000
--- a/packages/twenty-docker/twenty-website/Dockerfile
+++ /dev/null
@@ -1,29 +0,0 @@
-FROM node:18.17.1-alpine as twenty-website-build
-
-
-WORKDIR /app
-
-COPY ./package.json .
-COPY ./yarn.lock .
-COPY ./.yarnrc.yml .
-COPY ./.yarn/releases /app/.yarn/releases
-COPY ./tools/eslint-rules /app/tools/eslint-rules
-COPY ./packages/twenty-website/package.json /app/packages/twenty-website/package.json
-
-RUN yarn
-
-COPY ./packages/twenty-website /app/packages/twenty-website
-RUN npx nx build twenty-website
-
-FROM node:18.17.1-alpine as twenty-website
-
-WORKDIR /app/packages/twenty-website
-
-COPY --from=twenty-website-build /app /app
-
-WORKDIR /app/packages/twenty-website
-
-LABEL org.opencontainers.image.source=https://github.com/twentyhq/twenty
-LABEL org.opencontainers.image.description="This image provides a consistent and reproducible environment for the website."
-
-CMD ["/bin/sh", "-c", "npx nx start"]
\ No newline at end of file
diff --git a/packages/twenty-emails/package.json b/packages/twenty-emails/package.json
index 36af44f3da6e..408930ac02ec 100644
--- a/packages/twenty-emails/package.json
+++ b/packages/twenty-emails/package.json
@@ -1,6 +1,6 @@
{
"name": "twenty-emails",
- "version": "0.24.2",
+ "version": "0.32.0-canary",
"description": "",
"author": "",
"private": true,
diff --git a/packages/twenty-emails/src/emails/workflow-action.email.tsx b/packages/twenty-emails/src/emails/workflow-action.email.tsx
deleted file mode 100644
index 2eaa3a451ebb..000000000000
--- a/packages/twenty-emails/src/emails/workflow-action.email.tsx
+++ /dev/null
@@ -1,29 +0,0 @@
-import { BaseEmail } from 'src/components/BaseEmail';
-import { Title } from 'src/components/Title';
-import { CallToAction } from 'src/components/CallToAction';
-
-type WorkflowActionEmailProps = {
- dangerousHTML?: string;
- title?: string;
- callToAction?: {
- value: string;
- href: string;
- };
-};
-export const WorkflowActionEmail = ({
- dangerousHTML,
- title,
- callToAction,
-}: WorkflowActionEmailProps) => {
- return (
-
- {title && }
- {dangerousHTML && (
-
- )}
- {callToAction && (
-
- )}
-
- );
-};
diff --git a/packages/twenty-emails/src/index.ts b/packages/twenty-emails/src/index.ts
index 9fca13d73b55..ddecb05c8655 100644
--- a/packages/twenty-emails/src/index.ts
+++ b/packages/twenty-emails/src/index.ts
@@ -3,4 +3,3 @@ export * from './emails/delete-inactive-workspaces.email';
export * from './emails/password-reset-link.email';
export * from './emails/password-update-notify.email';
export * from './emails/send-invite-link.email';
-export * from './emails/workflow-action.email';
diff --git a/packages/twenty-front/.eslintrc.cjs b/packages/twenty-front/.eslintrc.cjs
index bb57531265be..df4daf7633a4 100644
--- a/packages/twenty-front/.eslintrc.cjs
+++ b/packages/twenty-front/.eslintrc.cjs
@@ -6,7 +6,6 @@ module.exports = {
'mockServiceWorker.js',
'**/generated*/*',
'**/generated/standard-metadata-query-result.ts',
- '**/getObjectMetadataItemsMock.ts',
'tsup.config.ts',
'build',
'coverage',
diff --git a/packages/twenty-front/.storybook/preview.tsx b/packages/twenty-front/.storybook/preview.tsx
index f49ed56c58b9..1d67634e2a54 100644
--- a/packages/twenty-front/.storybook/preview.tsx
+++ b/packages/twenty-front/.storybook/preview.tsx
@@ -1,7 +1,7 @@
-import { useEffect } from 'react';
import { ThemeProvider } from '@emotion/react';
import { Preview } from '@storybook/react';
import { initialize, mswDecorator } from 'msw-storybook-addon';
+import { useEffect } from 'react';
import { useDarkMode } from 'storybook-dark-mode';
import { THEME_DARK, THEME_LIGHT, ThemeContextProvider } from 'twenty-ui';
@@ -13,12 +13,16 @@ import 'react-loading-skeleton/dist/skeleton.css';
initialize({
onUnhandledRequest: async (request: Request) => {
const fileExtensionsToIgnore =
- /\.(ts|tsx|js|jsx|svg|css|png)(\?v=[a-zA-Z0-9]+)?/;
+ /\.(ts|tsx|js|jsx|svg|css|png|woff2)(\?v=[a-zA-Z0-9]+)?/;
if (fileExtensionsToIgnore.test(request.url)) {
return;
}
+ if (request.url.startsWith('http://localhost:3000/files/data:image')) {
+ return;
+ }
+
const requestBody = await request.json();
// eslint-disable-next-line no-console
console.warn(`Unhandled ${request.method} request to ${request.url}
diff --git a/packages/twenty-front/jest.config.ts b/packages/twenty-front/jest.config.ts
index c71df7b77aff..8ed7f398db4e 100644
--- a/packages/twenty-front/jest.config.ts
+++ b/packages/twenty-front/jest.config.ts
@@ -2,6 +2,7 @@ import { JestConfigWithTsJest, pathsToModuleNameMapper } from 'ts-jest';
// eslint-disable-next-line @typescript-eslint/no-var-requires
const tsConfig = require('./tsconfig.json');
+process.env.TZ = 'GMT';
const jestConfig: JestConfigWithTsJest = {
// to enable logs, comment out the following line
@@ -25,7 +26,7 @@ const jestConfig: JestConfigWithTsJest = {
coverageThreshold: {
global: {
statements: 60,
- lines: 60,
+ lines: 55,
functions: 50,
},
},
diff --git a/packages/twenty-front/nyc.config.cjs b/packages/twenty-front/nyc.config.cjs
index 3fbf2dfd6204..8ae501c6910f 100644
--- a/packages/twenty-front/nyc.config.cjs
+++ b/packages/twenty-front/nyc.config.cjs
@@ -16,7 +16,7 @@ const modulesCoverage = {
};
const pagesCoverage = {
- branches: 40,
+ branches: 35,
statements: 60,
lines: 60,
functions: 45,
diff --git a/packages/twenty-front/package.json b/packages/twenty-front/package.json
index 434934ed719d..80eb86a7cf2a 100644
--- a/packages/twenty-front/package.json
+++ b/packages/twenty-front/package.json
@@ -1,6 +1,6 @@
{
"name": "twenty-front",
- "version": "0.24.2",
+ "version": "0.32.0-canary",
"private": true,
"type": "module",
"scripts": {
@@ -30,6 +30,9 @@
"workerDirectory": "public"
},
"dependencies": {
+ "@nivo/calendar": "^0.87.0",
+ "@nivo/core": "^0.87.0",
+ "@nivo/line": "^0.87.0",
"@xyflow/react": "^12.0.4",
"transliteration": "^2.3.5"
}
diff --git a/packages/twenty-front/project.json b/packages/twenty-front/project.json
index 4dcb7f444a00..3ed94b22f256 100644
--- a/packages/twenty-front/project.json
+++ b/packages/twenty-front/project.json
@@ -67,7 +67,7 @@
"test": {},
"storybook:build": {
"options": {
- "env": { "NODE_OPTIONS": "--max_old_space_size=6000" }
+ "env": { "NODE_OPTIONS": "--max_old_space_size=6500" }
}
},
"storybook:serve:dev": {
diff --git a/packages/twenty-front/public/mockServiceWorker.js b/packages/twenty-front/public/mockServiceWorker.js
index e369128ec00c..15751fa1994f 100644
--- a/packages/twenty-front/public/mockServiceWorker.js
+++ b/packages/twenty-front/public/mockServiceWorker.js
@@ -2,13 +2,14 @@
/* tslint:disable */
/**
- * Mock Service Worker (2.0.11).
+ * Mock Service Worker.
* @see https://github.com/mswjs/msw
* - Please do NOT modify this file.
* - Please do NOT serve this file on production.
*/
-const INTEGRITY_CHECKSUM = 'c5f7f8e188b673ea4e677df7ea3c5a39'
+const PACKAGE_VERSION = '2.3.5'
+const INTEGRITY_CHECKSUM = '26357c79639bfa20d64c0efca2a87423'
const IS_MOCKED_RESPONSE = Symbol('isMockedResponse')
const activeClientIds = new Set()
@@ -48,7 +49,10 @@ self.addEventListener('message', async function (event) {
case 'INTEGRITY_CHECK_REQUEST': {
sendToClient(client, {
type: 'INTEGRITY_CHECK_RESPONSE',
- payload: INTEGRITY_CHECKSUM,
+ payload: {
+ packageVersion: PACKAGE_VERSION,
+ checksum: INTEGRITY_CHECKSUM,
+ },
})
break
}
@@ -202,13 +206,6 @@ async function getResponse(event, client, requestId) {
return passthrough()
}
- // Bypass requests with the explicit bypass header.
- // Such requests can be issued by "ctx.fetch()".
- const mswIntention = request.headers.get('x-msw-intention')
- if (['bypass', 'passthrough'].includes(mswIntention)) {
- return passthrough()
- }
-
// Notify the client that a request has been intercepted.
const requestBuffer = await request.arrayBuffer()
const clientMessage = await sendToClient(
@@ -240,7 +237,7 @@ async function getResponse(event, client, requestId) {
return respondWithMock(clientMessage.data)
}
- case 'MOCK_NOT_FOUND': {
+ case 'PASSTHROUGH': {
return passthrough()
}
}
diff --git a/packages/twenty-front/src/App.tsx b/packages/twenty-front/src/App.tsx
deleted file mode 100644
index 1c6adcfdf60e..000000000000
--- a/packages/twenty-front/src/App.tsx
+++ /dev/null
@@ -1,173 +0,0 @@
-import { StrictMode } from 'react';
-import {
- createBrowserRouter,
- createRoutesFromElements,
- Outlet,
- Route,
- RouterProvider,
- useLocation,
-} from 'react-router-dom';
-import { useRecoilValue } from 'recoil';
-
-import { ApolloProvider } from '@/apollo/components/ApolloProvider';
-import { AuthProvider } from '@/auth/components/AuthProvider';
-import { VerifyEffect } from '@/auth/components/VerifyEffect';
-import { ChromeExtensionSidecarEffect } from '@/chrome-extension-sidecar/components/ChromeExtensionSidecarEffect';
-import { ChromeExtensionSidecarProvider } from '@/chrome-extension-sidecar/components/ChromeExtensionSidecarProvider';
-import { ClientConfigProvider } from '@/client-config/components/ClientConfigProvider';
-import { ClientConfigProviderEffect } from '@/client-config/components/ClientConfigProviderEffect';
-import { billingState } from '@/client-config/states/billingState';
-import { PromiseRejectionEffect } from '@/error-handler/components/PromiseRejectionEffect';
-import indexAppPath from '@/navigation/utils/indexAppPath';
-import { ApolloMetadataClientProvider } from '@/object-metadata/components/ApolloMetadataClientProvider';
-import { ObjectMetadataItemsProvider } from '@/object-metadata/components/ObjectMetadataItemsProvider';
-import { PrefetchDataProvider } from '@/prefetch/components/PrefetchDataProvider';
-import { AppPath } from '@/types/AppPath';
-import { DialogManager } from '@/ui/feedback/dialog-manager/components/DialogManager';
-import { DialogManagerScope } from '@/ui/feedback/dialog-manager/scopes/DialogManagerScope';
-import { SnackBarProvider } from '@/ui/feedback/snack-bar-manager/components/SnackBarProvider';
-import { BlankLayout } from '@/ui/layout/page/BlankLayout';
-import { DefaultLayout } from '@/ui/layout/page/DefaultLayout';
-import { AppThemeProvider } from '@/ui/theme/components/AppThemeProvider';
-import { PageTitle } from '@/ui/utilities/page-title/PageTitle';
-import { UserProvider } from '@/users/components/UserProvider';
-import { UserProviderEffect } from '@/users/components/UserProviderEffect';
-import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
-import { CommandMenuEffect } from '~/effect-components/CommandMenuEffect';
-import { GotoHotkeysEffect } from '~/effect-components/GotoHotkeysEffect';
-import { PageChangeEffect } from '~/effect-components/PageChangeEffect';
-import { Authorize } from '~/pages/auth/Authorize';
-import { Invite } from '~/pages/auth/Invite';
-import { PasswordReset } from '~/pages/auth/PasswordReset';
-import { SignInUp } from '~/pages/auth/SignInUp';
-import { ImpersonateEffect } from '~/pages/impersonate/ImpersonateEffect';
-import { NotFound } from '~/pages/not-found/NotFound';
-import { RecordIndexPage } from '~/pages/object-record/RecordIndexPage';
-import { RecordShowPage } from '~/pages/object-record/RecordShowPage';
-import { ChooseYourPlan } from '~/pages/onboarding/ChooseYourPlan';
-import { CreateProfile } from '~/pages/onboarding/CreateProfile';
-import { CreateWorkspace } from '~/pages/onboarding/CreateWorkspace';
-import { InviteTeam } from '~/pages/onboarding/InviteTeam';
-import { PaymentSuccess } from '~/pages/onboarding/PaymentSuccess';
-import { SyncEmails } from '~/pages/onboarding/SyncEmails';
-import { SettingsRoutes } from '~/SettingsRoutes';
-import { getPageTitleFromPath } from '~/utils/title-utils';
-
-const ProvidersThatNeedRouterContext = () => {
- const { pathname } = useLocation();
- const pageTitle = getPageTitleFromPath(pathname);
-
- return (
- <>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- >
- );
-};
-
-const createRouter = (
- isBillingEnabled?: boolean,
- isCRMMigrationEnabled?: boolean,
- isServerlessFunctionSettingsEnabled?: boolean,
-) =>
- createBrowserRouter(
- createRoutesFromElements(
- }
- // To switch state to `loading` temporarily to enable us
- // to set scroll position before the page is rendered
- loader={async () => Promise.resolve(null)}
- >
- }>
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- } />
- }
- />
- >} />
- } />
- } />
- } />
-
- }
- />
- } />
-
- }>
- } />
-
- ,
- ),
- );
-
-export const App = () => {
- const billing = useRecoilValue(billingState);
- const isFreeAccessEnabled = useIsFeatureEnabled('IS_FREE_ACCESS_ENABLED');
- const isCRMMigrationEnabled = useIsFeatureEnabled('IS_CRM_MIGRATION_ENABLED');
- const isServerlessFunctionSettingsEnabled = useIsFeatureEnabled(
- 'IS_FUNCTION_SETTINGS_ENABLED',
- );
-
- const isBillingPageEnabled =
- billing?.isBillingEnabled && !isFreeAccessEnabled;
-
- return (
-
- );
-};
diff --git a/packages/twenty-front/src/__stories__/App.stories.tsx b/packages/twenty-front/src/__stories__/AppRouter.stories.tsx
similarity index 92%
rename from packages/twenty-front/src/__stories__/App.stories.tsx
rename to packages/twenty-front/src/__stories__/AppRouter.stories.tsx
index c5314b5652a1..9d2fe91a6523 100644
--- a/packages/twenty-front/src/__stories__/App.stories.tsx
+++ b/packages/twenty-front/src/__stories__/AppRouter.stories.tsx
@@ -1,8 +1,8 @@
-import { HelmetProvider } from 'react-helmet-async';
import { getOperationName } from '@apollo/client/utilities';
import { jest } from '@storybook/jest';
import { Meta, StoryObj } from '@storybook/react';
import { graphql, HttpResponse } from 'msw';
+import { HelmetProvider } from 'react-helmet-async';
import { RecoilRoot } from 'recoil';
import { IconsProvider } from 'twenty-ui';
@@ -11,13 +11,14 @@ import indexAppPath from '@/navigation/utils/indexAppPath';
import { AppPath } from '@/types/AppPath';
import { SnackBarProviderScope } from '@/ui/feedback/snack-bar-manager/scopes/SnackBarProviderScope';
import { GET_CURRENT_USER } from '@/users/graphql/queries/getCurrentUser';
-import { App } from '~/App';
+
+import { AppRouter } from '@/app/components/AppRouter';
import { graphqlMocks } from '~/testing/graphqlMocks';
import { mockedUserData } from '~/testing/mock-data/users';
-const meta: Meta = {
- title: 'App/App',
- component: App,
+const meta: Meta = {
+ title: 'App/AppRouter',
+ component: AppRouter,
decorators: [
(Story) => {
return (
@@ -41,7 +42,7 @@ const meta: Meta = {
};
export default meta;
-export type Story = StoryObj;
+export type Story = StoryObj;
export const Default: Story = {
play: async () => {
diff --git a/packages/twenty-front/src/effect-components/GotoHotkeysEffect.tsx b/packages/twenty-front/src/effect-components/GotoHotkeysEffect.tsx
deleted file mode 100644
index 1109066af34a..000000000000
--- a/packages/twenty-front/src/effect-components/GotoHotkeysEffect.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-import { useGoToHotkeys } from '@/ui/utilities/hotkey/hooks/useGoToHotkeys';
-
-export const GotoHotkeysEffect = () => {
- useGoToHotkeys('p', '/objects/people');
- useGoToHotkeys('c', '/objects/companies');
- useGoToHotkeys('o', '/objects/opportunities');
- useGoToHotkeys('s', '/settings/profile');
- useGoToHotkeys('t', '/objects/tasks');
-
- return <>>;
-};
diff --git a/packages/twenty-front/src/generated-metadata/gql.ts b/packages/twenty-front/src/generated-metadata/gql.ts
index a01821654262..415482505650 100644
--- a/packages/twenty-front/src/generated-metadata/gql.ts
+++ b/packages/twenty-front/src/generated-metadata/gql.ts
@@ -25,15 +25,15 @@ const documents = {
"\n \n query GetManyRemoteTables($input: FindManyRemoteTablesInput!) {\n findDistantTablesWithStatus(input: $input) {\n ...RemoteTableFields\n }\n }\n": types.GetManyRemoteTablesDocument,
"\n \n query GetOneDatabaseConnection($input: RemoteServerIdInput!) {\n findOneRemoteServerById(input: $input) {\n ...RemoteServerFields\n }\n }\n": types.GetOneDatabaseConnectionDocument,
"\n mutation CreateOneObjectMetadataItem($input: CreateOneObjectInput!) {\n createOneObject(input: $input) {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isActive\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n }\n }\n": types.CreateOneObjectMetadataItemDocument,
- "\n mutation CreateOneFieldMetadataItem($input: CreateOneFieldMetadataInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n defaultValue\n options\n }\n }\n": types.CreateOneFieldMetadataItemDocument,
+ "\n mutation CreateOneFieldMetadataItem($input: CreateOneFieldMetadataInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n settings\n defaultValue\n options\n }\n }\n": types.CreateOneFieldMetadataItemDocument,
"\n mutation CreateOneRelationMetadata($input: CreateOneRelationInput!) {\n createOneRelation(input: $input) {\n id\n relationType\n fromObjectMetadataId\n toObjectMetadataId\n fromFieldMetadataId\n toFieldMetadataId\n createdAt\n updatedAt\n }\n }\n": types.CreateOneRelationMetadataDocument,
- "\n mutation UpdateOneFieldMetadataItem(\n $idToUpdate: UUID!\n $updatePayload: UpdateFieldInput!\n ) {\n updateOneField(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n": types.UpdateOneFieldMetadataItemDocument,
+ "\n mutation UpdateOneFieldMetadataItem(\n $idToUpdate: UUID!\n $updatePayload: UpdateFieldInput!\n ) {\n updateOneField(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n settings\n }\n }\n": types.UpdateOneFieldMetadataItemDocument,
"\n mutation UpdateOneObjectMetadataItem(\n $idToUpdate: UUID!\n $updatePayload: UpdateObjectPayload!\n ) {\n updateOneObject(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isActive\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n }\n }\n": types.UpdateOneObjectMetadataItemDocument,
"\n mutation DeleteOneObjectMetadataItem($idToDelete: UUID!) {\n deleteOneObject(input: { id: $idToDelete }) {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isActive\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n }\n }\n": types.DeleteOneObjectMetadataItemDocument,
- "\n mutation DeleteOneFieldMetadataItem($idToDelete: UUID!) {\n deleteOneField(input: { id: $idToDelete }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n": types.DeleteOneFieldMetadataItemDocument,
+ "\n mutation DeleteOneFieldMetadataItem($idToDelete: UUID!) {\n deleteOneField(input: { id: $idToDelete }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n settings\n }\n }\n": types.DeleteOneFieldMetadataItemDocument,
"\n mutation DeleteOneRelationMetadataItem($idToDelete: UUID!) {\n deleteOneRelation(input: { id: $idToDelete }) {\n id\n }\n }\n": types.DeleteOneRelationMetadataItemDocument,
- "\n query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isRemote\n isActive\n isSystem\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n createdAt\n updatedAt\n defaultValue\n options\n relationDefinition {\n relationId\n direction\n sourceObjectMetadata {\n id\n nameSingular\n namePlural\n }\n sourceFieldMetadata {\n id\n name\n }\n targetObjectMetadata {\n id\n nameSingular\n namePlural\n }\n targetFieldMetadata {\n id\n name\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n": types.ObjectMetadataItemsDocument,
- "\n fragment ServerlessFunctionFields on ServerlessFunction {\n id\n name\n description\n sourceCodeHash\n runtime\n syncStatus\n latestVersion\n createdAt\n updatedAt\n }\n": types.ServerlessFunctionFieldsFragmentDoc,
+ "\n query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isRemote\n isActive\n isSystem\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n indexMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n name\n indexWhereClause\n indexType\n isUnique\n indexFieldMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n order\n fieldMetadataId\n }\n }\n }\n }\n }\n }\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n isUnique\n createdAt\n updatedAt\n defaultValue\n options\n settings\n relationDefinition {\n relationId\n direction\n sourceObjectMetadata {\n id\n nameSingular\n namePlural\n }\n sourceFieldMetadata {\n id\n name\n }\n targetObjectMetadata {\n id\n nameSingular\n namePlural\n }\n targetFieldMetadata {\n id\n name\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n": types.ObjectMetadataItemsDocument,
+ "\n fragment ServerlessFunctionFields on ServerlessFunction {\n id\n name\n description\n runtime\n syncStatus\n latestVersion\n createdAt\n updatedAt\n }\n": types.ServerlessFunctionFieldsFragmentDoc,
"\n \n mutation CreateOneServerlessFunctionItem(\n $input: CreateServerlessFunctionInput!\n ) {\n createOneServerlessFunction(input: $input) {\n ...ServerlessFunctionFields\n }\n }\n": types.CreateOneServerlessFunctionItemDocument,
"\n \n mutation DeleteOneServerlessFunction($input: DeleteServerlessFunctionInput!) {\n deleteOneServerlessFunction(input: $input) {\n ...ServerlessFunctionFields\n }\n }\n": types.DeleteOneServerlessFunctionDocument,
"\n mutation ExecuteOneServerlessFunction(\n $input: ExecuteServerlessFunctionInput!\n ) {\n executeOneServerlessFunction(input: $input) {\n data\n duration\n status\n error\n }\n }\n": types.ExecuteOneServerlessFunctionDocument,
@@ -110,7 +110,7 @@ export function graphql(source: "\n mutation CreateOneObjectMetadataItem($input
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
-export function graphql(source: "\n mutation CreateOneFieldMetadataItem($input: CreateOneFieldMetadataInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n defaultValue\n options\n }\n }\n"): (typeof documents)["\n mutation CreateOneFieldMetadataItem($input: CreateOneFieldMetadataInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n defaultValue\n options\n }\n }\n"];
+export function graphql(source: "\n mutation CreateOneFieldMetadataItem($input: CreateOneFieldMetadataInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n settings\n defaultValue\n options\n }\n }\n"): (typeof documents)["\n mutation CreateOneFieldMetadataItem($input: CreateOneFieldMetadataInput!) {\n createOneField(input: $input) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n settings\n defaultValue\n options\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
@@ -118,7 +118,7 @@ export function graphql(source: "\n mutation CreateOneRelationMetadata($input:
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
-export function graphql(source: "\n mutation UpdateOneFieldMetadataItem(\n $idToUpdate: UUID!\n $updatePayload: UpdateFieldInput!\n ) {\n updateOneField(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"): (typeof documents)["\n mutation UpdateOneFieldMetadataItem(\n $idToUpdate: UUID!\n $updatePayload: UpdateFieldInput!\n ) {\n updateOneField(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"];
+export function graphql(source: "\n mutation UpdateOneFieldMetadataItem(\n $idToUpdate: UUID!\n $updatePayload: UpdateFieldInput!\n ) {\n updateOneField(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n settings\n }\n }\n"): (typeof documents)["\n mutation UpdateOneFieldMetadataItem(\n $idToUpdate: UUID!\n $updatePayload: UpdateFieldInput!\n ) {\n updateOneField(input: { id: $idToUpdate, update: $updatePayload }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n settings\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
@@ -130,7 +130,7 @@ export function graphql(source: "\n mutation DeleteOneObjectMetadataItem($idToD
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
-export function graphql(source: "\n mutation DeleteOneFieldMetadataItem($idToDelete: UUID!) {\n deleteOneField(input: { id: $idToDelete }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"): (typeof documents)["\n mutation DeleteOneFieldMetadataItem($idToDelete: UUID!) {\n deleteOneField(input: { id: $idToDelete }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n }\n }\n"];
+export function graphql(source: "\n mutation DeleteOneFieldMetadataItem($idToDelete: UUID!) {\n deleteOneField(input: { id: $idToDelete }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n settings\n }\n }\n"): (typeof documents)["\n mutation DeleteOneFieldMetadataItem($idToDelete: UUID!) {\n deleteOneField(input: { id: $idToDelete }) {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isNullable\n createdAt\n updatedAt\n settings\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
@@ -138,11 +138,11 @@ export function graphql(source: "\n mutation DeleteOneRelationMetadataItem($idT
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
-export function graphql(source: "\n query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isRemote\n isActive\n isSystem\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n createdAt\n updatedAt\n defaultValue\n options\n relationDefinition {\n relationId\n direction\n sourceObjectMetadata {\n id\n nameSingular\n namePlural\n }\n sourceFieldMetadata {\n id\n name\n }\n targetObjectMetadata {\n id\n nameSingular\n namePlural\n }\n targetFieldMetadata {\n id\n name\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n"): (typeof documents)["\n query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isRemote\n isActive\n isSystem\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n createdAt\n updatedAt\n defaultValue\n options\n relationDefinition {\n relationId\n direction\n sourceObjectMetadata {\n id\n nameSingular\n namePlural\n }\n sourceFieldMetadata {\n id\n name\n }\n targetObjectMetadata {\n id\n nameSingular\n namePlural\n }\n targetFieldMetadata {\n id\n name\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n"];
+export function graphql(source: "\n query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isRemote\n isActive\n isSystem\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n indexMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n name\n indexWhereClause\n indexType\n isUnique\n indexFieldMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n order\n fieldMetadataId\n }\n }\n }\n }\n }\n }\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n isUnique\n createdAt\n updatedAt\n defaultValue\n options\n settings\n relationDefinition {\n relationId\n direction\n sourceObjectMetadata {\n id\n nameSingular\n namePlural\n }\n sourceFieldMetadata {\n id\n name\n }\n targetObjectMetadata {\n id\n nameSingular\n namePlural\n }\n targetFieldMetadata {\n id\n name\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n"): (typeof documents)["\n query ObjectMetadataItems(\n $objectFilter: objectFilter\n $fieldFilter: fieldFilter\n ) {\n objects(paging: { first: 1000 }, filter: $objectFilter) {\n edges {\n node {\n id\n dataSourceId\n nameSingular\n namePlural\n labelSingular\n labelPlural\n description\n icon\n isCustom\n isRemote\n isActive\n isSystem\n createdAt\n updatedAt\n labelIdentifierFieldMetadataId\n imageIdentifierFieldMetadataId\n indexMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n name\n indexWhereClause\n indexType\n isUnique\n indexFieldMetadatas(paging: { first: 100 }) {\n edges {\n node {\n id\n createdAt\n updatedAt\n order\n fieldMetadataId\n }\n }\n }\n }\n }\n }\n fields(paging: { first: 1000 }, filter: $fieldFilter) {\n edges {\n node {\n id\n type\n name\n label\n description\n icon\n isCustom\n isActive\n isSystem\n isNullable\n isUnique\n createdAt\n updatedAt\n defaultValue\n options\n settings\n relationDefinition {\n relationId\n direction\n sourceObjectMetadata {\n id\n nameSingular\n namePlural\n }\n sourceFieldMetadata {\n id\n name\n }\n targetObjectMetadata {\n id\n nameSingular\n namePlural\n }\n targetFieldMetadata {\n id\n name\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n }\n pageInfo {\n hasNextPage\n hasPreviousPage\n startCursor\n endCursor\n }\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
-export function graphql(source: "\n fragment ServerlessFunctionFields on ServerlessFunction {\n id\n name\n description\n sourceCodeHash\n runtime\n syncStatus\n latestVersion\n createdAt\n updatedAt\n }\n"): (typeof documents)["\n fragment ServerlessFunctionFields on ServerlessFunction {\n id\n name\n description\n sourceCodeHash\n runtime\n syncStatus\n latestVersion\n createdAt\n updatedAt\n }\n"];
+export function graphql(source: "\n fragment ServerlessFunctionFields on ServerlessFunction {\n id\n name\n description\n runtime\n syncStatus\n latestVersion\n createdAt\n updatedAt\n }\n"): (typeof documents)["\n fragment ServerlessFunctionFields on ServerlessFunction {\n id\n name\n description\n runtime\n syncStatus\n latestVersion\n createdAt\n updatedAt\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
diff --git a/packages/twenty-front/src/generated-metadata/graphql.ts b/packages/twenty-front/src/generated-metadata/graphql.ts
index 1a20ddc54315..97705b937cba 100644
--- a/packages/twenty-front/src/generated-metadata/graphql.ts
+++ b/packages/twenty-front/src/generated-metadata/graphql.ts
@@ -165,7 +165,6 @@ export type ClientConfig = {
signInPrefilled: Scalars['Boolean']['output'];
signUpDisabled: Scalars['Boolean']['output'];
support: Support;
- telemetry: Telemetry;
};
export type CreateAppTokenInput = {
@@ -181,6 +180,7 @@ export type CreateFieldInput = {
isNullable?: InputMaybe;
isRemoteCreation?: InputMaybe;
isSystem?: InputMaybe;
+ isUnique?: InputMaybe;
label: Scalars['String']['input'];
name: Scalars['String']['input'];
objectMetadataId: Scalars['String']['input'];
@@ -246,13 +246,7 @@ export type CreateRemoteServerInput = {
userMappingOptions?: InputMaybe;
};
-export type CreateServerlessFunctionFromFileInput = {
- description?: InputMaybe;
- name: Scalars['String']['input'];
-};
-
export type CreateServerlessFunctionInput = {
- code: Scalars['String']['input'];
description?: InputMaybe;
name: Scalars['String']['input'];
};
@@ -359,15 +353,12 @@ export enum FieldMetadataType {
Currency = 'CURRENCY',
Date = 'DATE',
DateTime = 'DATE_TIME',
- Email = 'EMAIL',
Emails = 'EMAILS',
FullName = 'FULL_NAME',
- Link = 'LINK',
Links = 'LINKS',
MultiSelect = 'MULTI_SELECT',
Number = 'NUMBER',
Numeric = 'NUMERIC',
- Phone = 'PHONE',
Phones = 'PHONES',
Position = 'POSITION',
Rating = 'RATING',
@@ -376,6 +367,7 @@ export enum FieldMetadataType {
RichText = 'RICH_TEXT',
Select = 'SELECT',
Text = 'TEXT',
+ TsVector = 'TS_VECTOR',
Uuid = 'UUID'
}
@@ -407,6 +399,36 @@ export type GetServerlessFunctionSourceCodeInput = {
version?: Scalars['String']['input'];
};
+export type IndexConnection = {
+ __typename?: 'IndexConnection';
+ /** Array of edges. */
+ edges: Array;
+ /** Paging information */
+ pageInfo: PageInfo;
+};
+
+export type IndexIndexFieldMetadatasConnection = {
+ __typename?: 'IndexIndexFieldMetadatasConnection';
+ /** Array of edges. */
+ edges: Array;
+ /** Paging information */
+ pageInfo: PageInfo;
+};
+
+export type IndexObjectMetadataConnection = {
+ __typename?: 'IndexObjectMetadataConnection';
+ /** Array of edges. */
+ edges: Array;
+ /** Paging information */
+ pageInfo: PageInfo;
+};
+
+/** Type of the index */
+export enum IndexType {
+ Btree = 'BTREE',
+ Gin = 'GIN'
+}
+
export type InvalidatePassword = {
__typename?: 'InvalidatePassword';
/** Boolean that confirms query was dispatched */
@@ -452,7 +474,6 @@ export type Mutation = {
createOneRelation: Relation;
createOneRemoteServer: RemoteServer;
createOneServerlessFunction: ServerlessFunction;
- createOneServerlessFunctionFromFile: ServerlessFunction;
deactivateWorkflowVersion: Scalars['Boolean']['output'];
deleteCurrentWorkspace: Workspace;
deleteOneField: Field;
@@ -567,12 +588,6 @@ export type MutationCreateOneServerlessFunctionArgs = {
};
-export type MutationCreateOneServerlessFunctionFromFileArgs = {
- file: Scalars['Upload']['input'];
- input: CreateServerlessFunctionFromFileInput;
-};
-
-
export type MutationDeactivateWorkflowVersionArgs = {
workflowVersionId: Scalars['String']['input'];
};
@@ -686,8 +701,8 @@ export type MutationSyncRemoteTableSchemaChangesArgs = {
export type MutationTrackArgs = {
- data: Scalars['JSON']['input'];
- type: Scalars['String']['input'];
+ action: Scalars['String']['input'];
+ payload: Scalars['JSON']['input'];
};
@@ -769,6 +784,14 @@ export type ObjectFieldsConnection = {
pageInfo: PageInfo;
};
+export type ObjectIndexMetadatasConnection = {
+ __typename?: 'ObjectIndexMetadatasConnection';
+ /** Array of edges. */
+ edges: Array;
+ /** Paging information */
+ pageInfo: PageInfo;
+};
+
/** Onboarding status */
export enum OnboardingStatus {
Completed = 'COMPLETED',
@@ -843,11 +866,13 @@ export type Query = {
getAvailablePackages: Scalars['JSON']['output'];
getPostgresCredentials?: Maybe;
getProductPrices: ProductPricesEntity;
- getServerlessFunctionSourceCode?: Maybe;
+ getServerlessFunctionSourceCode?: Maybe;
getTimelineCalendarEventsFromCompanyId: TimelineCalendarEventsWithTotal;
getTimelineCalendarEventsFromPersonId: TimelineCalendarEventsWithTotal;
getTimelineThreadsFromCompanyId: TimelineThreadsWithTotal;
getTimelineThreadsFromPersonId: TimelineThreadsWithTotal;
+ index: Index;
+ indexMetadatas: IndexConnection;
object: Object;
objects: ObjectConnection;
relation: Relation;
@@ -948,6 +973,17 @@ export type QueryGetTimelineThreadsFromPersonIdArgs = {
};
+export type QueryIndexArgs = {
+ id: Scalars['UUID']['input'];
+};
+
+
+export type QueryIndexMetadatasArgs = {
+ filter?: IndexFilter;
+ paging?: CursorPaging;
+};
+
+
export type QueryObjectArgs = {
id: Scalars['UUID']['input'];
};
@@ -1091,7 +1127,6 @@ export type ServerlessFunction = {
latestVersion?: Maybe;
name: Scalars['String']['output'];
runtime: Scalars['String']['output'];
- sourceCodeHash: Scalars['String']['output'];
syncStatus: ServerlessFunctionSyncStatus;
updatedAt: Scalars['DateTime']['output'];
};
@@ -1193,11 +1228,6 @@ export type Support = {
supportFrontChatId?: Maybe;
};
-export type Telemetry = {
- __typename?: 'Telemetry';
- enabled: Scalars['Boolean']['output'];
-};
-
export type TimelineCalendarEvent = {
__typename?: 'TimelineCalendarEvent';
conferenceLink: LinksMetadata;
@@ -1298,6 +1328,7 @@ export type UpdateFieldInput = {
isCustom?: InputMaybe;
isNullable?: InputMaybe;
isSystem?: InputMaybe;
+ isUnique?: InputMaybe;
label?: InputMaybe;
name?: InputMaybe;
options?: InputMaybe;
@@ -1338,7 +1369,7 @@ export type UpdateRemoteServerInput = {
};
export type UpdateServerlessFunctionInput = {
- code: Scalars['String']['input'];
+ code: Scalars['JSON']['input'];
description?: InputMaybe;
/** Id of the serverless function to execute */
id: Scalars['UUID']['input'];
@@ -1533,6 +1564,7 @@ export type Field = {
isCustom?: Maybe;
isNullable?: Maybe;
isSystem?: Maybe;
+ isUnique?: Maybe;
label: Scalars['String']['output'];
name: Scalars['String']['output'];
object?: Maybe
diff --git a/packages/twenty-front/src/modules/activities/files/components/AttachmentRow.tsx b/packages/twenty-front/src/modules/activities/files/components/AttachmentRow.tsx
index 478cacc723e4..f0eca529d762 100644
--- a/packages/twenty-front/src/modules/activities/files/components/AttachmentRow.tsx
+++ b/packages/twenty-front/src/modules/activities/files/components/AttachmentRow.tsx
@@ -1,3 +1,4 @@
+import { ActivityRow } from '@/activities/components/ActivityRow';
import { AttachmentDropdown } from '@/activities/files/components/AttachmentDropdown';
import { AttachmentIcon } from '@/activities/files/components/AttachmentIcon';
import { Attachment } from '@/activities/files/types/Attachment';
@@ -13,26 +14,20 @@ import { TextInput } from '@/ui/input/components/TextInput';
import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import { useMemo, useState } from 'react';
-import { IconCalendar } from 'twenty-ui';
+import { IconCalendar, OverflowingTextWithTooltip } from 'twenty-ui';
import { formatToHumanReadableDate } from '~/utils/date-utils';
import { getFileAbsoluteURI } from '~/utils/file/getFileAbsoluteURI';
-
-const StyledRow = styled.div`
- align-items: center;
- align-self: stretch;
- border-bottom: 1px solid ${({ theme }) => theme.border.color.light};
- color: ${({ theme }) => theme.font.color.primary};
- display: flex;
- justify-content: space-between;
- padding: ${({ theme }) => theme.spacing(2)};
- height: 32px;
-`;
+import { getFileNameAndExtension } from '~/utils/file/getFileNameAndExtension';
const StyledLeftContent = styled.div`
align-items: center;
display: flex;
gap: ${({ theme }) => theme.spacing(3)};
+
+ width: 100%;
+ overflow: auto;
+ flex: 1;
`;
const StyledRightContent = styled.div`
@@ -52,15 +47,28 @@ const StyledLink = styled.a`
color: ${({ theme }) => theme.font.color.primary};
display: flex;
text-decoration: none;
+
+ width: 100%;
+
:hover {
color: ${({ theme }) => theme.font.color.secondary};
}
`;
+const StyledLinkContainer = styled.div`
+ overflow: auto;
+ width: 100%;
+`;
+
export const AttachmentRow = ({ attachment }: { attachment: Attachment }) => {
const theme = useTheme();
const [isEditing, setIsEditing] = useState(false);
- const [attachmentName, setAttachmentName] = useState(attachment.name);
+
+ const { name: originalFileName, extension: attachmentFileExtension } =
+ getFileNameAndExtension(attachment.name);
+
+ const [attachmentFileName, setAttachmentFileName] =
+ useState(originalFileName);
const fieldContext = useMemo(
() => ({ recoilScopeId: attachment?.id ?? '' }),
@@ -83,38 +91,60 @@ export const AttachmentRow = ({ attachment }: { attachment: Attachment }) => {
setIsEditing(true);
};
- const handleOnBlur = () => {
+ const saveAttachmentName = () => {
setIsEditing(false);
+
+ const newFileName = `${attachmentFileName}${attachmentFileExtension}`;
+
updateOneAttachment({
idToUpdate: attachment.id,
- updateOneRecordInput: { name: attachmentName },
+ updateOneRecordInput: { name: newFileName },
});
};
- const handleOnChange = (newName: string) => {
- setAttachmentName(newName);
+ const handleOnBlur = () => {
+ saveAttachmentName();
+ };
+
+ const handleOnChange = (newFileName: string) => {
+ setAttachmentFileName(newFileName);
+ };
+
+ const handleOnKeyDown = (e: React.KeyboardEvent) => {
+ if (e.key === 'Enter') {
+ saveAttachmentName();
+ }
+ };
+
+ const handleDownload = () => {
+ downloadFile(
+ attachment.fullPath,
+ `${attachmentFileName}${attachmentFileExtension}`,
+ );
};
return (
-
+
{isEditing ? (
) : (
-
- {attachment.name}
-
+
+
+
+
+
)}
@@ -125,13 +155,11 @@ export const AttachmentRow = ({ attachment }: { attachment: Attachment }) => {
{
- downloadFile(attachment.fullPath, attachment.name);
- }}
+ onDownload={handleDownload}
onRename={handleRename}
/>
-
+
);
};
diff --git a/packages/twenty-front/src/modules/activities/hooks/__tests__/useActivityTargetObjectRecords.test.tsx b/packages/twenty-front/src/modules/activities/hooks/__tests__/useActivityTargetObjectRecords.test.tsx
index aa8f2461208d..7d1426f4cb75 100644
--- a/packages/twenty-front/src/modules/activities/hooks/__tests__/useActivityTargetObjectRecords.test.tsx
+++ b/packages/twenty-front/src/modules/activities/hooks/__tests__/useActivityTargetObjectRecords.test.tsx
@@ -7,11 +7,10 @@ import { RecoilRoot, useSetRecoilState } from 'recoil';
import { useActivityTargetObjectRecords } from '@/activities/hooks/useActivityTargetObjectRecords';
import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
-import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
import { SnackBarProviderScope } from '@/ui/feedback/snack-bar-manager/scopes/SnackBarProviderScope';
import { JestObjectMetadataItemSetter } from '~/testing/jest/JestObjectMetadataItemSetter';
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
import { mockWorkspaceMembers } from '~/testing/mock-data/workspace-members';
-const mockObjectMetadataItems = getObjectMetadataItemsMock();
const cache = new InMemoryCache();
@@ -141,7 +140,7 @@ describe('useActivityTargetObjectRecords', () => {
act(() => {
result.current.setCurrentWorkspaceMember(mockWorkspaceMembers[0]);
- result.current.setObjectMetadataItems(mockObjectMetadataItems);
+ result.current.setObjectMetadataItems(generatedMockObjectMetadataItems);
});
const activityTargetObjectRecords =
diff --git a/packages/twenty-front/src/modules/activities/hooks/__tests__/useCreateActivityInDB.test.tsx b/packages/twenty-front/src/modules/activities/hooks/__tests__/useCreateActivityInDB.test.tsx
index e2db015a1a4a..baddb1029bda 100644
--- a/packages/twenty-front/src/modules/activities/hooks/__tests__/useCreateActivityInDB.test.tsx
+++ b/packages/twenty-front/src/modules/activities/hooks/__tests__/useCreateActivityInDB.test.tsx
@@ -1,13 +1,11 @@
-import { MockedProvider, MockedResponse } from '@apollo/client/testing';
+import { MockedResponse } from '@apollo/client/testing';
import { act, renderHook } from '@testing-library/react';
import gql from 'graphql-tag';
import pick from 'lodash.pick';
-import { ReactNode } from 'react';
-import { RecoilRoot } from 'recoil';
import { useCreateActivityInDB } from '@/activities/hooks/useCreateActivityInDB';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
-import { SnackBarProviderScope } from '@/ui/feedback/snack-bar-manager/scopes/SnackBarProviderScope';
+import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
import { mockedTasks } from '~/testing/mock-data/tasks';
const mockedDate = '2024-03-15T12:00:00.000Z';
@@ -26,14 +24,44 @@ const mocks: MockedResponse[] = [
mutation CreateOneTask($input: TaskCreateInput!) {
createTask(data: $input) {
__typename
- status
+ assignee {
+ __typename
+ id
+ name {
+ firstName
+ lastName
+ }
+ }
assigneeId
- updatedAt
+ attachments {
+ edges {
+ node {
+ __typename
+ activityId
+ authorId
+ companyId
+ createdAt
+ deletedAt
+ fullPath
+ id
+ name
+ noteId
+ opportunityId
+ personId
+ rocketId
+ taskId
+ type
+ updatedAt
+ }
+ }
+ }
body
createdAt
dueAt
id
+ status
title
+ updatedAt
}
}
`,
@@ -56,15 +84,9 @@ const mocks: MockedResponse[] = [
},
];
-const Wrapper = ({ children }: { children: ReactNode }) => (
-
-
-
- {children}
-
-
-
-);
+const Wrapper = getJestMetadataAndApolloMocksWrapper({
+ apolloMocks: mocks,
+});
describe('useCreateActivityInDB', () => {
it('Should create activity in DB', async () => {
diff --git a/packages/twenty-front/src/modules/activities/hooks/__tests__/useOpenCreateActivityDrawer.test.tsx b/packages/twenty-front/src/modules/activities/hooks/__tests__/useOpenCreateActivityDrawer.test.tsx
index 9b03ac5e5b61..855c0b55bd29 100644
--- a/packages/twenty-front/src/modules/activities/hooks/__tests__/useOpenCreateActivityDrawer.test.tsx
+++ b/packages/twenty-front/src/modules/activities/hooks/__tests__/useOpenCreateActivityDrawer.test.tsx
@@ -1,15 +1,15 @@
-import { MockedProvider, MockedResponse } from '@apollo/client/testing';
+import { MockedResponse } from '@apollo/client/testing';
import { act, renderHook } from '@testing-library/react';
-import { ReactNode } from 'react';
-import { RecoilRoot, useRecoilValue, useSetRecoilState } from 'recoil';
+import { useRecoilValue, useSetRecoilState } from 'recoil';
import { useOpenCreateActivityDrawer } from '@/activities/hooks/useOpenCreateActivityDrawer';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
-import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
import { viewableRecordIdState } from '@/object-record/record-right-drawer/states/viewableRecordIdState';
import gql from 'graphql-tag';
import pick from 'lodash.pick';
+import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
import { mockedTasks } from '~/testing/mock-data/tasks';
const mockedDate = '2024-03-15T12:00:00.000Z';
@@ -61,15 +61,11 @@ const mocks: MockedResponse[] = [
},
];
-const Wrapper = ({ children }: { children: ReactNode }) => (
-
-
- {children}
-
-
-);
+const Wrapper = getJestMetadataAndApolloMocksWrapper({
+ apolloMocks: mocks,
+});
-const mockObjectMetadataItems = getObjectMetadataItemsMock();
+const mockObjectMetadataItems = generatedMockObjectMetadataItems;
describe('useOpenCreateActivityDrawer', () => {
it('works as expected', async () => {
diff --git a/packages/twenty-front/src/modules/activities/hooks/useOpenCreateActivityDrawer.ts b/packages/twenty-front/src/modules/activities/hooks/useOpenCreateActivityDrawer.ts
index 400c1f398a95..1cc4af08a81e 100644
--- a/packages/twenty-front/src/modules/activities/hooks/useOpenCreateActivityDrawer.ts
+++ b/packages/twenty-front/src/modules/activities/hooks/useOpenCreateActivityDrawer.ts
@@ -15,6 +15,7 @@ import { Task } from '@/activities/types/Task';
import { TaskTarget } from '@/activities/types/TaskTarget';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord';
+import { isNewViewableRecordLoadingState } from '@/object-record/record-right-drawer/states/isNewViewableRecordLoading';
import { viewableRecordNameSingularState } from '@/object-record/record-right-drawer/states/viewableRecordNameSingularState';
import { ActivityTargetableObject } from '../types/ActivityTargetableEntity';
@@ -52,7 +53,9 @@ export const useOpenCreateActivityDrawer = ({
const setViewableRecordNameSingular = useSetRecoilState(
viewableRecordNameSingularState,
);
-
+ const setIsNewViewableRecordLoading = useSetRecoilState(
+ isNewViewableRecordLoadingState,
+ );
const setIsUpsertingActivityInDB = useSetRecoilState(
isUpsertingActivityInDBState,
);
@@ -64,6 +67,11 @@ export const useOpenCreateActivityDrawer = ({
targetableObjects: ActivityTargetableObject[];
customAssignee?: WorkspaceMember;
}) => {
+ setIsNewViewableRecordLoading(true);
+ openRightDrawer(RightDrawerPages.ViewRecord);
+ setViewableRecordId(null);
+ setViewableRecordNameSingular(activityObjectNameSingular);
+
const activity = await createOneActivity({
assigneeId: customAssignee?.id,
});
@@ -101,10 +109,9 @@ export const useOpenCreateActivityDrawer = ({
setHotkeyScope(RightDrawerHotkeyScope.RightDrawer, { goto: false });
setViewableRecordId(activity.id);
- setViewableRecordNameSingular(activityObjectNameSingular);
- openRightDrawer(RightDrawerPages.ViewRecord);
setIsUpsertingActivityInDB(false);
+ setIsNewViewableRecordLoading(false);
};
return openCreateActivityDrawer;
diff --git a/packages/twenty-front/src/modules/activities/tasks/__stories__/TaskGroups.stories.tsx b/packages/twenty-front/src/modules/activities/tasks/__stories__/TaskGroups.stories.tsx
index 444049cc1844..aefa6f2ed59a 100644
--- a/packages/twenty-front/src/modules/activities/tasks/__stories__/TaskGroups.stories.tsx
+++ b/packages/twenty-front/src/modules/activities/tasks/__stories__/TaskGroups.stories.tsx
@@ -42,5 +42,8 @@ export const WithTasks: Story = {
},
parameters: {
msw: graphqlMocks,
+ container: {
+ width: '500px',
+ },
},
};
diff --git a/packages/twenty-front/src/modules/activities/tasks/__stories__/TaskList.stories.tsx b/packages/twenty-front/src/modules/activities/tasks/__stories__/TaskList.stories.tsx
index 1113febb6223..c2a65b772be9 100644
--- a/packages/twenty-front/src/modules/activities/tasks/__stories__/TaskList.stories.tsx
+++ b/packages/twenty-front/src/modules/activities/tasks/__stories__/TaskList.stories.tsx
@@ -3,6 +3,7 @@ import { ComponentDecorator } from 'twenty-ui';
import { TaskList } from '@/activities/tasks/components/TaskList';
import { MemoryRouterDecorator } from '~/testing/decorators/MemoryRouterDecorator';
+import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
import { graphqlMocks } from '~/testing/graphqlMocks';
import { mockedTasks } from '~/testing/mock-data/tasks';
@@ -10,13 +11,21 @@ import { mockedTasks } from '~/testing/mock-data/tasks';
const meta: Meta = {
title: 'Modules/Activity/TaskList',
component: TaskList,
- decorators: [MemoryRouterDecorator, ComponentDecorator, SnackBarDecorator],
+ decorators: [
+ ComponentDecorator,
+ MemoryRouterDecorator,
+ ObjectMetadataItemsDecorator,
+ SnackBarDecorator,
+ ],
args: {
title: 'Tasks',
tasks: mockedTasks,
},
parameters: {
msw: graphqlMocks,
+ container: {
+ width: '500px',
+ },
},
};
diff --git a/packages/twenty-front/src/modules/activities/tasks/components/ObjectTasks.tsx b/packages/twenty-front/src/modules/activities/tasks/components/ObjectTasks.tsx
index a798a818d865..9e2dd7a4bc54 100644
--- a/packages/twenty-front/src/modules/activities/tasks/components/ObjectTasks.tsx
+++ b/packages/twenty-front/src/modules/activities/tasks/components/ObjectTasks.tsx
@@ -20,7 +20,7 @@ export const ObjectTasks = ({
return (
-
+
);
diff --git a/packages/twenty-front/src/modules/activities/tasks/components/TaskGroups.tsx b/packages/twenty-front/src/modules/activities/tasks/components/TaskGroups.tsx
index a6e4999773bc..16ebbec0f38a 100644
--- a/packages/twenty-front/src/modules/activities/tasks/components/TaskGroups.tsx
+++ b/packages/twenty-front/src/modules/activities/tasks/components/TaskGroups.tsx
@@ -27,18 +27,15 @@ import { TaskList } from './TaskList';
const StyledContainer = styled.div`
display: flex;
flex-direction: column;
+ width: 100%;
`;
type TaskGroupsProps = {
filterDropdownId?: string;
targetableObjects?: ActivityTargetableObject[];
- showAddButton?: boolean;
};
-export const TaskGroups = ({
- targetableObjects,
- showAddButton,
-}: TaskGroupsProps) => {
+export const TaskGroups = ({ targetableObjects }: TaskGroupsProps) => {
const { tasks, tasksLoading } = useTasks({
targetableObjects: targetableObjects ?? [],
});
@@ -93,7 +90,11 @@ export const TaskGroups = ({
const sortedTasksByStatus = Object.entries(
groupBy(tasks, ({ status }) => status),
- ).toSorted(([statusA], [statusB]) => statusB.localeCompare(statusA));
+ ).sort(([statusA], [statusB]) => statusB.localeCompare(statusA));
+
+ const hasTodoStatus = sortedTasksByStatus.some(
+ ([status]) => status === 'TODO',
+ );
return (
@@ -103,7 +104,7 @@ export const TaskGroups = ({
title={status}
tasks={tasksByStatus}
button={
- showAddButton && (
+ (status === 'TODO' || !hasTodoStatus) && (
)
}
diff --git a/packages/twenty-front/src/modules/activities/tasks/components/TaskList.tsx b/packages/twenty-front/src/modules/activities/tasks/components/TaskList.tsx
index 04e56c8d65ed..56082db0dc4c 100644
--- a/packages/twenty-front/src/modules/activities/tasks/components/TaskList.tsx
+++ b/packages/twenty-front/src/modules/activities/tasks/components/TaskList.tsx
@@ -1,6 +1,7 @@
import styled from '@emotion/styled';
import { ReactElement } from 'react';
+import { ActivityList } from '@/activities/components/ActivityList';
import { Task } from '@/activities/types/Task';
import { TaskRow } from './TaskRow';
@@ -12,11 +13,14 @@ type TaskListProps = {
const StyledContainer = styled.div`
align-items: flex-start;
+ width: 100%;
align-self: stretch;
display: flex;
flex-direction: column;
justify-content: center;
- padding: 8px 24px;
+ padding: 8px ${({ theme }) => theme.spacing(6)};
+
+ width: calc(100% - ${({ theme }) => theme.spacing(12)});
`;
const StyledTitleBar = styled.div`
@@ -38,13 +42,6 @@ const StyledCount = styled.span`
margin-left: ${({ theme }) => theme.spacing(2)};
`;
-const StyledTaskRows = styled.div`
- background-color: ${({ theme }) => theme.background.secondary};
- border: 1px solid ${({ theme }) => theme.border.color.light};
- border-radius: ${({ theme }) => theme.border.radius.md};
- width: 100%;
-`;
-
export const TaskList = ({ title, tasks, button }: TaskListProps) => (
<>
{tasks && tasks.length > 0 && (
@@ -57,11 +54,11 @@ export const TaskList = ({ title, tasks, button }: TaskListProps) => (
)}
{button}
-
+
{tasks.map((task) => (
))}
-
+
)}
>
diff --git a/packages/twenty-front/src/modules/activities/tasks/components/TaskRow.tsx b/packages/twenty-front/src/modules/activities/tasks/components/TaskRow.tsx
index efd4323143b0..ad46a8a43b15 100644
--- a/packages/twenty-front/src/modules/activities/tasks/components/TaskRow.tsx
+++ b/packages/twenty-front/src/modules/activities/tasks/components/TaskRow.tsx
@@ -8,28 +8,12 @@ import { getActivitySummary } from '@/activities/utils/getActivitySummary';
import { Checkbox, CheckboxShape } from '@/ui/input/components/Checkbox';
import { beautifyExactDate, hasDatePassed } from '~/utils/date-utils';
+import { ActivityRow } from '@/activities/components/ActivityRow';
import { Task } from '@/activities/types/Task';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { useFieldContext } from '@/object-record/hooks/useFieldContext';
import { useCompleteTask } from '../hooks/useCompleteTask';
-const StyledContainer = styled.div`
- align-items: center;
- justify-content: space-between;
- border-bottom: 1px solid ${({ theme }) => theme.border.color.light};
- cursor: pointer;
- display: flex;
- height: ${({ theme }) => theme.spacing(12)};
- min-width: calc(100% - ${({ theme }) => theme.spacing(8)});
- max-width: calc(100% - ${({ theme }) => theme.spacing(8)});
- padding: 0 ${({ theme }) => theme.spacing(4)};
- overflow: hidden;
- max-inline-size: 60px;
- &:last-child {
- border-bottom: 0;
- }
-`;
-
const StyledTaskBody = styled.div`
color: ${({ theme }) => theme.font.color.tertiary};
display: flex;
@@ -105,7 +89,7 @@ export const TaskRow = ({ task }: { task: Task }) => {
});
return (
- {
openActivityRightDrawer(task.id);
}}
@@ -130,6 +114,14 @@ export const TaskRow = ({ task }: { task: Task }) => {
+ {task.dueAt && (
+
+
+ {beautifyExactDate(task.dueAt)}
+
+ )}
{TaskTargetsContextProvider && (
{
/>
)}
-
-
- {task.dueAt && beautifyExactDate(task.dueAt)}
-
-
+
);
};
diff --git a/packages/twenty-front/src/modules/activities/tasks/hooks/__tests__/useCompleteTask.test.tsx b/packages/twenty-front/src/modules/activities/tasks/hooks/__tests__/useCompleteTask.test.tsx
index baf35a95680e..814b72fb6ce1 100644
--- a/packages/twenty-front/src/modules/activities/tasks/hooks/__tests__/useCompleteTask.test.tsx
+++ b/packages/twenty-front/src/modules/activities/tasks/hooks/__tests__/useCompleteTask.test.tsx
@@ -1,11 +1,10 @@
-import { MockedProvider, MockedResponse } from '@apollo/client/testing';
+import { MockedResponse } from '@apollo/client/testing';
import { act, renderHook } from '@testing-library/react';
import gql from 'graphql-tag';
-import { ReactNode } from 'react';
-import { RecoilRoot } from 'recoil';
import { useCompleteTask } from '@/activities/tasks/hooks/useCompleteTask';
import { Task } from '@/activities/types/Task';
+import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
const task: Task = {
id: '123',
@@ -28,20 +27,123 @@ const mocks: MockedResponse[] = [
mutation UpdateOneTask($idToUpdate: ID!, $input: TaskUpdateInput!) {
updateTask(id: $idToUpdate, data: $input) {
__typename
- status
+ assignee {
+ __typename
+ avatarUrl
+ colorScheme
+ createdAt
+ dateFormat
+ deletedAt
+ id
+ locale
+ name {
+ firstName
+ lastName
+ }
+ timeFormat
+ timeZone
+ updatedAt
+ userEmail
+ userId
+ }
assigneeId
- updatedAt
+ attachments {
+ edges {
+ node {
+ __typename
+ activityId
+ authorId
+ companyId
+ createdAt
+ deletedAt
+ fullPath
+ id
+ name
+ noteId
+ opportunityId
+ personId
+ rocketId
+ taskId
+ type
+ updatedAt
+ }
+ }
+ }
body
createdAt
- dueAt
- position
- id
- title
createdBy {
source
workspaceMemberId
name
}
+ deletedAt
+ dueAt
+ favorites {
+ edges {
+ node {
+ __typename
+ companyId
+ createdAt
+ deletedAt
+ id
+ noteId
+ opportunityId
+ personId
+ position
+ rocketId
+ taskId
+ updatedAt
+ viewId
+ workflowId
+ workspaceMemberId
+ }
+ }
+ }
+ id
+ position
+ status
+ taskTargets {
+ edges {
+ node {
+ __typename
+ companyId
+ createdAt
+ deletedAt
+ id
+ opportunityId
+ personId
+ rocketId
+ taskId
+ updatedAt
+ }
+ }
+ }
+ timelineActivities {
+ edges {
+ node {
+ __typename
+ companyId
+ createdAt
+ deletedAt
+ happensAt
+ id
+ linkedObjectMetadataId
+ linkedRecordCachedName
+ linkedRecordId
+ name
+ noteId
+ opportunityId
+ personId
+ properties
+ rocketId
+ taskId
+ updatedAt
+ workspaceMemberId
+ }
+ }
+ }
+ title
+ updatedAt
}
}
`,
@@ -53,7 +155,7 @@ const mocks: MockedResponse[] = [
result: jest.fn(() => ({
data: {
updateTask: {
- __typename: 'Activity',
+ __typename: 'Task',
createdAt: '2024-03-15T07:33:14.212Z',
reminderAt: null,
authorId: '123',
@@ -71,13 +173,9 @@ const mocks: MockedResponse[] = [
},
];
-const Wrapper = ({ children }: { children: ReactNode }) => (
-
-
- {children}
-
-
-);
+const Wrapper = getJestMetadataAndApolloMocksWrapper({
+ apolloMocks: mocks,
+});
describe('useCompleteTask', () => {
it('should complete task', async () => {
diff --git a/packages/twenty-front/src/modules/activities/timelineActivities/hooks/__tests__/useTimelineActivities.test.tsx b/packages/twenty-front/src/modules/activities/timelineActivities/hooks/__tests__/useTimelineActivities.test.tsx
index 894d541c888b..2d1989cc68ea 100644
--- a/packages/twenty-front/src/modules/activities/timelineActivities/hooks/__tests__/useTimelineActivities.test.tsx
+++ b/packages/twenty-front/src/modules/activities/timelineActivities/hooks/__tests__/useTimelineActivities.test.tsx
@@ -1,21 +1,16 @@
import { renderHook } from '@testing-library/react';
import { useTimelineActivities } from '@/activities/timelineActivities/hooks/useTimelineActivities';
-import { ReactNode } from 'react';
-import { getJestHookWrapper } from '~/testing/jest/getJestHookWrapper';
+import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
jest.mock('@/object-record/hooks/useFindManyRecords', () => ({
useFindManyRecords: jest.fn(),
}));
-const Wrappers = getJestHookWrapper({
+const Wrapper = getJestMetadataAndApolloMocksWrapper({
apolloMocks: [],
});
-const Wrapper = ({ children }: { children: ReactNode }) => (
- {children}
-);
-
describe('useTimelineActivities', () => {
afterEach(() => {
jest.clearAllMocks();
diff --git a/packages/twenty-front/src/modules/activities/timelineActivities/rows/main-object/components/__stories__/EventRowMainObjectUpdated.stories.tsx b/packages/twenty-front/src/modules/activities/timelineActivities/rows/main-object/components/__stories__/EventRowMainObjectUpdated.stories.tsx
index 0cb945bdc4b2..fe0b549d68da 100644
--- a/packages/twenty-front/src/modules/activities/timelineActivities/rows/main-object/components/__stories__/EventRowMainObjectUpdated.stories.tsx
+++ b/packages/twenty-front/src/modules/activities/timelineActivities/rows/main-object/components/__stories__/EventRowMainObjectUpdated.stories.tsx
@@ -5,7 +5,7 @@ import { EventRowMainObjectUpdated } from '@/activities/timelineActivities/rows/
import { TimelineActivity } from '@/activities/timelineActivities/types/TimelineActivity';
import { ObjectMetadataItemsDecorator } from '~/testing/decorators/ObjectMetadataItemsDecorator';
import { SnackBarDecorator } from '~/testing/decorators/SnackBarDecorator';
-import { mockedPersonObjectMetadataItem } from '~/testing/mock-data/metadata';
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
const meta: Meta = {
title: 'Modules/TimelineActivities/Rows/MainObject/EventRowMainObjectUpdated',
@@ -35,7 +35,9 @@ const meta: Meta = {
},
},
} as TimelineActivity,
- mainObjectMetadataItem: mockedPersonObjectMetadataItem,
+ mainObjectMetadataItem: generatedMockObjectMetadataItems.find(
+ (item) => item.nameSingular === 'person',
+ ),
},
decorators: [
ComponentDecorator,
diff --git a/packages/twenty-front/src/modules/analytics/graphql/queries/track.ts b/packages/twenty-front/src/modules/analytics/graphql/queries/track.ts
index 3aa7bba0fcf4..04a5d4487293 100644
--- a/packages/twenty-front/src/modules/analytics/graphql/queries/track.ts
+++ b/packages/twenty-front/src/modules/analytics/graphql/queries/track.ts
@@ -1,8 +1,8 @@
import { gql } from '@apollo/client';
export const TRACK = gql`
- mutation Track($type: String!, $data: JSON!) {
- track(type: $type, data: $data) {
+ mutation Track($type: String!, $sessionId: String!, $data: JSON!) {
+ track(type: $type, sessionId: $sessionId, data: $data) {
success
}
}
diff --git a/packages/twenty-front/src/modules/analytics/hooks/__tests__/useEventTracker.test.tsx b/packages/twenty-front/src/modules/analytics/hooks/__tests__/useEventTracker.test.tsx
index 9b60f1ffa646..a49b85612f46 100644
--- a/packages/twenty-front/src/modules/analytics/hooks/__tests__/useEventTracker.test.tsx
+++ b/packages/twenty-front/src/modules/analytics/hooks/__tests__/useEventTracker.test.tsx
@@ -1,8 +1,8 @@
-import { ReactNode } from 'react';
import { gql } from '@apollo/client';
import { MockedProvider, MockedResponse } from '@apollo/client/testing';
import { expect } from '@storybook/test';
import { act, renderHook, waitFor } from '@testing-library/react';
+import { ReactNode } from 'react';
import { RecoilRoot } from 'recoil';
import { useEventTracker } from '../useEventTracker';
@@ -11,15 +11,23 @@ const mocks: MockedResponse[] = [
{
request: {
query: gql`
- mutation Track($type: String!, $data: JSON!) {
- track(type: $type, data: $data) {
+ mutation Track($action: String!, $payload: JSON!) {
+ track(action: $action, payload: $payload) {
success
}
}
`,
variables: {
- type: 'exampleType',
- data: { location: { pathname: '/examplePath' } },
+ action: 'exampleType',
+ payload: {
+ sessionId: 'exampleId',
+ pathname: '',
+ userAgent: '',
+ timeZone: '',
+ locale: '',
+ href: '',
+ referrer: '',
+ },
},
},
result: jest.fn(() => ({
@@ -43,7 +51,15 @@ const Wrapper = ({ children }: { children: ReactNode }) => (
describe('useEventTracker', () => {
it('should make the call to track the event', async () => {
const eventType = 'exampleType';
- const eventData = { location: { pathname: '/examplePath' } };
+ const eventData = {
+ sessionId: 'exampleId',
+ pathname: '',
+ userAgent: '',
+ timeZone: '',
+ locale: '',
+ href: '',
+ referrer: '',
+ };
const { result } = renderHook(() => useEventTracker(), {
wrapper: Wrapper,
});
diff --git a/packages/twenty-front/src/modules/analytics/hooks/useEventTracker.ts b/packages/twenty-front/src/modules/analytics/hooks/useEventTracker.ts
index 88d1d656740b..faaa3ea5b634 100644
--- a/packages/twenty-front/src/modules/analytics/hooks/useEventTracker.ts
+++ b/packages/twenty-front/src/modules/analytics/hooks/useEventTracker.ts
@@ -1,32 +1,46 @@
import { useCallback } from 'react';
-import { useRecoilValue } from 'recoil';
-
-import { telemetryState } from '@/client-config/states/telemetryState';
import { useTrackMutation } from '~/generated/graphql';
-
-interface EventLocation {
+export interface EventData {
pathname: string;
+ userAgent: string;
+ timeZone: string;
+ locale: string;
+ href: string;
+ referrer: string;
}
+export const ANALYTICS_COOKIE_NAME = 'analyticsCookie';
+export const getSessionId = (): string => {
+ const cookie: { [key: string]: string } = {};
+ document.cookie.split(';').forEach((el) => {
+ const [key, value] = el.split('=');
+ cookie[key.trim()] = value;
+ });
+ return cookie[ANALYTICS_COOKIE_NAME];
+};
-export interface EventData {
- location: EventLocation;
-}
+export const setSessionId = (domain?: string): void => {
+ const sessionId = getSessionId() || crypto.randomUUID();
+ const baseCookie = `${ANALYTICS_COOKIE_NAME}=${sessionId}; Max-Age=1800; path=/; secure`;
+ const cookie = domain ? baseCookie + `; domain=${domain}` : baseCookie;
+
+ document.cookie = cookie;
+};
export const useEventTracker = () => {
- const telemetry = useRecoilValue(telemetryState);
const [createEventMutation] = useTrackMutation();
return useCallback(
- (eventType: string, eventData: EventData) => {
- if (telemetry.enabled) {
- createEventMutation({
- variables: {
- type: eventType,
- data: eventData,
+ (eventAction: string, eventPayload: EventData) => {
+ createEventMutation({
+ variables: {
+ action: eventAction,
+ payload: {
+ sessionId: getSessionId(),
+ ...eventPayload,
},
- });
- }
+ },
+ });
},
- [createEventMutation, telemetry],
+ [createEventMutation],
);
};
diff --git a/packages/twenty-front/src/modules/apollo/hooks/__tests__/useApolloFactory.test.tsx b/packages/twenty-front/src/modules/apollo/hooks/__tests__/useApolloFactory.test.tsx
index 59f99306a524..5e19a8309c64 100644
--- a/packages/twenty-front/src/modules/apollo/hooks/__tests__/useApolloFactory.test.tsx
+++ b/packages/twenty-front/src/modules/apollo/hooks/__tests__/useApolloFactory.test.tsx
@@ -1,7 +1,7 @@
-import { MemoryRouter, useLocation } from 'react-router-dom';
import { ApolloError, gql } from '@apollo/client';
import { act, renderHook } from '@testing-library/react';
import fetchMock, { enableFetchMocks } from 'jest-fetch-mock';
+import { MemoryRouter, useLocation } from 'react-router-dom';
import { RecoilRoot } from 'recoil';
import { useApolloFactory } from '../useApolloFactory';
@@ -77,8 +77,8 @@ describe('useApolloFactory', () => {
await act(async () => {
await result.current.factory.mutate({
mutation: gql`
- mutation Track($type: String!, $data: JSON!) {
- track(type: $type, data: $data) {
+ mutation Track($type: String!, $sessionId: String!, $data: JSON!) {
+ track(type: $type, sessionId: $sessionId, data: $data) {
success
}
}
diff --git a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerDeleteRecordsOptimisticEffect.ts b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerDestroyRecordsOptimisticEffect.ts
similarity index 68%
rename from packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerDeleteRecordsOptimisticEffect.ts
rename to packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerDestroyRecordsOptimisticEffect.ts
index 1a3a1aa8903b..8ed05ecd020a 100644
--- a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerDeleteRecordsOptimisticEffect.ts
+++ b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerDestroyRecordsOptimisticEffect.ts
@@ -1,30 +1,28 @@
import { ApolloCache, StoreObject } from '@apollo/client';
import { triggerUpdateRelationsOptimisticEffect } from '@/apollo/optimistic-effect/utils/triggerUpdateRelationsOptimisticEffect';
-import { CachedObjectRecordQueryVariables } from '@/apollo/types/CachedObjectRecordQueryVariables';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { RecordGqlRefEdge } from '@/object-record/cache/types/RecordGqlRefEdge';
import { isObjectRecordConnectionWithRefs } from '@/object-record/cache/utils/isObjectRecordConnectionWithRefs';
import { RecordGqlNode } from '@/object-record/graphql/types/RecordGqlNode';
import { isDefined } from '~/utils/isDefined';
-import { parseApolloStoreFieldName } from '~/utils/parseApolloStoreFieldName';
-export const triggerDeleteRecordsOptimisticEffect = ({
+export const triggerDestroyRecordsOptimisticEffect = ({
cache,
objectMetadataItem,
- recordsToDelete,
+ recordsToDestroy,
objectMetadataItems,
}: {
cache: ApolloCache;
objectMetadataItem: ObjectMetadataItem;
- recordsToDelete: RecordGqlNode[];
+ recordsToDestroy: RecordGqlNode[];
objectMetadataItems: ObjectMetadataItem[];
}) => {
cache.modify({
fields: {
[objectMetadataItem.namePlural]: (
rootQueryCachedResponse,
- { DELETE, readField, storeFieldName },
+ { readField },
) => {
const rootQueryCachedResponseIsNotACachedObjectRecordConnection =
!isObjectRecordConnectionWithRefs(
@@ -38,13 +36,7 @@ export const triggerDeleteRecordsOptimisticEffect = ({
const rootQueryCachedObjectRecordConnection = rootQueryCachedResponse;
- const { fieldVariables: rootQueryVariables } =
- parseApolloStoreFieldName(
- storeFieldName,
- );
-
- const recordIdsToDelete = recordsToDelete.map(({ id }) => id);
-
+ const recordIdsToDestroy = recordsToDestroy.map(({ id }) => id);
const cachedEdges = readField(
'edges',
rootQueryCachedObjectRecordConnection,
@@ -59,40 +51,32 @@ export const triggerDeleteRecordsOptimisticEffect = ({
cachedEdges?.filter((cachedEdge) => {
const nodeId = readField('id', cachedEdge.node);
- return nodeId && !recordIdsToDelete.includes(nodeId);
+ return nodeId && !recordIdsToDestroy.includes(nodeId);
}) || [];
if (nextCachedEdges.length === cachedEdges?.length)
return rootQueryCachedObjectRecordConnection;
- // TODO: same as in update, should we trigger DELETE ?
- if (
- isDefined(rootQueryVariables?.first) &&
- cachedEdges?.length === rootQueryVariables.first
- ) {
- return DELETE;
- }
-
return {
...rootQueryCachedObjectRecordConnection,
edges: nextCachedEdges,
totalCount: isDefined(totalCount)
- ? totalCount - recordIdsToDelete.length
+ ? totalCount - recordIdsToDestroy.length
: undefined,
};
},
},
});
- recordsToDelete.forEach((recordToDelete) => {
+ recordsToDestroy.forEach((recordToDestroy) => {
triggerUpdateRelationsOptimisticEffect({
cache,
sourceObjectMetadataItem: objectMetadataItem,
- currentSourceRecord: recordToDelete,
+ currentSourceRecord: recordToDestroy,
updatedSourceRecord: null,
objectMetadataItems,
});
- cache.evict({ id: cache.identify(recordToDelete) });
+ cache.evict({ id: cache.identify(recordToDestroy) });
});
};
diff --git a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffect.ts b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffect.ts
index 3c09c213f68b..15878796f5bd 100644
--- a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffect.ts
+++ b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRecordOptimisticEffect.ts
@@ -65,50 +65,45 @@ export const triggerUpdateRecordOptimisticEffect = ({
const rootQueryFilter = rootQueryVariables?.filter;
const rootQueryOrderBy = rootQueryVariables?.orderBy;
- const shouldTryToMatchFilter = isDefined(rootQueryFilter);
-
- if (shouldTryToMatchFilter) {
- const updatedRecordMatchesThisRootQueryFilter =
- isRecordMatchingFilter({
- record: updatedRecord,
- filter: rootQueryFilter,
- objectMetadataItem,
- });
+ const updatedRecordMatchesThisRootQueryFilter = isRecordMatchingFilter({
+ record: updatedRecord,
+ filter: rootQueryFilter ?? {},
+ objectMetadataItem,
+ });
+
+ const updatedRecordIndexInRootQueryEdges =
+ rootQueryCurrentEdges.findIndex(
+ (cachedEdge) =>
+ readField('id', cachedEdge.node) === updatedRecord.id,
+ );
- const updatedRecordIndexInRootQueryEdges =
- rootQueryCurrentEdges.findIndex(
- (cachedEdge) =>
- readField('id', cachedEdge.node) === updatedRecord.id,
- );
-
- const updatedRecordFoundInRootQueryEdges =
- updatedRecordIndexInRootQueryEdges > -1;
-
- const updatedRecordShouldBeAddedToRootQueryEdges =
- updatedRecordMatchesThisRootQueryFilter &&
- !updatedRecordFoundInRootQueryEdges;
-
- const updatedRecordShouldBeRemovedFromRootQueryEdges =
- !updatedRecordMatchesThisRootQueryFilter &&
- updatedRecordFoundInRootQueryEdges;
-
- if (updatedRecordShouldBeAddedToRootQueryEdges) {
- const updatedRecordNodeReference = toReference(updatedRecord);
-
- if (isDefined(updatedRecordNodeReference)) {
- rootQueryNextEdges.push({
- __typename: getEdgeTypename(objectMetadataItem.nameSingular),
- node: updatedRecordNodeReference,
- cursor: '',
- });
- }
- }
+ const updatedRecordFoundInRootQueryEdges =
+ updatedRecordIndexInRootQueryEdges > -1;
+
+ const updatedRecordShouldBeAddedToRootQueryEdges =
+ updatedRecordMatchesThisRootQueryFilter &&
+ !updatedRecordFoundInRootQueryEdges;
+
+ const updatedRecordShouldBeRemovedFromRootQueryEdges =
+ !updatedRecordMatchesThisRootQueryFilter &&
+ updatedRecordFoundInRootQueryEdges;
- if (updatedRecordShouldBeRemovedFromRootQueryEdges) {
- rootQueryNextEdges.splice(updatedRecordIndexInRootQueryEdges, 1);
+ if (updatedRecordShouldBeAddedToRootQueryEdges) {
+ const updatedRecordNodeReference = toReference(updatedRecord);
+
+ if (isDefined(updatedRecordNodeReference)) {
+ rootQueryNextEdges.push({
+ __typename: getEdgeTypename(objectMetadataItem.nameSingular),
+ node: updatedRecordNodeReference,
+ cursor: '',
+ });
}
}
+ if (updatedRecordShouldBeRemovedFromRootQueryEdges) {
+ rootQueryNextEdges.splice(updatedRecordIndexInRootQueryEdges, 1);
+ }
+
const rootQueryNextEdgesShouldBeSorted = isDefined(rootQueryOrderBy);
if (
diff --git a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRelationsOptimisticEffect.ts b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRelationsOptimisticEffect.ts
index 535f33db4f8a..4e44e098adcb 100644
--- a/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRelationsOptimisticEffect.ts
+++ b/packages/twenty-front/src/modules/apollo/optimistic-effect/utils/triggerUpdateRelationsOptimisticEffect.ts
@@ -1,7 +1,7 @@
import { ApolloCache } from '@apollo/client';
import { triggerAttachRelationOptimisticEffect } from '@/apollo/optimistic-effect/utils/triggerAttachRelationOptimisticEffect';
-import { triggerDeleteRecordsOptimisticEffect } from '@/apollo/optimistic-effect/utils/triggerDeleteRecordsOptimisticEffect';
+import { triggerDestroyRecordsOptimisticEffect } from '@/apollo/optimistic-effect/utils/triggerDestroyRecordsOptimisticEffect';
import { triggerDetachRelationOptimisticEffect } from '@/apollo/optimistic-effect/utils/triggerDetachRelationOptimisticEffect';
import { CORE_OBJECT_NAMES_TO_DELETE_ON_TRIGGER_RELATION_DETACH } from '@/apollo/types/coreObjectNamesToDeleteOnRelationDetach';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
@@ -122,10 +122,10 @@ export const triggerUpdateRelationsOptimisticEffect = ({
);
if (shouldCascadeDeleteTargetRecords) {
- triggerDeleteRecordsOptimisticEffect({
+ triggerDestroyRecordsOptimisticEffect({
cache,
objectMetadataItem: fullTargetObjectMetadataItem,
- recordsToDelete: targetRecordsToDetachFrom,
+ recordsToDestroy: targetRecordsToDetachFrom,
objectMetadataItems,
});
} else {
diff --git a/packages/twenty-front/src/modules/apollo/services/__tests__/apollo.factory.test.ts b/packages/twenty-front/src/modules/apollo/services/__tests__/apollo.factory.test.ts
index d0ba37512438..9136b83fcd04 100644
--- a/packages/twenty-front/src/modules/apollo/services/__tests__/apollo.factory.test.ts
+++ b/packages/twenty-front/src/modules/apollo/services/__tests__/apollo.factory.test.ts
@@ -41,8 +41,8 @@ const makeRequest = async () => {
await client.mutate({
mutation: gql`
- mutation Track($type: String!, $data: JSON!) {
- track(type: $type, data: $data) {
+ mutation Track($type: String!, $sessionId: String!, $data: JSON!) {
+ track(type: $type, sessionId: $sessionId, data: $data) {
success
}
}
diff --git a/packages/twenty-front/src/modules/app/components/App.tsx b/packages/twenty-front/src/modules/app/components/App.tsx
new file mode 100644
index 000000000000..f760ee9f6fb4
--- /dev/null
+++ b/packages/twenty-front/src/modules/app/components/App.tsx
@@ -0,0 +1,32 @@
+import { AppRouter } from '@/app/components/AppRouter';
+import { CaptchaProvider } from '@/captcha/components/CaptchaProvider';
+import { ApolloDevLogEffect } from '@/debug/components/ApolloDevLogEffect';
+import { RecoilDebugObserverEffect } from '@/debug/components/RecoilDebugObserver';
+import { AppErrorBoundary } from '@/error-handler/components/AppErrorBoundary';
+import { ExceptionHandlerProvider } from '@/error-handler/components/ExceptionHandlerProvider';
+import { SnackBarProviderScope } from '@/ui/feedback/snack-bar-manager/scopes/SnackBarProviderScope';
+import { HelmetProvider } from 'react-helmet-async';
+import { RecoilRoot } from 'recoil';
+import { IconsProvider } from 'twenty-ui';
+
+export const App = () => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/packages/twenty-front/src/modules/app/components/AppRouter.tsx b/packages/twenty-front/src/modules/app/components/AppRouter.tsx
new file mode 100644
index 000000000000..d8985e676332
--- /dev/null
+++ b/packages/twenty-front/src/modules/app/components/AppRouter.tsx
@@ -0,0 +1,27 @@
+import { createAppRouter } from '@/app/utils/createAppRouter';
+import { billingState } from '@/client-config/states/billingState';
+import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
+import { RouterProvider } from 'react-router-dom';
+import { useRecoilValue } from 'recoil';
+
+export const AppRouter = () => {
+ const billing = useRecoilValue(billingState);
+ const isFreeAccessEnabled = useIsFeatureEnabled('IS_FREE_ACCESS_ENABLED');
+ const isCRMMigrationEnabled = useIsFeatureEnabled('IS_CRM_MIGRATION_ENABLED');
+ const isServerlessFunctionSettingsEnabled = useIsFeatureEnabled(
+ 'IS_FUNCTION_SETTINGS_ENABLED',
+ );
+
+ const isBillingPageEnabled =
+ billing?.isBillingEnabled && !isFreeAccessEnabled;
+
+ return (
+
+ );
+};
diff --git a/packages/twenty-front/src/modules/app/components/AppRouterProviders.tsx b/packages/twenty-front/src/modules/app/components/AppRouterProviders.tsx
new file mode 100644
index 000000000000..e5a24da4057a
--- /dev/null
+++ b/packages/twenty-front/src/modules/app/components/AppRouterProviders.tsx
@@ -0,0 +1,66 @@
+import { ApolloProvider } from '@/apollo/components/ApolloProvider';
+import { CommandMenuEffect } from '@/app/effect-components/CommandMenuEffect';
+import { GotoHotkeys } from '@/app/effect-components/GotoHotkeysEffect';
+import { PageChangeEffect } from '@/app/effect-components/PageChangeEffect';
+import { AuthProvider } from '@/auth/components/AuthProvider';
+import { ChromeExtensionSidecarEffect } from '@/chrome-extension-sidecar/components/ChromeExtensionSidecarEffect';
+import { ChromeExtensionSidecarProvider } from '@/chrome-extension-sidecar/components/ChromeExtensionSidecarProvider';
+import { ClientConfigProvider } from '@/client-config/components/ClientConfigProvider';
+import { ClientConfigProviderEffect } from '@/client-config/components/ClientConfigProviderEffect';
+import { PromiseRejectionEffect } from '@/error-handler/components/PromiseRejectionEffect';
+import { ApolloMetadataClientProvider } from '@/object-metadata/components/ApolloMetadataClientProvider';
+import { ObjectMetadataItemsProvider } from '@/object-metadata/components/ObjectMetadataItemsProvider';
+import { PrefetchDataProvider } from '@/prefetch/components/PrefetchDataProvider';
+import { DialogManager } from '@/ui/feedback/dialog-manager/components/DialogManager';
+import { DialogManagerScope } from '@/ui/feedback/dialog-manager/scopes/DialogManagerScope';
+import { SnackBarProvider } from '@/ui/feedback/snack-bar-manager/components/SnackBarProvider';
+import { AppThemeProvider } from '@/ui/theme/components/AppThemeProvider';
+import { PageTitle } from '@/ui/utilities/page-title/PageTitle';
+import { UserProvider } from '@/users/components/UserProvider';
+import { UserProviderEffect } from '@/users/components/UserProviderEffect';
+import { StrictMode } from 'react';
+import { Outlet, useLocation } from 'react-router-dom';
+import { getPageTitleFromPath } from '~/utils/title-utils';
+
+export const AppRouterProviders = () => {
+ const { pathname } = useLocation();
+ const pageTitle = getPageTitleFromPath(pathname);
+
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/packages/twenty-front/src/SettingsRoutes.tsx b/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx
similarity index 92%
rename from packages/twenty-front/src/SettingsRoutes.tsx
rename to packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx
index 05e852e2bed0..5eede03959b5 100644
--- a/packages/twenty-front/src/SettingsRoutes.tsx
+++ b/packages/twenty-front/src/modules/app/components/SettingsRoutes.tsx
@@ -1,6 +1,7 @@
import { lazy, Suspense } from 'react';
import { Route, Routes } from 'react-router-dom';
+import { SettingsSkeletonLoader } from '@/settings/components/SettingsSkeletonLoader';
import { AppPath } from '@/types/AppPath';
import { SettingsPath } from '@/types/SettingsPath';
@@ -64,7 +65,7 @@ const SettingsDevelopersApiKeysNew = lazy(() =>
const SettingsDevelopersWebhooksNew = lazy(() =>
import(
- '~/pages/settings/developers/webhooks/SettingsDevelopersWebhooksNew'
+ '~/pages/settings/developers/webhooks/components/SettingsDevelopersWebhooksNew'
).then((module) => ({
default: module.SettingsDevelopersWebhooksNew,
})),
@@ -164,7 +165,7 @@ const SettingsObjects = lazy(() =>
const SettingsDevelopersWebhooksDetail = lazy(() =>
import(
- '~/pages/settings/developers/webhooks/SettingsDevelopersWebhookDetail'
+ '~/pages/settings/developers/webhooks/components/SettingsDevelopersWebhookDetail'
).then((module) => ({
default: module.SettingsDevelopersWebhooksDetail,
})),
@@ -202,22 +203,21 @@ const SettingsIntegrationShowDatabaseConnection = lazy(() =>
})),
);
-const SettingsObjectNewFieldStep1 = lazy(() =>
+const SettingsObjectNewFieldSelect = lazy(() =>
import(
- '~/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldStep1'
+ '~/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldSelect'
).then((module) => ({
- default: module.SettingsObjectNewFieldStep1,
+ default: module.SettingsObjectNewFieldSelect,
})),
);
-const SettingsObjectNewFieldStep2 = lazy(() =>
+const SettingsObjectNewFieldConfigure = lazy(() =>
import(
- '~/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldStep2'
+ '~/pages/settings/data-model/SettingsObjectNewField/SettingsObjectNewFieldConfigure'
).then((module) => ({
- default: module.SettingsObjectNewFieldStep2,
+ default: module.SettingsObjectNewFieldConfigure,
})),
);
-
const SettingsObjectFieldEdit = lazy(() =>
import('~/pages/settings/data-model/SettingsObjectFieldEdit').then(
(module) => ({
@@ -245,7 +245,7 @@ export const SettingsRoutes = ({
isCRMMigrationEnabled,
isServerlessFunctionSettingsEnabled,
}: SettingsRoutesProps) => (
-
+ }>
} />
} />
@@ -345,12 +345,12 @@ export const SettingsRoutes = ({
element={}
/>
}
+ path={SettingsPath.ObjectNewFieldSelect}
+ element={}
/>
}
+ path={SettingsPath.ObjectNewFieldConfigure}
+ element={}
/>
{
const setCommands = useSetRecoilState(commandMenuCommandsState);
- const commands = COMMAND_MENU_COMMANDS;
+ const commands = Object.values(COMMAND_MENU_COMMANDS);
useEffect(() => {
setCommands(commands);
}, [commands, setCommands]);
diff --git a/packages/twenty-front/src/modules/app/effect-components/GoToHotkeyItemEffect.tsx b/packages/twenty-front/src/modules/app/effect-components/GoToHotkeyItemEffect.tsx
new file mode 100644
index 000000000000..a0b545302501
--- /dev/null
+++ b/packages/twenty-front/src/modules/app/effect-components/GoToHotkeyItemEffect.tsx
@@ -0,0 +1,12 @@
+import { useGoToHotkeys } from '@/ui/utilities/hotkey/hooks/useGoToHotkeys';
+
+export const GoToHotkeyItemEffect = (props: {
+ hotkey: string;
+ pathToNavigateTo: string;
+}) => {
+ const { hotkey, pathToNavigateTo } = props;
+
+ useGoToHotkeys(hotkey, pathToNavigateTo);
+
+ return <>>;
+};
diff --git a/packages/twenty-front/src/modules/app/effect-components/GotoHotkeysEffect.tsx b/packages/twenty-front/src/modules/app/effect-components/GotoHotkeysEffect.tsx
new file mode 100644
index 000000000000..15d371f9f44a
--- /dev/null
+++ b/packages/twenty-front/src/modules/app/effect-components/GotoHotkeysEffect.tsx
@@ -0,0 +1,18 @@
+import { GoToHotkeyItemEffect } from '@/app/effect-components/GoToHotkeyItemEffect';
+import { useNonSystemActiveObjectMetadataItems } from '@/object-metadata/hooks/useNonSystemActiveObjectMetadataItems';
+import { useGoToHotkeys } from '@/ui/utilities/hotkey/hooks/useGoToHotkeys';
+
+export const GotoHotkeys = () => {
+ const { nonSystemActiveObjectMetadataItems } =
+ useNonSystemActiveObjectMetadataItems();
+
+ // Hardcoded since settings is static
+ useGoToHotkeys('s', '/settings/profile');
+
+ return nonSystemActiveObjectMetadataItems.map((objectMetadataItem) => (
+
+ ));
+};
diff --git a/packages/twenty-front/src/effect-components/PageChangeEffect.tsx b/packages/twenty-front/src/modules/app/effect-components/PageChangeEffect.tsx
similarity index 84%
rename from packages/twenty-front/src/effect-components/PageChangeEffect.tsx
rename to packages/twenty-front/src/modules/app/effect-components/PageChangeEffect.tsx
index bf083a157e5a..a8b05f4c0904 100644
--- a/packages/twenty-front/src/effect-components/PageChangeEffect.tsx
+++ b/packages/twenty-front/src/modules/app/effect-components/PageChangeEffect.tsx
@@ -4,11 +4,16 @@ import { useRecoilValue } from 'recoil';
import { IconCheckbox } from 'twenty-ui';
import { useOpenCreateActivityDrawer } from '@/activities/hooks/useOpenCreateActivityDrawer';
-import { useEventTracker } from '@/analytics/hooks/useEventTracker';
+import {
+ setSessionId,
+ useEventTracker,
+} from '@/analytics/hooks/useEventTracker';
import { useRequestFreshCaptchaToken } from '@/captcha/hooks/useRequestFreshCaptchaToken';
import { isCaptchaScriptLoadedState } from '@/captcha/states/isCaptchaScriptLoadedState';
import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu';
import { CommandType } from '@/command-menu/types/Command';
+import { useNonSystemActiveObjectMetadataItems } from '@/object-metadata/hooks/useNonSystemActiveObjectMetadataItems';
+import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { TableHotkeyScope } from '@/object-record/record-table/types/TableHotkeyScope';
import { AppBasePath } from '@/types/AppBasePath';
@@ -40,7 +45,9 @@ export const PageChangeEffect = () => {
const eventTracker = useEventTracker();
- const { addToCommandMenu, setToInitialCommandMenu } = useCommandMenu();
+ const { addToCommandMenu, setObjectsInCommandMenu } = useCommandMenu();
+
+ const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
const openCreateActivity = useOpenCreateActivityDrawer({
activityObjectNameSingular: CoreObjectNameSingular.Task,
@@ -143,8 +150,11 @@ export const PageChangeEffect = () => {
}
}, [isMatchingLocation, setHotkeyScope]);
+ const { nonSystemActiveObjectMetadataItems } =
+ useNonSystemActiveObjectMetadataItems();
+
useEffect(() => {
- setToInitialCommandMenu();
+ setObjectsInCommandMenu(nonSystemActiveObjectMetadataItems);
addToCommandMenu([
{
@@ -159,14 +169,24 @@ export const PageChangeEffect = () => {
}),
},
]);
- }, [addToCommandMenu, setToInitialCommandMenu, openCreateActivity]);
+ }, [
+ nonSystemActiveObjectMetadataItems,
+ addToCommandMenu,
+ setObjectsInCommandMenu,
+ openCreateActivity,
+ objectMetadataItems,
+ ]);
useEffect(() => {
setTimeout(() => {
+ setSessionId();
eventTracker('pageview', {
- location: {
- pathname: location.pathname,
- },
+ pathname: location.pathname,
+ locale: navigator.language,
+ userAgent: window.navigator.userAgent,
+ href: window.location.href,
+ referrer: document.referrer,
+ timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
});
}, 500);
}, [eventTracker, location.pathname]);
diff --git a/packages/twenty-front/src/modules/app/utils/createAppRouter.tsx b/packages/twenty-front/src/modules/app/utils/createAppRouter.tsx
new file mode 100644
index 000000000000..0ddb70ac1a34
--- /dev/null
+++ b/packages/twenty-front/src/modules/app/utils/createAppRouter.tsx
@@ -0,0 +1,78 @@
+import { AppRouterProviders } from '@/app/components/AppRouterProviders';
+import { SettingsRoutes } from '@/app/components/SettingsRoutes';
+import { VerifyEffect } from '@/auth/components/VerifyEffect';
+import indexAppPath from '@/navigation/utils/indexAppPath';
+import { AppPath } from '@/types/AppPath';
+import { BlankLayout } from '@/ui/layout/page/BlankLayout';
+import { DefaultLayout } from '@/ui/layout/page/DefaultLayout';
+import {
+ createBrowserRouter,
+ createRoutesFromElements,
+ Route,
+} from 'react-router-dom';
+import { Authorize } from '~/pages/auth/Authorize';
+import { Invite } from '~/pages/auth/Invite';
+import { PasswordReset } from '~/pages/auth/PasswordReset';
+import { SignInUp } from '~/pages/auth/SignInUp';
+import { ImpersonateEffect } from '~/pages/impersonate/ImpersonateEffect';
+import { NotFound } from '~/pages/not-found/NotFound';
+import { RecordIndexPage } from '~/pages/object-record/RecordIndexPage';
+import { RecordShowPage } from '~/pages/object-record/RecordShowPage';
+import { ChooseYourPlan } from '~/pages/onboarding/ChooseYourPlan';
+import { CreateProfile } from '~/pages/onboarding/CreateProfile';
+import { CreateWorkspace } from '~/pages/onboarding/CreateWorkspace';
+import { InviteTeam } from '~/pages/onboarding/InviteTeam';
+import { PaymentSuccess } from '~/pages/onboarding/PaymentSuccess';
+import { SyncEmails } from '~/pages/onboarding/SyncEmails';
+
+export const createAppRouter = (
+ isBillingEnabled?: boolean,
+ isCRMMigrationEnabled?: boolean,
+ isServerlessFunctionSettingsEnabled?: boolean,
+) =>
+ createBrowserRouter(
+ createRoutesFromElements(
+ }
+ // To switch state to `loading` temporarily to enable us
+ // to set scroll position before the page is rendered
+ loader={async () => Promise.resolve(null)}
+ >
+ }>
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ } />
+ }
+ />
+ >} />
+ } />
+ } />
+ } />
+
+ }
+ />
+ } />
+
+ }>
+ } />
+
+ ,
+ ),
+ );
diff --git a/packages/twenty-front/src/modules/auth/hooks/__test__/useAuth.test.tsx b/packages/twenty-front/src/modules/auth/hooks/__test__/useAuth.test.tsx
index ac52204f4cc4..60e4025a814f 100644
--- a/packages/twenty-front/src/modules/auth/hooks/__test__/useAuth.test.tsx
+++ b/packages/twenty-front/src/modules/auth/hooks/__test__/useAuth.test.tsx
@@ -1,8 +1,8 @@
-import { ReactNode } from 'react';
import { useApolloClient } from '@apollo/client';
import { MockedProvider } from '@apollo/client/testing';
import { expect } from '@storybook/test';
import { act, renderHook } from '@testing-library/react';
+import { ReactNode } from 'react';
import { RecoilRoot, useRecoilValue } from 'recoil';
import { iconsState } from 'twenty-ui';
@@ -12,7 +12,6 @@ import { billingState } from '@/client-config/states/billingState';
import { isDebugModeState } from '@/client-config/states/isDebugModeState';
import { isSignInPrefilledState } from '@/client-config/states/isSignInPrefilledState';
import { supportChatState } from '@/client-config/states/supportChatState';
-import { telemetryState } from '@/client-config/states/telemetryState';
import { email, mocks, password, results, token } from '../__mocks__/useAuth';
@@ -81,7 +80,6 @@ describe('useAuth', () => {
const billing = useRecoilValue(billingState);
const isSignInPrefilled = useRecoilValue(isSignInPrefilledState);
const supportChat = useRecoilValue(supportChatState);
- const telemetry = useRecoilValue(telemetryState);
const isDebugMode = useRecoilValue(isDebugModeState);
return {
...useAuth(),
@@ -92,7 +90,6 @@ describe('useAuth', () => {
billing,
isSignInPrefilled,
supportChat,
- telemetry,
isDebugMode,
},
};
@@ -126,9 +123,6 @@ describe('useAuth', () => {
supportDriver: 'none',
supportFrontChatId: null,
});
- expect(state.telemetry).toEqual({
- enabled: true,
- });
expect(state.isDebugMode).toBe(false);
});
diff --git a/packages/twenty-front/src/modules/auth/hooks/useAuth.ts b/packages/twenty-front/src/modules/auth/hooks/useAuth.ts
index 677932161d78..7a7de0807f1b 100644
--- a/packages/twenty-front/src/modules/auth/hooks/useAuth.ts
+++ b/packages/twenty-front/src/modules/auth/hooks/useAuth.ts
@@ -21,7 +21,6 @@ import { isClientConfigLoadedState } from '@/client-config/states/isClientConfig
import { isDebugModeState } from '@/client-config/states/isDebugModeState';
import { isSignInPrefilledState } from '@/client-config/states/isSignInPrefilledState';
import { supportChatState } from '@/client-config/states/supportChatState';
-import { telemetryState } from '@/client-config/states/telemetryState';
import { ColorScheme } from '@/workspace-member/types/WorkspaceMember';
import { REACT_APP_SERVER_BASE_URL } from '~/config';
import {
@@ -224,7 +223,6 @@ export const useAuth = () => {
.getLoadable(isSignInPrefilledState)
.getValue();
const supportChat = snapshot.getLoadable(supportChatState).getValue();
- const telemetry = snapshot.getLoadable(telemetryState).getValue();
const isDebugMode = snapshot.getLoadable(isDebugModeState).getValue();
const captchaProvider = snapshot
.getLoadable(captchaProviderState)
@@ -242,7 +240,6 @@ export const useAuth = () => {
set(billingState, billing);
set(isSignInPrefilledState, isSignInPrefilled);
set(supportChatState, supportChat);
- set(telemetryState, telemetry);
set(isDebugModeState, isDebugMode);
set(captchaProviderState, captchaProvider);
set(isClientConfigLoadedState, isClientConfigLoaded);
diff --git a/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpForm.tsx b/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpForm.tsx
index 2068e8f730b0..65021f7c6824 100644
--- a/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpForm.tsx
+++ b/packages/twenty-front/src/modules/auth/sign-in-up/components/SignInUpForm.tsx
@@ -76,6 +76,10 @@ export const SignInUpForm = () => {
if (signInUpStep === SignInUpStep.Init) {
continueWithEmail();
} else if (signInUpStep === SignInUpStep.Email) {
+ if (isDefined(form?.formState?.errors?.email)) {
+ setShowErrors(true);
+ return;
+ }
continueWithCredentials();
} else if (signInUpStep === SignInUpStep.Password) {
if (!form.formState.isSubmitting) {
@@ -238,6 +242,10 @@ export const SignInUpForm = () => {
return;
}
if (signInUpStep === SignInUpStep.Email) {
+ if (isDefined(form?.formState?.errors?.email)) {
+ setShowErrors(true);
+ return;
+ }
continueWithCredentials();
return;
}
diff --git a/packages/twenty-front/src/modules/chrome-extension-sidecar/components/ChromeExtensionSidecarProvider.tsx b/packages/twenty-front/src/modules/chrome-extension-sidecar/components/ChromeExtensionSidecarProvider.tsx
index 3c4d8556a4bf..9409540ead23 100644
--- a/packages/twenty-front/src/modules/chrome-extension-sidecar/components/ChromeExtensionSidecarProvider.tsx
+++ b/packages/twenty-front/src/modules/chrome-extension-sidecar/components/ChromeExtensionSidecarProvider.tsx
@@ -1,56 +1,46 @@
-import styled from '@emotion/styled';
-import { useRecoilValue } from 'recoil';
-
-import { isLoadingTokensFromExtensionState } from '@/chrome-extension-sidecar/states/isLoadingTokensFromExtensionState';
-import { chromeExtensionIdState } from '@/client-config/states/chromeExtensionIdState';
-import { isDefined } from '~/utils/isDefined';
-import { isInFrame } from '~/utils/isInIframe';
-
-const StyledContainer = styled.div`
- align-items: center;
- display: flex;
- flex-direction: column;
- height: 100vh;
- justify-content: center;
-`;
-
-const AppInaccessible = ({ message }: { message: string }) => {
- return (
-
-
- {message}
-
- );
-};
+// const StyledContainer = styled.div`
+// align-items: center;
+// display: flex;
+// flex-direction: column;
+// height: 100vh;
+// justify-content: center;
+// `;
+
+// const AppInaccessible = ({ message }: { message: string }) => {
+// return (
+//
+//
+// {message}
+//
+// );
+// };
export const ChromeExtensionSidecarProvider: React.FC<
React.PropsWithChildren
> = ({ children }) => {
- const isLoadingTokensFromExtension = useRecoilValue(
- isLoadingTokensFromExtensionState,
- );
- const chromeExtensionId = useRecoilValue(chromeExtensionIdState);
-
- if (!isInFrame()) return <>{children}>;
-
- if (!isDefined(chromeExtensionId))
- return (
-
- );
-
- if (isDefined(isLoadingTokensFromExtension) && !isLoadingTokensFromExtension)
- return (
-
- );
-
- return isLoadingTokensFromExtension && <>{children}>;
+ return <>{children}>;
+
+ // TODO: this is conflictting with storybook tests
+ // if (!isInFrame()) return <>{children}>;
+
+ // if (!isDefined(chromeExtensionId))
+ // return (
+ //
+ // );
+
+ // if (isDefined(isLoadingTokensFromExtension) && !isLoadingTokensFromExtension)
+ // return (
+ //
+ // );
+
+ // return isLoadingTokensFromExtension && <>{children}>;
};
diff --git a/packages/twenty-front/src/modules/client-config/components/ClientConfigProviderEffect.tsx b/packages/twenty-front/src/modules/client-config/components/ClientConfigProviderEffect.tsx
index 8bec4cc7dbd6..9eccbeb98e10 100644
--- a/packages/twenty-front/src/modules/client-config/components/ClientConfigProviderEffect.tsx
+++ b/packages/twenty-front/src/modules/client-config/components/ClientConfigProviderEffect.tsx
@@ -12,7 +12,6 @@ import { isSignInPrefilledState } from '@/client-config/states/isSignInPrefilled
import { isSignUpDisabledState } from '@/client-config/states/isSignUpDisabledState';
import { sentryConfigState } from '@/client-config/states/sentryConfigState';
import { supportChatState } from '@/client-config/states/supportChatState';
-import { telemetryState } from '@/client-config/states/telemetryState';
import { useGetClientConfigQuery } from '~/generated/graphql';
import { isDefined } from '~/utils/isDefined';
@@ -24,7 +23,6 @@ export const ClientConfigProviderEffect = () => {
const setIsSignUpDisabled = useSetRecoilState(isSignUpDisabledState);
const setBilling = useSetRecoilState(billingState);
- const setTelemetry = useSetRecoilState(telemetryState);
const setSupportChat = useSetRecoilState(supportChatState);
const setSentryConfig = useSetRecoilState(sentryConfigState);
@@ -56,7 +54,6 @@ export const ClientConfigProviderEffect = () => {
setIsSignUpDisabled(data?.clientConfig.signUpDisabled);
setBilling(data?.clientConfig.billing);
- setTelemetry(data?.clientConfig.telemetry);
setSupportChat(data?.clientConfig.support);
setSentryConfig({
@@ -79,7 +76,6 @@ export const ClientConfigProviderEffect = () => {
setIsDebugMode,
setIsSignInPrefilled,
setIsSignUpDisabled,
- setTelemetry,
setSupportChat,
setBilling,
setSentryConfig,
diff --git a/packages/twenty-front/src/modules/client-config/graphql/queries/getClientConfig.ts b/packages/twenty-front/src/modules/client-config/graphql/queries/getClientConfig.ts
index 3143bbc5f65a..e702acefa4f1 100644
--- a/packages/twenty-front/src/modules/client-config/graphql/queries/getClientConfig.ts
+++ b/packages/twenty-front/src/modules/client-config/graphql/queries/getClientConfig.ts
@@ -16,9 +16,6 @@ export const GET_CLIENT_CONFIG = gql`
signInPrefilled
signUpDisabled
debugMode
- telemetry {
- enabled
- }
support {
supportDriver
supportFrontChatId
diff --git a/packages/twenty-front/src/modules/client-config/states/telemetryState.ts b/packages/twenty-front/src/modules/client-config/states/telemetryState.ts
deleted file mode 100644
index f074ad218d5c..000000000000
--- a/packages/twenty-front/src/modules/client-config/states/telemetryState.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { createState } from 'twenty-ui';
-
-import { Telemetry } from '~/generated/graphql';
-
-export const telemetryState = createState({
- key: 'telemetryState',
- defaultValue: { enabled: true },
-});
diff --git a/packages/twenty-front/src/modules/command-menu/components/CommandMenu.tsx b/packages/twenty-front/src/modules/command-menu/components/CommandMenu.tsx
index 2b7d13f8c52b..25e5294e2729 100644
--- a/packages/twenty-front/src/modules/command-menu/components/CommandMenu.tsx
+++ b/packages/twenty-front/src/modules/command-menu/components/CommandMenu.tsx
@@ -1,5 +1,3 @@
-import styled from '@emotion/styled';
-
import { useOpenCopilotRightDrawer } from '@/activities/copilot/right-drawer/hooks/useOpenCopilotRightDrawer';
import { copilotQueryState } from '@/activities/copilot/right-drawer/states/copilotQueryState';
import { useOpenActivityRightDrawer } from '@/activities/hooks/useOpenActivityRightDrawer';
@@ -16,7 +14,9 @@ import { useKeyboardShortcutMenu } from '@/keyboard-shortcut-menu/hooks/useKeybo
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { getCompanyDomainName } from '@/object-metadata/utils/getCompanyDomainName';
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
+import { useSearchRecords } from '@/object-record/hooks/useSearchRecords';
import { makeOrFilterVariables } from '@/object-record/utils/makeOrFilterVariables';
+import { Opportunity } from '@/opportunities/Opportunity';
import { Person } from '@/people/types/Person';
import { LightIconButton } from '@/ui/input/button/components/LightIconButton';
import { SelectableItem } from '@/ui/layout/selectable-list/components/SelectableItem';
@@ -27,13 +27,14 @@ import { useListenClickOutside } from '@/ui/utilities/pointer-event/hooks/useLis
import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile';
import { ScrollWrapper } from '@/ui/utilities/scroll/components/ScrollWrapper';
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
+import styled from '@emotion/styled';
import { isNonEmptyString } from '@sniptt/guards';
import { useMemo, useRef } from 'react';
import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil';
import { Key } from 'ts-key-enum';
import { Avatar, IconNotes, IconSparkles, IconX, isDefined } from 'twenty-ui';
+import { useDebounce } from 'use-debounce';
import { getLogoUrlFromDomainName } from '~/utils';
-import { generateILikeFiltersForCompositeFields } from '~/utils/array/generateILikeFiltersForCompositeFields';
const SEARCH_BAR_HEIGHT = 56;
const SEARCH_BAR_PADDING = 3;
@@ -129,7 +130,6 @@ const StyledEmpty = styled.div`
export const CommandMenu = () => {
const { toggleCommandMenu, onItemClick, closeCommandMenu } = useCommandMenu();
const commandMenuRef = useRef(null);
-
const openActivityRightDrawer = useOpenActivityRightDrawer({
objectNameSingular: CoreObjectNameSingular.Note,
});
@@ -137,9 +137,9 @@ export const CommandMenu = () => {
const [commandMenuSearch, setCommandMenuSearch] = useRecoilState(
commandMenuSearchState,
);
+ const [deferredCommandMenuSearch] = useDebounce(commandMenuSearch, 300); // 200ms - 500ms
const commandMenuCommands = useRecoilValue(commandMenuCommandsState);
const { closeKeyboardShortcutMenu } = useKeyboardShortcutMenu();
-
const handleSearchChange = (event: React.ChangeEvent) => {
setCommandMenuSearch(event.target.value);
};
@@ -165,63 +165,45 @@ export const CommandMenu = () => {
[closeCommandMenu],
);
- const { records: people } = useFindManyRecords({
- skip: !isCommandMenuOpened,
- objectNameSingular: CoreObjectNameSingular.Person,
- filter: commandMenuSearch
- ? makeOrFilterVariables([
- ...generateILikeFiltersForCompositeFields(commandMenuSearch, 'name', [
- 'firstName',
- 'lastName',
- ]),
- ...generateILikeFiltersForCompositeFields(
- commandMenuSearch,
- 'emails',
- ['primaryEmail'],
- ),
- { phone: { ilike: `%${commandMenuSearch}%` } },
- ])
- : undefined,
- limit: 3,
- });
-
- const { records: companies } = useFindManyRecords({
- skip: !isCommandMenuOpened,
- objectNameSingular: CoreObjectNameSingular.Company,
- filter: commandMenuSearch
- ? {
- name: { ilike: `%${commandMenuSearch}%` },
- }
- : undefined,
- limit: 3,
- });
-
- const { records: notes } = useFindManyRecords({
+ const { loading: isPeopleLoading, records: people } =
+ useSearchRecords({
+ skip: !isCommandMenuOpened,
+ objectNameSingular: CoreObjectNameSingular.Person,
+ limit: 3,
+ searchInput: deferredCommandMenuSearch ?? undefined,
+ });
+
+ const { loading: isCompaniesLoading, records: companies } =
+ useSearchRecords({
+ skip: !isCommandMenuOpened,
+ objectNameSingular: CoreObjectNameSingular.Company,
+ limit: 3,
+ searchInput: deferredCommandMenuSearch ?? undefined,
+ });
+
+ const { loading: isNotesLoading, records: notes } = useFindManyRecords({
skip: !isCommandMenuOpened,
objectNameSingular: CoreObjectNameSingular.Note,
- filter: commandMenuSearch
+ filter: deferredCommandMenuSearch
? makeOrFilterVariables([
- { title: { ilike: `%${commandMenuSearch}%` } },
- { body: { ilike: `%${commandMenuSearch}%` } },
+ { title: { ilike: `%${deferredCommandMenuSearch}%` } },
+ { body: { ilike: `%${deferredCommandMenuSearch}%` } },
])
: undefined,
limit: 3,
});
- const { records: opportunities } = useFindManyRecords({
- skip: !isCommandMenuOpened,
- objectNameSingular: CoreObjectNameSingular.Opportunity,
- filter: commandMenuSearch
- ? {
- name: { ilike: `%${commandMenuSearch}%` },
- }
- : undefined,
- limit: 3,
- });
+ const { loading: isOpportunitiesLoading, records: opportunities } =
+ useSearchRecords({
+ skip: !isCommandMenuOpened,
+ objectNameSingular: CoreObjectNameSingular.Opportunity,
+ limit: 3,
+ searchInput: deferredCommandMenuSearch ?? undefined,
+ });
const peopleCommands = useMemo(
() =>
- people.map(({ id, name: { firstName, lastName } }) => ({
+ people?.map(({ id, name: { firstName, lastName } }) => ({
id,
label: `${firstName} ${lastName}`,
to: `object/person/${id}`,
@@ -231,7 +213,7 @@ export const CommandMenu = () => {
const companyCommands = useMemo(
() =>
- companies.map(({ id, name }) => ({
+ companies?.map(({ id, name }) => ({
id,
label: name ?? '',
to: `object/company/${id}`,
@@ -241,7 +223,7 @@ export const CommandMenu = () => {
const opportunityCommands = useMemo(
() =>
- opportunities.map(({ id, name }) => ({
+ opportunities?.map(({ id, name }) => ({
id,
label: name ?? '',
to: `object/opportunity/${id}`,
@@ -251,7 +233,7 @@ export const CommandMenu = () => {
const noteCommands = useMemo(
() =>
- notes.map((note) => ({
+ notes?.map((note) => ({
id: note.id,
label: note.title ?? '',
to: '',
@@ -261,12 +243,20 @@ export const CommandMenu = () => {
);
const otherCommands = useMemo(() => {
- return [
- ...peopleCommands,
- ...companyCommands,
- ...opportunityCommands,
- ...noteCommands,
- ] as Command[];
+ const commandsArray: Command[] = [];
+ if (peopleCommands?.length > 0) {
+ commandsArray.push(...(peopleCommands as Command[]));
+ }
+ if (companyCommands?.length > 0) {
+ commandsArray.push(...(companyCommands as Command[]));
+ }
+ if (opportunityCommands?.length > 0) {
+ commandsArray.push(...(opportunityCommands as Command[]));
+ }
+ if (noteCommands?.length > 0) {
+ commandsArray.push(...(noteCommands as Command[]));
+ }
+ return commandsArray;
}, [peopleCommands, companyCommands, noteCommands, opportunityCommands]);
const checkInShortcuts = (cmd: Command, search: string) => {
@@ -284,17 +274,17 @@ export const CommandMenu = () => {
const matchingNavigateCommand = commandMenuCommands.filter(
(cmd) =>
- (commandMenuSearch.length > 0
- ? checkInShortcuts(cmd, commandMenuSearch) ||
- checkInLabels(cmd, commandMenuSearch)
+ (deferredCommandMenuSearch.length > 0
+ ? checkInShortcuts(cmd, deferredCommandMenuSearch) ||
+ checkInLabels(cmd, deferredCommandMenuSearch)
: true) && cmd.type === CommandType.Navigate,
);
const matchingCreateCommand = commandMenuCommands.filter(
(cmd) =>
- (commandMenuSearch.length > 0
- ? checkInShortcuts(cmd, commandMenuSearch) ||
- checkInLabels(cmd, commandMenuSearch)
+ (deferredCommandMenuSearch.length > 0
+ ? checkInShortcuts(cmd, deferredCommandMenuSearch) ||
+ checkInLabels(cmd, deferredCommandMenuSearch)
: true) && cmd.type === CommandType.Create,
);
@@ -314,7 +304,7 @@ export const CommandMenu = () => {
label: 'Open Copilot',
type: CommandType.Navigate,
onCommandClick: () => {
- setCopilotQuery(commandMenuSearch);
+ setCopilotQuery(deferredCommandMenuSearch);
openCopilotRightDrawer();
},
};
@@ -325,10 +315,23 @@ export const CommandMenu = () => {
.map((cmd) => cmd.id)
.concat(matchingCreateCommand.map((cmd) => cmd.id))
.concat(matchingNavigateCommand.map((cmd) => cmd.id))
- .concat(people.map((person) => person.id))
- .concat(companies.map((company) => company.id))
- .concat(opportunities.map((opportunity) => opportunity.id))
- .concat(notes.map((note) => note.id));
+ .concat(people?.map((person) => person.id))
+ .concat(companies?.map((company) => company.id))
+ .concat(opportunities?.map((opportunity) => opportunity.id))
+ .concat(notes?.map((note) => note.id));
+
+ const isNoResults =
+ !matchingCreateCommand.length &&
+ !matchingNavigateCommand.length &&
+ !people?.length &&
+ !companies?.length &&
+ !notes?.length &&
+ !opportunities?.length;
+ const isLoading =
+ isPeopleLoading ||
+ isNotesLoading ||
+ isOpportunitiesLoading ||
+ isCompaniesLoading;
return (
<>
@@ -372,14 +375,9 @@ export const CommandMenu = () => {
}
}}
>
- {!matchingCreateCommand.length &&
- !matchingNavigateCommand.length &&
- !people.length &&
- !companies.length &&
- !notes.length &&
- !opportunities.length && (
- No results found
- )}
+ {isNoResults && !isLoading && (
+ No results found
+ )}
{isCopilotEnabled && (
@@ -387,8 +385,8 @@ export const CommandMenu = () => {
id={copilotCommand.id}
Icon={copilotCommand.Icon}
label={`${copilotCommand.label} ${
- commandMenuSearch.length > 2
- ? `"${commandMenuSearch}"`
+ deferredCommandMenuSearch.length > 2
+ ? `"${deferredCommandMenuSearch}"`
: ''
}`}
onClick={copilotCommand.onCommandClick}
@@ -429,7 +427,7 @@ export const CommandMenu = () => {
))}
- {people.map((person) => (
+ {people?.map((person) => (
{
))}
- {companies.map((company) => (
+ {companies?.map((company) => (
{
))}
- {opportunities.map((opportunity) => (
+ {opportunities?.map((opportunity) => (
{
(
)}
/>
@@ -499,7 +497,7 @@ export const CommandMenu = () => {
))}
- {notes.map((note) => (
+ {notes?.map((note) => (
= {
const setCurrentWorkspaceMember = useSetRecoilState(
currentWorkspaceMemberState,
);
- const { addToCommandMenu, setToInitialCommandMenu, openCommandMenu } =
+ const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
+
+ const { addToCommandMenu, setObjectsInCommandMenu, openCommandMenu } =
useCommandMenu();
setCurrentWorkspace(mockDefaultWorkspace);
setCurrentWorkspaceMember(mockedWorkspaceMemberData);
useEffect(() => {
- setToInitialCommandMenu();
+ const nonSystemActiveObjects = objectMetadataItems.filter(
+ (object) => !object.isSystem && object.isActive,
+ );
+
+ setObjectsInCommandMenu(nonSystemActiveObjects);
+
addToCommandMenu([
{
id: 'create-task',
@@ -62,7 +70,12 @@ const meta: Meta = {
},
]);
openCommandMenu();
- }, [addToCommandMenu, setToInitialCommandMenu, openCommandMenu]);
+ }, [
+ addToCommandMenu,
+ setObjectsInCommandMenu,
+ openCommandMenu,
+ objectMetadataItems,
+ ]);
return ;
},
diff --git a/packages/twenty-front/src/modules/command-menu/constants/CommandMenuCommands.ts b/packages/twenty-front/src/modules/command-menu/constants/CommandMenuCommands.ts
index 3c7f03168d98..711fbff881e9 100644
--- a/packages/twenty-front/src/modules/command-menu/constants/CommandMenuCommands.ts
+++ b/packages/twenty-front/src/modules/command-menu/constants/CommandMenuCommands.ts
@@ -8,8 +8,8 @@ import {
import { Command, CommandType } from '../types/Command';
-export const COMMAND_MENU_COMMANDS: Command[] = [
- {
+export const COMMAND_MENU_COMMANDS: { [key: string]: Command } = {
+ people: {
id: 'go-to-people',
to: '/objects/people',
label: 'Go to People',
@@ -18,7 +18,7 @@ export const COMMAND_MENU_COMMANDS: Command[] = [
secondHotKey: 'P',
Icon: IconUser,
},
- {
+ companies: {
id: 'go-to-companies',
to: '/objects/companies',
label: 'Go to Companies',
@@ -27,7 +27,7 @@ export const COMMAND_MENU_COMMANDS: Command[] = [
secondHotKey: 'C',
Icon: IconBuildingSkyscraper,
},
- {
+ opportunities: {
id: 'go-to-activities',
to: '/objects/opportunities',
label: 'Go to Opportunities',
@@ -36,7 +36,7 @@ export const COMMAND_MENU_COMMANDS: Command[] = [
secondHotKey: 'O',
Icon: IconTargetArrow,
},
- {
+ settings: {
id: 'go-to-settings',
to: '/settings/profile',
label: 'Go to Settings',
@@ -45,7 +45,7 @@ export const COMMAND_MENU_COMMANDS: Command[] = [
secondHotKey: 'S',
Icon: IconSettings,
},
- {
+ tasks: {
id: 'go-to-tasks',
to: '/objects/tasks',
label: 'Go to Tasks',
@@ -54,4 +54,4 @@ export const COMMAND_MENU_COMMANDS: Command[] = [
secondHotKey: 'T',
Icon: IconCheckbox,
},
-];
+};
diff --git a/packages/twenty-front/src/modules/command-menu/hooks/__test__/useCommandMenu.test.tsx b/packages/twenty-front/src/modules/command-menu/hooks/__test__/useCommandMenu.test.tsx
index e1ee5501382f..9d7e103398cc 100644
--- a/packages/twenty-front/src/modules/command-menu/hooks/__test__/useCommandMenu.test.tsx
+++ b/packages/twenty-front/src/modules/command-menu/hooks/__test__/useCommandMenu.test.tsx
@@ -1,6 +1,6 @@
+import { renderHook } from '@testing-library/react';
import { act } from 'react-dom/test-utils';
import { MemoryRouter } from 'react-router-dom';
-import { renderHook } from '@testing-library/react';
import { RecoilRoot, useRecoilState, useRecoilValue } from 'recoil';
import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu';
@@ -107,13 +107,40 @@ describe('useCommandMenu', () => {
expect(onClickMock).toHaveBeenCalledTimes(1);
});
- it('should setToInitialCommandMenu command menu', () => {
+ it('should setObjectsInCommandMenu command menu', () => {
const { result } = renderHooks();
act(() => {
- result.current.commandMenu.setToInitialCommandMenu();
+ result.current.commandMenu.setObjectsInCommandMenu([]);
+ });
+
+ expect(result.current.commandMenuCommands.length).toBe(1);
+
+ act(() => {
+ result.current.commandMenu.setObjectsInCommandMenu([
+ {
+ id: 'b88745ce-9021-4316-a018-8884e02d05ca',
+ nameSingular: 'task',
+ namePlural: 'tasks',
+ labelSingular: 'Task',
+ labelPlural: 'Tasks',
+ description: 'A task',
+ icon: 'IconCheckbox',
+ isCustom: false,
+ isRemote: false,
+ isActive: true,
+ isSystem: false,
+ createdAt: '2024-09-12T20:23:46.041Z',
+ updatedAt: '2024-09-13T08:36:53.426Z',
+ labelIdentifierFieldMetadataId:
+ 'ab7901eb-43e1-4dc7-8f3b-cdee2857eb9a',
+ imageIdentifierFieldMetadataId: null,
+ fields: [],
+ indexMetadatas: [],
+ },
+ ]);
});
- expect(result.current.commandMenuCommands.length).toBe(5);
+ expect(result.current.commandMenuCommands.length).toBe(2);
});
});
diff --git a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenu.ts b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenu.ts
index 1a8e085064e2..d19c314a1c8b 100644
--- a/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenu.ts
+++ b/packages/twenty-front/src/modules/command-menu/hooks/useCommandMenu.ts
@@ -1,6 +1,6 @@
+import { isNonEmptyString } from '@sniptt/guards';
import { useCallback } from 'react';
import { useNavigate } from 'react-router-dom';
-import { isNonEmptyString } from '@sniptt/guards';
import { useRecoilCallback, useSetRecoilState } from 'recoil';
import { commandMenuSearchState } from '@/command-menu/states/commandMenuSearchState';
@@ -9,10 +9,13 @@ import { usePreviousHotkeyScope } from '@/ui/utilities/hotkey/hooks/usePreviousH
import { AppHotkeyScope } from '@/ui/utilities/hotkey/types/AppHotkeyScope';
import { isDefined } from '~/utils/isDefined';
-import { COMMAND_MENU_COMMANDS } from '../constants/CommandMenuCommands';
+import { COMMAND_MENU_COMMANDS } from '@/command-menu/constants/CommandMenuCommands';
+import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
+import { ALL_ICONS } from '@ui/display/icon/providers/internal/AllIcons';
+import { sortByProperty } from '~/utils/array/sortByProperty';
import { commandMenuCommandsState } from '../states/commandMenuCommandsState';
import { isCommandMenuOpenedState } from '../states/isCommandMenuOpenedState';
-import { Command } from '../types/Command';
+import { Command, CommandType } from '../types/Command';
export const useCommandMenu = () => {
const navigate = useNavigate();
@@ -70,8 +73,27 @@ export const useCommandMenu = () => {
[setCommands],
);
- const setToInitialCommandMenu = () => {
- setCommands(COMMAND_MENU_COMMANDS);
+ const setObjectsInCommandMenu = (menuItems: ObjectMetadataItem[]) => {
+ const formattedItems = [
+ ...[
+ ...menuItems.map(
+ (item) =>
+ ({
+ id: item.id,
+ to: `/objects/${item.namePlural}`,
+ label: `Go to ${item.labelPlural}`,
+ type: CommandType.Navigate,
+ firstHotKey: 'G',
+ secondHotKey: item.labelPlural[0],
+ Icon: ALL_ICONS[
+ (item?.icon as keyof typeof ALL_ICONS) ?? 'IconArrowUpRight'
+ ],
+ }) as Command,
+ ),
+ ].sort(sortByProperty('label', 'asc')),
+ COMMAND_MENU_COMMANDS.settings,
+ ];
+ setCommands(formattedItems);
};
const onItemClick = useCallback(
@@ -96,6 +118,6 @@ export const useCommandMenu = () => {
toggleCommandMenu,
addToCommandMenu,
onItemClick,
- setToInitialCommandMenu,
+ setObjectsInCommandMenu,
};
};
diff --git a/packages/twenty-front/src/modules/context-store/states/contextStoreCurrentObjectMetadataIdState.ts b/packages/twenty-front/src/modules/context-store/states/contextStoreCurrentObjectMetadataIdState.ts
new file mode 100644
index 000000000000..3227e53807df
--- /dev/null
+++ b/packages/twenty-front/src/modules/context-store/states/contextStoreCurrentObjectMetadataIdState.ts
@@ -0,0 +1,8 @@
+import { createState } from 'twenty-ui';
+
+export const contextStoreCurrentObjectMetadataIdState = createState<
+ string | null
+>({
+ key: 'contextStoreCurrentObjectMetadataIdState',
+ defaultValue: null,
+});
diff --git a/packages/twenty-front/src/modules/context-store/states/contextStoreCurrentViewIdState.ts b/packages/twenty-front/src/modules/context-store/states/contextStoreCurrentViewIdState.ts
new file mode 100644
index 000000000000..41af1cc1357b
--- /dev/null
+++ b/packages/twenty-front/src/modules/context-store/states/contextStoreCurrentViewIdState.ts
@@ -0,0 +1,6 @@
+import { createState } from 'twenty-ui';
+
+export const contextStoreCurrentViewIdState = createState({
+ key: 'contextStoreCurrentViewIdState',
+ defaultValue: null,
+});
diff --git a/packages/twenty-front/src/modules/context-store/states/contextStoreTargetedRecordIdsState.ts b/packages/twenty-front/src/modules/context-store/states/contextStoreTargetedRecordIdsState.ts
new file mode 100644
index 000000000000..df0c3451172c
--- /dev/null
+++ b/packages/twenty-front/src/modules/context-store/states/contextStoreTargetedRecordIdsState.ts
@@ -0,0 +1,6 @@
+import { createState } from 'twenty-ui';
+
+export const contextStoreTargetedRecordIdsState = createState({
+ key: 'contextStoreTargetedRecordIdsState',
+ defaultValue: [],
+});
diff --git a/packages/twenty-front/src/modules/error-handler/components/PromiseRejectionEffect.tsx b/packages/twenty-front/src/modules/error-handler/components/PromiseRejectionEffect.tsx
index 1b500320199c..a385b1fb0261 100644
--- a/packages/twenty-front/src/modules/error-handler/components/PromiseRejectionEffect.tsx
+++ b/packages/twenty-front/src/modules/error-handler/components/PromiseRejectionEffect.tsx
@@ -1,4 +1,4 @@
-import React, { useCallback, useEffect } from 'react';
+import { useCallback, useEffect } from 'react';
import { ObjectMetadataItemNotFoundError } from '@/object-metadata/errors/ObjectMetadataNotFoundError';
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
@@ -20,7 +20,7 @@ export const PromiseRejectionEffect = () => {
},
);
} else {
- enqueueSnackBar(`Error: ${event.reason}`, {
+ enqueueSnackBar(`${error.message}`, {
variant: SnackBarVariant.Error,
});
}
diff --git a/packages/twenty-front/src/modules/favorites/components/FavoritesSkeletonLoader.tsx b/packages/twenty-front/src/modules/favorites/components/FavoritesSkeletonLoader.tsx
index 3822a12bc9b6..5e5d1ea7f8ec 100644
--- a/packages/twenty-front/src/modules/favorites/components/FavoritesSkeletonLoader.tsx
+++ b/packages/twenty-front/src/modules/favorites/components/FavoritesSkeletonLoader.tsx
@@ -1,6 +1,7 @@
-import Skeleton, { SkeletonTheme } from 'react-loading-skeleton';
+import { SKELETON_LOADER_HEIGHT_SIZES } from '@/activities/components/SkeletonLoader';
import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
+import Skeleton, { SkeletonTheme } from 'react-loading-skeleton';
const StyledSkeletonContainer = styled.div`
display: flex;
@@ -25,10 +26,19 @@ export const FavoritesSkeletonLoader = () => {
borderRadius={4}
>
-
+
-
-
+
+
diff --git a/packages/twenty-front/src/modules/favorites/components/WorkspaceFavorites.tsx b/packages/twenty-front/src/modules/favorites/components/WorkspaceFavorites.tsx
index b89290526c98..cf106211405b 100644
--- a/packages/twenty-front/src/modules/favorites/components/WorkspaceFavorites.tsx
+++ b/packages/twenty-front/src/modules/favorites/components/WorkspaceFavorites.tsx
@@ -1,7 +1,6 @@
-import { useFavorites } from '@/favorites/hooks/useFavorites';
+import { useFilteredObjectMetadataItemsForWorkspaceFavorites } from '@/navigation/hooks/useObjectMetadataItemsInWorkspaceFavorites';
import { NavigationDrawerSectionForObjectMetadataItems } from '@/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems';
import { NavigationDrawerSectionForObjectMetadataItemsSkeletonLoader } from '@/object-metadata/components/NavigationDrawerSectionForObjectMetadataItemsSkeletonLoader';
-import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems';
import { useIsPrefetchLoading } from '@/prefetch/hooks/useIsPrefetchLoading';
import { usePrefetchedData } from '@/prefetch/hooks/usePrefetchedData';
import { PrefetchKey } from '@/prefetch/types/PrefetchKey';
@@ -9,34 +8,18 @@ import { View } from '@/views/types/View';
export const WorkspaceFavorites = () => {
const { records: views } = usePrefetchedData(PrefetchKey.AllViews);
- const loading = useIsPrefetchLoading();
-
- const { workspaceFavorites } = useFavorites();
-
- const workspaceFavoriteIds = new Set(
- workspaceFavorites.map((favorite) => favorite.recordId),
- );
- const favoriteViewObjectMetadataIds = views.reduce((acc, view) => {
- if (workspaceFavoriteIds.has(view.id)) {
- acc.push(view.objectMetadataId);
- }
- return acc;
- }, []);
-
- const { objectMetadataItems } = useFilteredObjectMetadataItems();
-
- const objectMetadataItemsToDisplay = objectMetadataItems.filter((item) =>
- favoriteViewObjectMetadataIds.includes(item.id),
- );
+ const { activeObjectMetadataItems: objectMetadataItemsToDisplay } =
+ useFilteredObjectMetadataItemsForWorkspaceFavorites();
+ const loading = useIsPrefetchLoading();
if (loading) {
return ;
}
return (
({
useFindManyRecords: () => ({ records: initialFavorites }),
}));
-const mockObjectMetadataItems = getObjectMetadataItemsMock();
-
-const Wrapper = ({ children }: { children: ReactNode }) => (
-
-
-
- {children}
-
-
-
-);
+const Wrapper = getJestMetadataAndApolloMocksWrapper({
+ apolloMocks: mocks,
+});
describe('useFavorites', () => {
it('should fetch favorites successfully', async () => {
@@ -51,7 +41,7 @@ describe('useFavorites', () => {
setCurrentWorkspaceMember(mockWorkspaceMember);
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
- setMetadataItems(mockObjectMetadataItems);
+ setMetadataItems(generatedMockObjectMetadataItems);
return useFavorites();
},
@@ -72,7 +62,7 @@ describe('useFavorites', () => {
setCurrentWorkspaceMember(mockWorkspaceMember);
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
- setMetadataItems(mockObjectMetadataItems);
+ setMetadataItems(generatedMockObjectMetadataItems);
return useFavorites();
},
@@ -100,7 +90,7 @@ describe('useFavorites', () => {
setCurrentWorkspaceMember(mockWorkspaceMember);
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
- setMetadataItems(mockObjectMetadataItems);
+ setMetadataItems(generatedMockObjectMetadataItems);
return useFavorites();
},
@@ -125,7 +115,7 @@ describe('useFavorites', () => {
setCurrentWorkspaceMember(mockWorkspaceMember);
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
- setMetadataItems(mockObjectMetadataItems);
+ setMetadataItems(generatedMockObjectMetadataItems);
return useFavorites();
},
diff --git a/packages/twenty-front/src/modules/information-banner/components/reconnect-account/InformationBannerReconnectAccountEmailAliases.tsx b/packages/twenty-front/src/modules/information-banner/components/reconnect-account/InformationBannerReconnectAccountEmailAliases.tsx
index 03e7e04802f9..c3f381c1bcd5 100644
--- a/packages/twenty-front/src/modules/information-banner/components/reconnect-account/InformationBannerReconnectAccountEmailAliases.tsx
+++ b/packages/twenty-front/src/modules/information-banner/components/reconnect-account/InformationBannerReconnectAccountEmailAliases.tsx
@@ -1,6 +1,6 @@
import { InformationBanner } from '@/information-banner/components/InformationBanner';
-import { InformationBannerKeys } from '@/information-banner/enums/InformationBannerKeys.enum';
import { useAccountToReconnect } from '@/information-banner/hooks/useAccountToReconnect';
+import { InformationBannerKeys } from '@/information-banner/types/InformationBannerKeys';
import { useTriggerGoogleApisOAuth } from '@/settings/accounts/hooks/useTriggerGoogleApisOAuth';
import { IconRefresh } from 'twenty-ui';
diff --git a/packages/twenty-front/src/modules/information-banner/components/reconnect-account/InformationBannerReconnectAccountInsufficientPermissions.tsx b/packages/twenty-front/src/modules/information-banner/components/reconnect-account/InformationBannerReconnectAccountInsufficientPermissions.tsx
index 45a4ca00b20b..7f74a129b652 100644
--- a/packages/twenty-front/src/modules/information-banner/components/reconnect-account/InformationBannerReconnectAccountInsufficientPermissions.tsx
+++ b/packages/twenty-front/src/modules/information-banner/components/reconnect-account/InformationBannerReconnectAccountInsufficientPermissions.tsx
@@ -1,6 +1,6 @@
import { InformationBanner } from '@/information-banner/components/InformationBanner';
-import { InformationBannerKeys } from '@/information-banner/enums/InformationBannerKeys.enum';
import { useAccountToReconnect } from '@/information-banner/hooks/useAccountToReconnect';
+import { InformationBannerKeys } from '@/information-banner/types/InformationBannerKeys';
import { useTriggerGoogleApisOAuth } from '@/settings/accounts/hooks/useTriggerGoogleApisOAuth';
import { IconRefresh } from 'twenty-ui';
diff --git a/packages/twenty-front/src/modules/information-banner/hooks/useAccountToReconnect.ts b/packages/twenty-front/src/modules/information-banner/hooks/useAccountToReconnect.ts
index e73031015a44..ea74778ff536 100644
--- a/packages/twenty-front/src/modules/information-banner/hooks/useAccountToReconnect.ts
+++ b/packages/twenty-front/src/modules/information-banner/hooks/useAccountToReconnect.ts
@@ -1,6 +1,6 @@
import { ConnectedAccount } from '@/accounts/types/ConnectedAccount';
import { currentUserState } from '@/auth/states/currentUserState';
-import { InformationBannerKeys } from '@/information-banner/enums/InformationBannerKeys.enum';
+import { InformationBannerKeys } from '@/information-banner/types/InformationBannerKeys';
import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord';
import { useRecoilValue } from 'recoil';
diff --git a/packages/twenty-front/src/modules/information-banner/enums/InformationBannerKeys.enum.ts b/packages/twenty-front/src/modules/information-banner/types/InformationBannerKeys.ts
similarity index 100%
rename from packages/twenty-front/src/modules/information-banner/enums/InformationBannerKeys.enum.ts
rename to packages/twenty-front/src/modules/information-banner/types/InformationBannerKeys.ts
diff --git a/packages/twenty-front/src/modules/localization/utils/__tests__/findAvailableTimeZoneOption.test.ts b/packages/twenty-front/src/modules/localization/utils/__tests__/findAvailableTimeZoneOption.test.ts
new file mode 100644
index 000000000000..fa2bc25078e6
--- /dev/null
+++ b/packages/twenty-front/src/modules/localization/utils/__tests__/findAvailableTimeZoneOption.test.ts
@@ -0,0 +1,15 @@
+import { findAvailableTimeZoneOption } from '@/localization/utils/findAvailableTimeZoneOption';
+
+describe('findAvailableTimeZoneOption', () => {
+ it('should find the matching available IANA time zone select option from a given IANA time zone', () => {
+ const ianaTimeZone = 'Europe/Paris';
+ const expectedOption = {
+ label: '(GMT+02:00) Central European Summer Time - Paris',
+ value: 'Europe/Paris',
+ };
+
+ const option = findAvailableTimeZoneOption(ianaTimeZone);
+
+ expect(option).toEqual(expectedOption);
+ });
+});
diff --git a/packages/twenty-front/src/modules/localization/utils/detectTimeFormat.ts b/packages/twenty-front/src/modules/localization/utils/detectTimeFormat.ts
index 0580333afb90..01bad17167a5 100644
--- a/packages/twenty-front/src/modules/localization/utils/detectTimeFormat.ts
+++ b/packages/twenty-front/src/modules/localization/utils/detectTimeFormat.ts
@@ -5,6 +5,10 @@ export const detectTimeFormat = () => {
const isHour12 = Intl.DateTimeFormat(navigator.language, {
hour: 'numeric',
}).resolvedOptions().hour12;
- if (isDefined(isHour12) && isHour12) return TimeFormat.HOUR_12;
+
+ if (isDefined(isHour12) && isHour12) {
+ return TimeFormat.HOUR_12;
+ }
+
return TimeFormat.HOUR_24;
};
diff --git a/packages/twenty-front/src/modules/localization/utils/formatDateISOStringToRelativeDate.ts b/packages/twenty-front/src/modules/localization/utils/formatDateISOStringToRelativeDate.ts
new file mode 100644
index 000000000000..2bcc93a30357
--- /dev/null
+++ b/packages/twenty-front/src/modules/localization/utils/formatDateISOStringToRelativeDate.ts
@@ -0,0 +1,25 @@
+import {
+ differenceInDays,
+ formatDistance,
+ isToday,
+ startOfDay,
+} from 'date-fns';
+
+export const formatDateISOStringToRelativeDate = (
+ isoDate: string,
+ isDayMaximumPrecision = false,
+) => {
+ const now = new Date();
+ const targetDate = new Date(isoDate);
+
+ if (isDayMaximumPrecision && isToday(targetDate)) return 'Today';
+
+ const isWithin24h = Math.abs(differenceInDays(targetDate, now)) < 1;
+
+ if (isDayMaximumPrecision || !isWithin24h)
+ return formatDistance(startOfDay(targetDate), startOfDay(now), {
+ addSuffix: true,
+ });
+
+ return formatDistance(targetDate, now, { addSuffix: true });
+};
diff --git a/packages/twenty-front/src/modules/navigation/components/AppNavigationDrawer.tsx b/packages/twenty-front/src/modules/navigation/components/AppNavigationDrawer.tsx
index da636fe025e5..a6d3b1045cc9 100644
--- a/packages/twenty-front/src/modules/navigation/components/AppNavigationDrawer.tsx
+++ b/packages/twenty-front/src/modules/navigation/components/AppNavigationDrawer.tsx
@@ -4,7 +4,6 @@ import { useRecoilValue, useSetRecoilState } from 'recoil';
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
import { SettingsNavigationDrawerItems } from '@/settings/components/SettingsNavigationDrawerItems';
import { SupportDropdown } from '@/support/components/SupportDropdown';
-import { GithubVersionLink } from '@/ui/navigation/link/components/GithubVersionLink';
import {
NavigationDrawer,
NavigationDrawerProps,
@@ -16,6 +15,7 @@ import { getImageAbsoluteURI } from '~/utils/image/getImageAbsoluteURI';
import { useIsSettingsPage } from '../hooks/useIsSettingsPage';
import { currentMobileNavigationDrawerState } from '../states/currentMobileNavigationDrawerState';
+import { AdvancedSettingsToggle } from '@/ui/navigation/link/components/AdvancedSettingsToggle';
import { MainNavigationDrawerItems } from './MainNavigationDrawerItems';
export type AppNavigationDrawerProps = {
@@ -44,7 +44,7 @@ export const AppNavigationDrawer = ({
isSubMenu: true,
title: 'Exit Settings',
children: ,
- footer: ,
+ footer: ,
}
: {
logo:
diff --git a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerItems.tsx b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerItems.tsx
index 88f18e97e66b..867b5b49f558 100644
--- a/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerItems.tsx
+++ b/packages/twenty-front/src/modules/navigation/components/MainNavigationDrawerItems.tsx
@@ -5,6 +5,7 @@ import { IconSearch, IconSettings } from 'twenty-ui';
import { useCommandMenu } from '@/command-menu/hooks/useCommandMenu';
import { CurrentWorkspaceMemberFavorites } from '@/favorites/components/CurrentWorkspaceMemberFavorites';
import { WorkspaceFavorites } from '@/favorites/components/WorkspaceFavorites';
+import { NavigationDrawerOpenedSection } from '@/object-metadata/components/NavigationDrawerOpenedSection';
import { NavigationDrawerSectionForObjectMetadataItemsWrapper } from '@/object-metadata/components/NavigationDrawerSectionForObjectMetadataItemsWrapper';
import { NavigationDrawerItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItem';
import { NavigationDrawerSection } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSection';
@@ -44,6 +45,8 @@ export const MainNavigationDrawerItems = () => {
)}
+ {isWorkspaceFavoriteEnabled && }
+
{isWorkspaceFavoriteEnabled ? (
diff --git a/packages/twenty-front/src/modules/navigation/hooks/__tests__/useDefaultHomePagePath.test.ts b/packages/twenty-front/src/modules/navigation/hooks/__tests__/useDefaultHomePagePath.test.ts
index 8efee5d0c42d..a7fb3b4e51ed 100644
--- a/packages/twenty-front/src/modules/navigation/hooks/__tests__/useDefaultHomePagePath.test.ts
+++ b/packages/twenty-front/src/modules/navigation/hooks/__tests__/useDefaultHomePagePath.test.ts
@@ -4,16 +4,17 @@ import { RecoilRoot, useSetRecoilState } from 'recoil';
import { currentUserState } from '@/auth/states/currentUserState';
import { useDefaultHomePagePath } from '@/navigation/hooks/useDefaultHomePagePath';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
-import {
- COMPANY_OBJECT_METADATA_ID,
- getObjectMetadataItemsMock,
-} from '@/object-metadata/utils/getObjectMetadataItemsMock';
import { usePrefetchedData } from '@/prefetch/hooks/usePrefetchedData';
import { AppPath } from '@/types/AppPath';
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
import { mockedUserData } from '~/testing/mock-data/users';
jest.mock('@/prefetch/hooks/usePrefetchedData');
const setupMockPrefetchedData = (viewId?: string) => {
+ const companyObjectMetadata = generatedMockObjectMetadataItems.find(
+ (item) => item.nameSingular === 'company',
+ );
+
jest.mocked(usePrefetchedData).mockReturnValue({
isDataPrefetched: true,
records: viewId
@@ -21,7 +22,7 @@ const setupMockPrefetchedData = (viewId?: string) => {
{
id: viewId,
__typename: 'object',
- objectMetadataId: COMPANY_OBJECT_METADATA_ID,
+ objectMetadataId: companyObjectMetadata?.id,
},
]
: [],
@@ -36,7 +37,7 @@ const renderHooks = (withCurrentUser: boolean) => {
objectMetadataItemsState,
);
- setObjectMetadataItems(getObjectMetadataItemsMock());
+ setObjectMetadataItems(generatedMockObjectMetadataItems);
if (withCurrentUser) {
setCurrentUser(mockedUserData);
diff --git a/packages/twenty-front/src/modules/navigation/hooks/useObjectMetadataItemsInWorkspaceFavorites.ts b/packages/twenty-front/src/modules/navigation/hooks/useObjectMetadataItemsInWorkspaceFavorites.ts
new file mode 100644
index 000000000000..1c8abefe350e
--- /dev/null
+++ b/packages/twenty-front/src/modules/navigation/hooks/useObjectMetadataItemsInWorkspaceFavorites.ts
@@ -0,0 +1,35 @@
+import { useFavorites } from '@/favorites/hooks/useFavorites';
+import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems';
+import { usePrefetchedData } from '@/prefetch/hooks/usePrefetchedData';
+import { PrefetchKey } from '@/prefetch/types/PrefetchKey';
+import { View } from '@/views/types/View';
+
+export const useFilteredObjectMetadataItemsForWorkspaceFavorites = () => {
+ const { records: views } = usePrefetchedData(PrefetchKey.AllViews);
+
+ const { workspaceFavorites } = useFavorites();
+
+ const workspaceFavoriteIds = new Set(
+ workspaceFavorites.map((favorite) => favorite.recordId),
+ );
+
+ const favoriteViewObjectMetadataIds = new Set(
+ views.reduce((acc, view) => {
+ if (workspaceFavoriteIds.has(view.id)) {
+ acc.push(view.objectMetadataId);
+ }
+ return acc;
+ }, []),
+ );
+
+ const { activeObjectMetadataItems } = useFilteredObjectMetadataItems();
+
+ const activeObjectMetadataItemsInWorkspaceFavorites =
+ activeObjectMetadataItems.filter((item) =>
+ favoriteViewObjectMetadataIds.has(item.id),
+ );
+
+ return {
+ activeObjectMetadataItems: activeObjectMetadataItemsInWorkspaceFavorites,
+ };
+};
diff --git a/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerOpenedSection.tsx b/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerOpenedSection.tsx
new file mode 100644
index 000000000000..fb17b643078f
--- /dev/null
+++ b/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerOpenedSection.tsx
@@ -0,0 +1,57 @@
+import { useParams } from 'react-router-dom';
+
+import { useFilteredObjectMetadataItemsForWorkspaceFavorites } from '@/navigation/hooks/useObjectMetadataItemsInWorkspaceFavorites';
+import { NavigationDrawerSectionForObjectMetadataItems } from '@/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems';
+import { NavigationDrawerSectionForObjectMetadataItemsSkeletonLoader } from '@/object-metadata/components/NavigationDrawerSectionForObjectMetadataItemsSkeletonLoader';
+import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems';
+import { useIsPrefetchLoading } from '@/prefetch/hooks/useIsPrefetchLoading';
+import { usePrefetchedData } from '@/prefetch/hooks/usePrefetchedData';
+import { PrefetchKey } from '@/prefetch/types/PrefetchKey';
+import { View } from '@/views/types/View';
+
+export const NavigationDrawerOpenedSection = () => {
+ const { activeObjectMetadataItems } = useFilteredObjectMetadataItems();
+ const filteredActiveObjectMetadataItems = activeObjectMetadataItems.filter(
+ (item) => !item.isRemote,
+ );
+
+ const { records: views } = usePrefetchedData(PrefetchKey.AllViews);
+ const loading = useIsPrefetchLoading();
+
+ const currentObjectNamePlural = useParams().objectNamePlural;
+
+ const { activeObjectMetadataItems: workspaceFavoritesObjectMetadataItems } =
+ useFilteredObjectMetadataItemsForWorkspaceFavorites();
+
+ if (!currentObjectNamePlural) {
+ return;
+ }
+
+ const objectMetadataItem = filteredActiveObjectMetadataItems.find(
+ (item) => item.namePlural === currentObjectNamePlural,
+ );
+
+ if (!objectMetadataItem) {
+ return;
+ }
+
+ const shouldDisplayObjectInOpenedSection =
+ !workspaceFavoritesObjectMetadataItems
+ .map((item) => item.id)
+ .includes(objectMetadataItem.id);
+
+ if (loading) {
+ return ;
+ }
+
+ return (
+ shouldDisplayObjectInOpenedSection && (
+
+ )
+ );
+};
diff --git a/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForObjectMetadataItemsSkeletonLoader.tsx b/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForObjectMetadataItemsSkeletonLoader.tsx
index 70e00d717330..70b965b1827f 100644
--- a/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForObjectMetadataItemsSkeletonLoader.tsx
+++ b/packages/twenty-front/src/modules/object-metadata/components/NavigationDrawerSectionForObjectMetadataItemsSkeletonLoader.tsx
@@ -1,3 +1,4 @@
+import { SKELETON_LOADER_HEIGHT_SIZES } from '@/activities/components/SkeletonLoader';
import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import Skeleton, { SkeletonTheme } from 'react-loading-skeleton';
@@ -20,9 +21,18 @@ export const NavigationDrawerSectionForObjectMetadataItemsSkeletonLoader: React.
borderRadius={4}
>
-
-
-
+
+
+
);
diff --git a/packages/twenty-front/src/modules/object-metadata/components/ObjectMetadataItemsLoadEffect.tsx b/packages/twenty-front/src/modules/object-metadata/components/ObjectMetadataItemsLoadEffect.tsx
index b1bb3a151ad9..aeb16de86a66 100644
--- a/packages/twenty-front/src/modules/object-metadata/components/ObjectMetadataItemsLoadEffect.tsx
+++ b/packages/twenty-front/src/modules/object-metadata/components/ObjectMetadataItemsLoadEffect.tsx
@@ -1,13 +1,13 @@
import { useEffect } from 'react';
-import { useRecoilState, useRecoilValue } from 'recoil';
+import { useRecoilCallback, useRecoilValue } from 'recoil';
import { useIsLogged } from '@/auth/hooks/useIsLogged';
import { currentUserState } from '@/auth/states/currentUserState';
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
import { useFindManyObjectMetadataItems } from '@/object-metadata/hooks/useFindManyObjectMetadataItems';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
-import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
import { WorkspaceActivationStatus } from '~/generated/graphql';
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
import { isDeeplyEqual } from '~/utils/isDeeplyEqual';
import { isUndefinedOrNull } from '~/utils/isUndefinedOrNull';
@@ -16,35 +16,36 @@ export const ObjectMetadataItemsLoadEffect = () => {
const currentWorkspace = useRecoilValue(currentWorkspaceState);
const isLoggedIn = useIsLogged();
- const { objectMetadataItems: newObjectMetadataItems, loading } =
+ const { objectMetadataItems: newObjectMetadataItems } =
useFindManyObjectMetadataItems({
skip: !isLoggedIn,
});
- const [objectMetadataItems, setObjectMetadataItems] = useRecoilState(
- objectMetadataItemsState,
+ const updateObjectMetadataItems = useRecoilCallback(
+ ({ set, snapshot }) =>
+ () => {
+ const toSetObjectMetadataItems =
+ isUndefinedOrNull(currentUser) ||
+ currentWorkspace?.activationStatus !==
+ WorkspaceActivationStatus.Active
+ ? generatedMockObjectMetadataItems
+ : newObjectMetadataItems;
+
+ if (
+ !isDeeplyEqual(
+ snapshot.getLoadable(objectMetadataItemsState).getValue(),
+ toSetObjectMetadataItems,
+ )
+ ) {
+ set(objectMetadataItemsState, toSetObjectMetadataItems);
+ }
+ },
+ [currentUser, currentWorkspace?.activationStatus, newObjectMetadataItems],
);
useEffect(() => {
- const toSetObjectMetadataItems =
- isUndefinedOrNull(currentUser) ||
- currentWorkspace?.activationStatus !== WorkspaceActivationStatus.Active
- ? getObjectMetadataItemsMock()
- : newObjectMetadataItems;
- if (
- !loading &&
- !isDeeplyEqual(objectMetadataItems, toSetObjectMetadataItems)
- ) {
- setObjectMetadataItems(toSetObjectMetadataItems);
- }
- }, [
- currentUser,
- currentWorkspace?.activationStatus,
- loading,
- newObjectMetadataItems,
- objectMetadataItems,
- setObjectMetadataItems,
- ]);
+ updateObjectMetadataItems();
+ }, [updateObjectMetadataItems]);
return <>>;
};
diff --git a/packages/twenty-front/src/modules/object-metadata/constants/SortableFieldMetadataTypes.ts b/packages/twenty-front/src/modules/object-metadata/constants/SortableFieldMetadataTypes.ts
index 282710253650..f3599783cf7e 100644
--- a/packages/twenty-front/src/modules/object-metadata/constants/SortableFieldMetadataTypes.ts
+++ b/packages/twenty-front/src/modules/object-metadata/constants/SortableFieldMetadataTypes.ts
@@ -7,8 +7,6 @@ export const SORTABLE_FIELD_METADATA_TYPES = [
FieldMetadataType.Text,
FieldMetadataType.Boolean,
FieldMetadataType.Select,
- FieldMetadataType.Phone,
- FieldMetadataType.Email,
FieldMetadataType.Emails,
FieldMetadataType.FullName,
FieldMetadataType.Rating,
diff --git a/packages/twenty-front/src/modules/object-metadata/graphql/mutations.ts b/packages/twenty-front/src/modules/object-metadata/graphql/mutations.ts
index ab37d5249158..80814a64b7ec 100644
--- a/packages/twenty-front/src/modules/object-metadata/graphql/mutations.ts
+++ b/packages/twenty-front/src/modules/object-metadata/graphql/mutations.ts
@@ -35,6 +35,7 @@ export const CREATE_ONE_FIELD_METADATA_ITEM = gql`
isNullable
createdAt
updatedAt
+ settings
defaultValue
options
}
@@ -73,6 +74,7 @@ export const UPDATE_ONE_FIELD_METADATA_ITEM = gql`
isNullable
createdAt
updatedAt
+ settings
}
}
`;
@@ -136,6 +138,7 @@ export const DELETE_ONE_FIELD_METADATA_ITEM = gql`
isNullable
createdAt
updatedAt
+ settings
}
}
`;
diff --git a/packages/twenty-front/src/modules/object-metadata/graphql/queries.ts b/packages/twenty-front/src/modules/object-metadata/graphql/queries.ts
index 8dbaad032e4c..35beb162d350 100644
--- a/packages/twenty-front/src/modules/object-metadata/graphql/queries.ts
+++ b/packages/twenty-front/src/modules/object-metadata/graphql/queries.ts
@@ -24,6 +24,30 @@ export const FIND_MANY_OBJECT_METADATA_ITEMS = gql`
updatedAt
labelIdentifierFieldMetadataId
imageIdentifierFieldMetadataId
+ indexMetadatas(paging: { first: 100 }) {
+ edges {
+ node {
+ id
+ createdAt
+ updatedAt
+ name
+ indexWhereClause
+ indexType
+ isUnique
+ indexFieldMetadatas(paging: { first: 100 }) {
+ edges {
+ node {
+ id
+ createdAt
+ updatedAt
+ order
+ fieldMetadataId
+ }
+ }
+ }
+ }
+ }
+ }
fields(paging: { first: 1000 }, filter: $fieldFilter) {
edges {
node {
@@ -37,10 +61,12 @@ export const FIND_MANY_OBJECT_METADATA_ITEMS = gql`
isActive
isSystem
isNullable
+ isUnique
createdAt
updatedAt
defaultValue
options
+ settings
relationDefinition {
relationId
direction
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/ApolloMetadataClientProvider.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/ApolloMetadataClientMockedProvider.tsx
similarity index 100%
rename from packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/ApolloMetadataClientProvider.tsx
rename to packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/ApolloMetadataClientMockedProvider.tsx
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useFieldMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useFieldMetadataItem.ts
index 0a73b0d2a42b..0e7470a10359 100644
--- a/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useFieldMetadataItem.ts
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/__mocks__/useFieldMetadataItem.ts
@@ -17,6 +17,7 @@ const baseFields = `
isNullable
createdAt
updatedAt
+ settings
`;
export const queries = {
@@ -47,7 +48,18 @@ export const queries = {
createMetadataField: gql`
mutation CreateOneFieldMetadataItem($input: CreateOneFieldMetadataInput!) {
createOneField(input: $input) {
- ${baseFields}
+ id
+ type
+ name
+ label
+ description
+ icon
+ isCustom
+ isActive
+ isNullable
+ createdAt
+ updatedAt
+ settings
defaultValue
options
}
@@ -73,6 +85,7 @@ export const variables = {
label: 'fieldLabel',
name: 'fieldLabel',
options: undefined,
+ settings: undefined,
objectMetadataId,
type: 'TEXT',
},
@@ -96,6 +109,7 @@ const defaultResponseData = {
isNullable: false,
createdAt: '1977-09-28T13:56:55.157Z',
updatedAt: '1996-10-10T08:27:57.117Z',
+ settings: undefined,
};
const fieldRelationResponseData = {
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useColumnDefinitionsFromFieldMetadata.test.ts b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useColumnDefinitionsFromFieldMetadata.test.ts
index 19e8b6c30bac..05c87497dcc6 100644
--- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useColumnDefinitionsFromFieldMetadata.test.ts
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useColumnDefinitionsFromFieldMetadata.test.ts
@@ -3,7 +3,7 @@ import { Nullable } from 'twenty-ui';
import { useColumnDefinitionsFromFieldMetadata } from '@/object-metadata/hooks/useColumnDefinitionsFromFieldMetadata';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
-import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
describe('useColumnDefinitionsFromFieldMetadata', () => {
it('should return empty definitions if no object is passed', () => {
@@ -22,22 +22,24 @@ describe('useColumnDefinitionsFromFieldMetadata', () => {
});
it('should return expected definitions', () => {
- const mockObjectMetadataItems = getObjectMetadataItemsMock();
+ const companyObjectMetadata = generatedMockObjectMetadataItems.find(
+ (item) => item.nameSingular === 'company',
+ );
const { result } = renderHook(
(objectMetadataItem?: Nullable) => {
return useColumnDefinitionsFromFieldMetadata(objectMetadataItem);
},
{
- initialProps: mockObjectMetadataItems[1],
+ initialProps: companyObjectMetadata,
},
);
const { columnDefinitions, filterDefinitions, sortDefinitions } =
result.current;
- expect(columnDefinitions.length).toBe(5);
- expect(filterDefinitions.length).toBe(4);
- expect(sortDefinitions.length).toBe(4);
+ expect(columnDefinitions.length).toBe(21);
+ expect(filterDefinitions.length).toBe(14);
+ expect(sortDefinitions.length).toBe(14);
});
});
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useCreateOneObjectMetadataItem.test.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useCreateOneObjectMetadataItem.test.tsx
index 03443712d9de..cc92f241e31c 100644
--- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useCreateOneObjectMetadataItem.test.tsx
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useCreateOneObjectMetadataItem.test.tsx
@@ -1,10 +1,8 @@
-import { ReactNode } from 'react';
-import { MockedProvider } from '@apollo/client/testing';
import { act, renderHook } from '@testing-library/react';
-import { RecoilRoot } from 'recoil';
import { useCreateOneObjectMetadataItem } from '@/object-metadata/hooks/useCreateOneObjectMetadataItem';
+import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
import {
findManyViewsQuery,
query,
@@ -47,13 +45,9 @@ const mocks = [
},
];
-const Wrapper = ({ children }: { children: ReactNode }) => (
-
-
- {children}
-
-
-);
+const Wrapper = getJestMetadataAndApolloMocksWrapper({
+ apolloMocks: mocks,
+});
describe('useCreateOneObjectMetadataItem', () => {
it('should work as expected', async () => {
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFieldMetadataItem.test.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFieldMetadataItem.test.tsx
index 47b1a6c18c88..6795897e3cfd 100644
--- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFieldMetadataItem.test.tsx
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFieldMetadataItem.test.tsx
@@ -1,6 +1,6 @@
-import { ReactNode } from 'react';
import { MockedProvider } from '@apollo/client/testing';
-import { act, renderHook } from '@testing-library/react';
+import { renderHook } from '@testing-library/react';
+import { act, ReactNode } from 'react';
import { RecoilRoot } from 'recoil';
import { useFieldMetadataItem } from '@/object-metadata/hooks/useFieldMetadataItem';
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFilteredObjectMetadataItems.test.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFilteredObjectMetadataItems.test.tsx
index 9bb8f016965f..02e39712fe57 100644
--- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFilteredObjectMetadataItems.test.tsx
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useFilteredObjectMetadataItems.test.tsx
@@ -10,7 +10,7 @@ import {
} from '@/object-metadata/hooks/__mocks__/useFilteredObjectMetadataItems';
import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
-import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
const mocks = [
{
@@ -34,14 +34,12 @@ const Wrapper = ({ children }: { children: ReactNode }) => (
);
-const mockObjectMetadataItems = getObjectMetadataItemsMock();
-
describe('useFilteredObjectMetadataItems', () => {
it('should findActiveObjectMetadataItemBySlug', async () => {
const { result } = renderHook(
() => {
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
- setMetadataItems(mockObjectMetadataItems);
+ setMetadataItems(generatedMockObjectMetadataItems);
return useFilteredObjectMetadataItems();
},
@@ -61,7 +59,7 @@ describe('useFilteredObjectMetadataItems', () => {
const { result } = renderHook(
() => {
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
- setMetadataItems(mockObjectMetadataItems);
+ setMetadataItems(generatedMockObjectMetadataItems);
return useFilteredObjectMetadataItems();
},
@@ -78,10 +76,14 @@ describe('useFilteredObjectMetadataItems', () => {
});
it('should findObjectMetadataItemById', async () => {
+ const peopleObjectMetadata = generatedMockObjectMetadataItems.find(
+ (item) => item.namePlural === 'people',
+ );
+
const { result } = renderHook(
() => {
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
- setMetadataItems(mockObjectMetadataItems);
+ setMetadataItems(generatedMockObjectMetadataItems);
return useFilteredObjectMetadataItems();
},
@@ -92,7 +94,7 @@ describe('useFilteredObjectMetadataItems', () => {
act(() => {
const res = result.current.findObjectMetadataItemById(
- 'ff2881da-89f6-4f15-8f0a-e3f355ea3b94',
+ peopleObjectMetadata?.id,
);
expect(res).toBeDefined();
expect(res?.namePlural).toBe('people');
@@ -103,7 +105,7 @@ describe('useFilteredObjectMetadataItems', () => {
const { result } = renderHook(
() => {
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
- setMetadataItems(mockObjectMetadataItems);
+ setMetadataItems(generatedMockObjectMetadataItems);
return useFilteredObjectMetadataItems();
},
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetObjectOrderByField.test.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetObjectOrderByField.test.tsx
index 21ec56ad60b4..41220e695b94 100644
--- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetObjectOrderByField.test.tsx
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetObjectOrderByField.test.tsx
@@ -1,15 +1,11 @@
-import { ReactNode } from 'react';
-import { MockedProvider } from '@apollo/client/testing';
import { renderHook } from '@testing-library/react';
-import { RecoilRoot } from 'recoil';
import { useGetObjectOrderByField } from '@/object-metadata/hooks/useGetObjectOrderByField';
+import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
-const Wrapper = ({ children }: { children: ReactNode }) => (
-
- {children}
-
-);
+const Wrapper = getJestMetadataAndApolloMocksWrapper({
+ apolloMocks: [],
+});
describe('useGetObjectOrderByField', () => {
it('should work as expected', () => {
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetObjectRecordIdentifierByNameSingular.test.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetObjectRecordIdentifierByNameSingular.test.tsx
index 1a4c0e2cbfcc..938796b78714 100644
--- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetObjectRecordIdentifierByNameSingular.test.tsx
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetObjectRecordIdentifierByNameSingular.test.tsx
@@ -3,9 +3,7 @@ import { RecoilRoot, useSetRecoilState } from 'recoil';
import { useGetObjectRecordIdentifierByNameSingular } from '@/object-metadata/hooks/useGetObjectRecordIdentifierByNameSingular';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
-import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
-
-const mockObjectMetadataItems = getObjectMetadataItemsMock();
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
describe('useGetObjectRecordIdentifierByNameSingular', () => {
it('should work as expected', async () => {
@@ -19,7 +17,7 @@ describe('useGetObjectRecordIdentifierByNameSingular', () => {
}) => {
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
- setMetadataItems(mockObjectMetadataItems);
+ setMetadataItems(generatedMockObjectMetadataItems);
return useGetObjectRecordIdentifierByNameSingular()(
record,
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetRelationMetadata.test.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetRelationMetadata.test.tsx
index d92e0707f1f1..7455088f27bc 100644
--- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetRelationMetadata.test.tsx
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useGetRelationMetadata.test.tsx
@@ -5,7 +5,7 @@ import { RecoilRoot, useSetRecoilState } from 'recoil';
import { useGetRelationMetadata } from '@/object-metadata/hooks/useGetRelationMetadata';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
-import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
const Wrapper = ({ children }: { children: ReactNode }) => (
@@ -15,8 +15,7 @@ const Wrapper = ({ children }: { children: ReactNode }) => (
describe('useGetRelationMetadata', () => {
it('should return correct properties', async () => {
- const objectMetadataItems = getObjectMetadataItemsMock();
- const objectMetadata = objectMetadataItems.find(
+ const objectMetadata = generatedMockObjectMetadataItems.find(
(item) => item.nameSingular === 'person',
)!;
const fieldMetadataItem = objectMetadata.fields.find(
@@ -28,7 +27,7 @@ describe('useGetRelationMetadata', () => {
const setMetadataItems = useSetRecoilState(objectMetadataItemsState);
useEffect(() => {
- setMetadataItems(objectMetadataItems);
+ setMetadataItems(generatedMockObjectMetadataItems);
}, [setMetadataItems]);
return useGetRelationMetadata();
@@ -45,9 +44,10 @@ describe('useGetRelationMetadata', () => {
relationType,
} = result.current({ fieldMetadataItem }) ?? {};
- const expectedRelationObjectMetadataItem = objectMetadataItems.find(
- (item) => item.nameSingular === 'opportunity',
- );
+ const expectedRelationObjectMetadataItem =
+ generatedMockObjectMetadataItems.find(
+ (item) => item.nameSingular === 'opportunity',
+ );
const expectedRelationFieldMetadataItem =
expectedRelationObjectMetadataItem?.fields.find(
(field) => field.name === 'pointOfContact',
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useMapToObjectRecordIdentifier.test.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useMapToObjectRecordIdentifier.test.tsx
index d0157678c04a..8792fb31299a 100644
--- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useMapToObjectRecordIdentifier.test.tsx
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useMapToObjectRecordIdentifier.test.tsx
@@ -1,7 +1,11 @@
import { renderHook } from '@testing-library/react';
-import { RecoilRoot } from 'recoil';
import { useMapToObjectRecordIdentifier } from '@/object-metadata/hooks/useMapToObjectRecordIdentifier';
+import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
+
+const Wrapper = getJestMetadataAndApolloMocksWrapper({
+ apolloMocks: [],
+});
describe('useMapToObjectRecordIdentifier', () => {
it('should work as expected', async () => {
@@ -18,7 +22,7 @@ describe('useMapToObjectRecordIdentifier', () => {
});
},
{
- wrapper: RecoilRoot,
+ wrapper: Wrapper,
},
);
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useObjectMetadataItem.test.tsx b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useObjectMetadataItem.test.tsx
index ea205704d5f1..f3d33774b119 100644
--- a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useObjectMetadataItem.test.tsx
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useObjectMetadataItem.test.tsx
@@ -1,18 +1,19 @@
-import { MockedProvider } from '@apollo/client/testing';
import { renderHook } from '@testing-library/react';
-import { ReactNode } from 'react';
-import { RecoilRoot } from 'recoil';
+import { ObjectMetadataItemNotFoundError } from '@/object-metadata/errors/ObjectMetadataNotFoundError';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
+import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
-const Wrapper = ({ children }: { children: ReactNode }) => (
-
- {children}
-
-);
+const Wrapper = getJestMetadataAndApolloMocksWrapper({
+ apolloMocks: [],
+});
// Split into tests for each new hook
describe('useObjectMetadataItem', () => {
+ const opportunityObjectMetadata = generatedMockObjectMetadataItems.find(
+ (item) => item.nameSingular === 'opportunity',
+ );
it('should return correct properties', async () => {
const { result } = renderHook(
() => useObjectMetadataItem({ objectNameSingular: 'opportunity' }),
@@ -23,6 +24,17 @@ describe('useObjectMetadataItem', () => {
const { objectMetadataItem } = result.current;
- expect(objectMetadataItem.id).toBe('b95b3f38-9fc2-4d7e-a823-7791cf13d089');
+ expect(objectMetadataItem.id).toBe(opportunityObjectMetadata?.id);
+ });
+
+ it('should throw an error when invalid object name singular is provided', async () => {
+ expect(() =>
+ renderHook(
+ () => useObjectMetadataItem({ objectNameSingular: 'invalid-object' }),
+ {
+ wrapper: Wrapper,
+ },
+ ),
+ ).toThrow(ObjectMetadataItemNotFoundError);
});
});
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useObjectMetadataItemById.test.ts b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useObjectMetadataItemById.test.ts
new file mode 100644
index 000000000000..ceff2e45541a
--- /dev/null
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/__tests__/useObjectMetadataItemById.test.ts
@@ -0,0 +1,48 @@
+import { renderHook } from '@testing-library/react';
+
+import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById';
+import { getJestMetadataAndApolloMocksWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksWrapper';
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
+
+const Wrapper = getJestMetadataAndApolloMocksWrapper({
+ apolloMocks: [],
+});
+
+describe('useObjectMetadataItemById', () => {
+ const opportunityObjectMetadata = generatedMockObjectMetadataItems.find(
+ (item) => item.nameSingular === 'opportunity',
+ );
+
+ if (!opportunityObjectMetadata) {
+ throw new Error('Opportunity object metadata not found');
+ }
+
+ it('should return correct properties', async () => {
+ const { result } = renderHook(
+ () =>
+ useObjectMetadataItemById({
+ objectId: opportunityObjectMetadata.id,
+ }),
+ {
+ wrapper: Wrapper,
+ },
+ );
+
+ const { objectMetadataItem } = result.current;
+
+ expect(objectMetadataItem?.id).toBe(opportunityObjectMetadata.id);
+ });
+
+ it('should return null when invalid ID is provided', async () => {
+ const { result } = renderHook(
+ () => useObjectMetadataItemById({ objectId: 'invalid-id' }),
+ {
+ wrapper: Wrapper,
+ },
+ );
+
+ const { objectMetadataItem } = result.current;
+
+ expect(objectMetadataItem).toBeNull();
+ });
+});
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts
index 75f9f5a2e489..3f39f89279cb 100644
--- a/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/useFieldMetadataItem.ts
@@ -1,6 +1,6 @@
import { useDeleteOneRelationMetadataItem } from '@/object-metadata/hooks/useDeleteOneRelationMetadataItem';
-import { Field } from '~/generated/graphql';
import { FieldMetadataType } from '~/generated-metadata/graphql';
+import { Field } from '~/generated/graphql';
import { FieldMetadataItem } from '../types/FieldMetadataItem';
import { formatFieldMetadataItemInput } from '../utils/formatFieldMetadataItemInput';
@@ -18,7 +18,13 @@ export const useFieldMetadataItem = () => {
const createMetadataField = (
input: Pick<
Field,
- 'label' | 'icon' | 'description' | 'defaultValue' | 'type' | 'options'
+ | 'label'
+ | 'icon'
+ | 'description'
+ | 'defaultValue'
+ | 'type'
+ | 'options'
+ | 'settings'
> & {
objectMetadataId: string;
},
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useFindManyObjectMetadataItems.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useFindManyObjectMetadataItems.ts
index 4bf7c29d9298..884dfbcff695 100644
--- a/packages/twenty-front/src/modules/object-metadata/hooks/useFindManyObjectMetadataItems.ts
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/useFindManyObjectMetadataItems.ts
@@ -1,5 +1,5 @@
-import { useMemo } from 'react';
import { useQuery } from '@apollo/client';
+import { useMemo } from 'react';
import { SnackBarVariant } from '@/ui/feedback/snack-bar-manager/components/SnackBar';
import { useSnackBar } from '@/ui/feedback/snack-bar-manager/hooks/useSnackBar';
@@ -41,12 +41,9 @@ export const useFindManyObjectMetadataItems = ({
skip: skip || !apolloMetadataClient,
onError: (error) => {
logError('useFindManyObjectMetadataItems error : ' + error);
- enqueueSnackBar(
- `Error during useFindManyObjectMetadataItems, ${error.message}`,
- {
- variant: SnackBarVariant.Error,
- },
- );
+ enqueueSnackBar(`${error.message}`, {
+ variant: SnackBarVariant.Error,
+ });
},
});
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useGetStandardObjectIcon.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useGetStandardObjectIcon.ts
new file mode 100644
index 000000000000..92b014d730a7
--- /dev/null
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/useGetStandardObjectIcon.ts
@@ -0,0 +1,37 @@
+import { useTheme } from '@emotion/react';
+import { IconCheckbox, IconComponent, IconNotes } from 'twenty-ui';
+
+export const useGetStandardObjectIcon = (objectNameSingular: string) => {
+ const theme = useTheme();
+
+ const getIconForObjectType = (
+ objectType: string,
+ ): IconComponent | undefined => {
+ switch (objectType) {
+ case 'note':
+ return IconNotes;
+ case 'task':
+ return IconCheckbox;
+ default:
+ return undefined;
+ }
+ };
+
+ const getIconColorForObjectType = (objectType: string): string => {
+ switch (objectType) {
+ case 'note':
+ return theme.color.yellow;
+ case 'task':
+ return theme.color.blue;
+ default:
+ return 'currentColor';
+ }
+ };
+
+ const { Icon, IconColor } = {
+ Icon: getIconForObjectType(objectNameSingular),
+ IconColor: getIconColorForObjectType(objectNameSingular),
+ };
+
+ return { Icon, IconColor };
+};
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useNonSystemActiveObjectMetadataItems.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useNonSystemActiveObjectMetadataItems.ts
new file mode 100644
index 000000000000..a33b80e1d125
--- /dev/null
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/useNonSystemActiveObjectMetadataItems.ts
@@ -0,0 +1,20 @@
+import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
+import { useMemo } from 'react';
+import { useRecoilValue } from 'recoil';
+
+export const useNonSystemActiveObjectMetadataItems = () => {
+ const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
+
+ const nonSystemActiveObjectMetadataItems = useMemo(
+ () =>
+ objectMetadataItems.filter(
+ (objectMetadataItem) =>
+ !objectMetadataItem.isSystem && objectMetadataItem.isActive,
+ ),
+ [objectMetadataItems],
+ );
+
+ return {
+ nonSystemActiveObjectMetadataItems,
+ };
+};
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useObjectIsRemote.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useObjectIsRemote.ts
deleted file mode 100644
index 0f3295dc5c29..000000000000
--- a/packages/twenty-front/src/modules/object-metadata/hooks/useObjectIsRemote.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
-
-export const useObjectIsRemote = (objectMetadataItem: ObjectMetadataItem) => {
- return objectMetadataItem.isRemote ?? false;
-};
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useObjectMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useObjectMetadataItem.ts
index 5659c41a72fd..0a8d3e8600a0 100644
--- a/packages/twenty-front/src/modules/object-metadata/hooks/useObjectMetadataItem.ts
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/useObjectMetadataItem.ts
@@ -1,40 +1,23 @@
import { useRecoilValue } from 'recoil';
-import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
import { ObjectMetadataItemNotFoundError } from '@/object-metadata/errors/ObjectMetadataNotFoundError';
import { objectMetadataItemFamilySelector } from '@/object-metadata/states/objectMetadataItemFamilySelector';
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
-import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
import { isDefined } from '~/utils/isDefined';
-import { WorkspaceActivationStatus } from '~/generated/graphql';
import { ObjectMetadataItemIdentifier } from '../types/ObjectMetadataItemIdentifier';
export const useObjectMetadataItem = ({
objectNameSingular,
}: ObjectMetadataItemIdentifier) => {
- const currentWorkspace = useRecoilValue(currentWorkspaceState);
-
- // Todo: deprecate this logic as mocked objectMetadataItems are load in ObjectMetadataItemsLoadEffect anyway
- const mockObjectMetadataItems = getObjectMetadataItemsMock();
-
- let objectMetadataItem = useRecoilValue(
+ const objectMetadataItem = useRecoilValue(
objectMetadataItemFamilySelector({
objectName: objectNameSingular,
objectNameType: 'singular',
}),
);
- let objectMetadataItems = useRecoilValue(objectMetadataItemsState);
-
- if (currentWorkspace?.activationStatus !== WorkspaceActivationStatus.Active) {
- objectMetadataItem =
- mockObjectMetadataItems.find(
- (objectMetadataItem) =>
- objectMetadataItem.nameSingular === objectNameSingular,
- ) ?? null;
- objectMetadataItems = mockObjectMetadataItems;
- }
+ const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
if (!isDefined(objectMetadataItem)) {
throw new ObjectMetadataItemNotFoundError(
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useObjectMetadataItemById.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useObjectMetadataItemById.ts
new file mode 100644
index 000000000000..72c559364226
--- /dev/null
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/useObjectMetadataItemById.ts
@@ -0,0 +1,26 @@
+import { useRecoilValue } from 'recoil';
+
+import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
+import { isDefined } from '~/utils/isDefined';
+
+export const useObjectMetadataItemById = ({
+ objectId,
+}: {
+ objectId: string | null;
+}) => {
+ const objectMetadataItems = useRecoilValue(objectMetadataItemsState);
+
+ const objectMetadataItem = objectMetadataItems.find(
+ (objectMetadataItem) => objectMetadataItem.id === objectId,
+ );
+
+ if (!isDefined(objectMetadataItem)) {
+ return {
+ objectMetadataItem: null,
+ };
+ }
+
+ return {
+ objectMetadataItem,
+ };
+};
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useObjectNamePluralFromSingular.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useObjectNamePluralFromSingular.ts
index ad9d8641b916..88ac0baab21d 100644
--- a/packages/twenty-front/src/modules/object-metadata/hooks/useObjectNamePluralFromSingular.ts
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/useObjectNamePluralFromSingular.ts
@@ -2,8 +2,8 @@ import { useRecoilValue } from 'recoil';
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
import { objectMetadataItemFamilySelector } from '@/object-metadata/states/objectMetadataItemFamilySelector';
-import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
import { WorkspaceActivationStatus } from '~/generated/graphql';
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
import { isDefined } from '~/utils/isDefined';
export const useObjectNamePluralFromSingular = ({
@@ -12,7 +12,6 @@ export const useObjectNamePluralFromSingular = ({
objectNameSingular: string;
}) => {
const currentWorkspace = useRecoilValue(currentWorkspaceState);
- const mockObjectMetadataItems = getObjectMetadataItemsMock();
let objectMetadataItem = useRecoilValue(
objectMetadataItemFamilySelector({
@@ -23,7 +22,7 @@ export const useObjectNamePluralFromSingular = ({
if (currentWorkspace?.activationStatus !== WorkspaceActivationStatus.Active) {
objectMetadataItem =
- mockObjectMetadataItems.find(
+ generatedMockObjectMetadataItems.find(
(objectMetadataItem) =>
objectMetadataItem.nameSingular === objectNameSingular,
) ?? null;
diff --git a/packages/twenty-front/src/modules/object-metadata/hooks/useObjectNameSingularFromPlural.ts b/packages/twenty-front/src/modules/object-metadata/hooks/useObjectNameSingularFromPlural.ts
index 3b4a244942d5..2e5127d8fcd9 100644
--- a/packages/twenty-front/src/modules/object-metadata/hooks/useObjectNameSingularFromPlural.ts
+++ b/packages/twenty-front/src/modules/object-metadata/hooks/useObjectNameSingularFromPlural.ts
@@ -2,8 +2,8 @@ import { useRecoilValue } from 'recoil';
import { currentWorkspaceState } from '@/auth/states/currentWorkspaceState';
import { objectMetadataItemFamilySelector } from '@/object-metadata/states/objectMetadataItemFamilySelector';
-import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
import { WorkspaceActivationStatus } from '~/generated/graphql';
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
import { isDefined } from '~/utils/isDefined';
export const useObjectNameSingularFromPlural = ({
@@ -13,8 +13,6 @@ export const useObjectNameSingularFromPlural = ({
}) => {
const currentWorkspace = useRecoilValue(currentWorkspaceState);
- const mockObjectMetadataItems = getObjectMetadataItemsMock();
-
let objectMetadataItem = useRecoilValue(
objectMetadataItemFamilySelector({
objectName: objectNamePlural,
@@ -24,7 +22,7 @@ export const useObjectNameSingularFromPlural = ({
if (currentWorkspace?.activationStatus !== WorkspaceActivationStatus.Active) {
objectMetadataItem =
- mockObjectMetadataItems.find(
+ generatedMockObjectMetadataItems.find(
(objectMetadataItem) =>
objectMetadataItem.namePlural === objectNamePlural,
) ?? null;
diff --git a/packages/twenty-front/src/modules/object-metadata/types/CoreObjectNameSingular.ts b/packages/twenty-front/src/modules/object-metadata/types/CoreObjectNameSingular.ts
index 68b0d6ebf6cd..03164e28ac27 100644
--- a/packages/twenty-front/src/modules/object-metadata/types/CoreObjectNameSingular.ts
+++ b/packages/twenty-front/src/modules/object-metadata/types/CoreObjectNameSingular.ts
@@ -32,4 +32,5 @@ export enum CoreObjectNameSingular {
Workflow = 'workflow',
MessageChannelMessageAssociation = 'messageChannelMessageAssociation',
WorkflowVersion = 'workflowVersion',
+ WorkflowRun = 'workflowRun',
}
diff --git a/packages/twenty-front/src/modules/object-metadata/types/FieldMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/types/FieldMetadataItem.ts
index ed4529ff1102..8a403a55a379 100644
--- a/packages/twenty-front/src/modules/object-metadata/types/FieldMetadataItem.ts
+++ b/packages/twenty-front/src/modules/object-metadata/types/FieldMetadataItem.ts
@@ -17,7 +17,7 @@ export type FieldMetadataItemOption = {
export type FieldMetadataItem = Omit<
Field,
- '__typename' | 'defaultValue' | 'options' | 'settings' | 'relationDefinition'
+ '__typename' | 'defaultValue' | 'options' | 'relationDefinition'
> & {
__typename?: string;
defaultValue?: any;
@@ -36,4 +36,7 @@ export type FieldMetadataItem = Omit<
'id' | 'nameSingular' | 'namePlural'
>;
} | null;
+ settings?: {
+ displayAsRelativeDate?: boolean;
+ };
};
diff --git a/packages/twenty-front/src/modules/object-metadata/types/IndexFieldMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/types/IndexFieldMetadataItem.ts
new file mode 100644
index 000000000000..c6b30db7a8dc
--- /dev/null
+++ b/packages/twenty-front/src/modules/object-metadata/types/IndexFieldMetadataItem.ts
@@ -0,0 +1,5 @@
+import { IndexField as GeneratedIndexField } from '~/generated-metadata/graphql';
+
+export type IndexFieldMetadataItem = Omit & {
+ __typename?: string;
+};
diff --git a/packages/twenty-front/src/modules/object-metadata/types/IndexMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/types/IndexMetadataItem.ts
new file mode 100644
index 000000000000..33e5260dd49c
--- /dev/null
+++ b/packages/twenty-front/src/modules/object-metadata/types/IndexMetadataItem.ts
@@ -0,0 +1,10 @@
+import { IndexFieldMetadataItem } from '@/object-metadata/types/IndexFieldMetadataItem';
+import { Index as GeneratedIndex } from '~/generated-metadata/graphql';
+
+export type IndexMetadataItem = Omit<
+ GeneratedIndex,
+ '__typename' | 'indexFieldMetadatas' | 'objectMetadata'
+> & {
+ __typename?: string;
+ indexFieldMetadatas: IndexFieldMetadataItem[];
+};
diff --git a/packages/twenty-front/src/modules/object-metadata/types/ObjectMetadataItem.ts b/packages/twenty-front/src/modules/object-metadata/types/ObjectMetadataItem.ts
index 9bc2cfaa0a82..61c0fc495fea 100644
--- a/packages/twenty-front/src/modules/object-metadata/types/ObjectMetadataItem.ts
+++ b/packages/twenty-front/src/modules/object-metadata/types/ObjectMetadataItem.ts
@@ -1,11 +1,13 @@
import { Object as GeneratedObject } from '~/generated-metadata/graphql';
+import { IndexMetadataItem } from '@/object-metadata/types/IndexMetadataItem';
import { FieldMetadataItem } from './FieldMetadataItem';
export type ObjectMetadataItem = Omit<
GeneratedObject,
- '__typename' | 'fields' | 'dataSourceId'
+ '__typename' | 'fields' | 'dataSourceId' | 'indexMetadatas'
> & {
__typename?: string;
fields: FieldMetadataItem[];
+ indexMetadatas: IndexMetadataItem[];
};
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/__tests__/getObjectMetadataItemBySingularName.test.ts b/packages/twenty-front/src/modules/object-metadata/utils/__tests__/getObjectMetadataItemBySingularName.test.ts
index 07e88a26f066..92a7e414b822 100644
--- a/packages/twenty-front/src/modules/object-metadata/utils/__tests__/getObjectMetadataItemBySingularName.test.ts
+++ b/packages/twenty-front/src/modules/object-metadata/utils/__tests__/getObjectMetadataItemBySingularName.test.ts
@@ -1,14 +1,12 @@
import { getObjectMetadataItemByNameSingular } from '@/object-metadata/utils/getObjectMetadataItemBySingularName';
-import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
-
-const mockObjectMetadataItems = getObjectMetadataItemsMock();
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
describe('getObjectMetadataItemBySingularName', () => {
it('should work as expected', () => {
- const firstObjectMetadataItem = mockObjectMetadataItems[0];
+ const firstObjectMetadataItem = generatedMockObjectMetadataItems[0];
const foundObjectMetadataItem = getObjectMetadataItemByNameSingular({
- objectMetadataItems: mockObjectMetadataItems,
+ objectMetadataItems: generatedMockObjectMetadataItems,
objectNameSingular: firstObjectMetadataItem.nameSingular,
});
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/__tests__/getObjectOrderByField.test.ts b/packages/twenty-front/src/modules/object-metadata/utils/__tests__/getObjectOrderByField.test.ts
index baa61c853751..cc5691412fd3 100644
--- a/packages/twenty-front/src/modules/object-metadata/utils/__tests__/getObjectOrderByField.test.ts
+++ b/packages/twenty-front/src/modules/object-metadata/utils/__tests__/getObjectOrderByField.test.ts
@@ -1,11 +1,9 @@
-import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
import { getOrderByFieldForObjectMetadataItem } from '@/object-metadata/utils/getObjectOrderByField';
-
-const mockObjectMetadataItems = getObjectMetadataItemsMock();
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
describe('getObjectOrderByField', () => {
it('should work as expected', () => {
- const objectMetadataItem = mockObjectMetadataItems.find(
+ const objectMetadataItem = generatedMockObjectMetadataItems.find(
(item) => item.nameSingular === 'person',
)!;
const res = getOrderByFieldForObjectMetadataItem(objectMetadataItem);
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/__tests__/getObjectSlug.test.ts b/packages/twenty-front/src/modules/object-metadata/utils/__tests__/getObjectSlug.test.ts
index fdd16fdb1afa..526c6fe47635 100644
--- a/packages/twenty-front/src/modules/object-metadata/utils/__tests__/getObjectSlug.test.ts
+++ b/packages/twenty-front/src/modules/object-metadata/utils/__tests__/getObjectSlug.test.ts
@@ -1,11 +1,9 @@
-import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
import { getObjectSlug } from '@/object-metadata/utils/getObjectSlug';
-
-const mockObjectMetadataItems = getObjectMetadataItemsMock();
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
describe('getObjectSlug', () => {
it('should work as expected', () => {
- const objectMetadataItem = mockObjectMetadataItems.find(
+ const objectMetadataItem = generatedMockObjectMetadataItems.find(
(item) => item.nameSingular === 'person',
)!;
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/__tests__/isObjectMetadataAvailableForRelation.test.ts b/packages/twenty-front/src/modules/object-metadata/utils/__tests__/isObjectMetadataAvailableForRelation.test.ts
index e2dff5d09609..ece3ae39de06 100644
--- a/packages/twenty-front/src/modules/object-metadata/utils/__tests__/isObjectMetadataAvailableForRelation.test.ts
+++ b/packages/twenty-front/src/modules/object-metadata/utils/__tests__/isObjectMetadataAvailableForRelation.test.ts
@@ -1,11 +1,9 @@
-import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
import { isObjectMetadataAvailableForRelation } from '@/object-metadata/utils/isObjectMetadataAvailableForRelation';
-
-const mockObjectMetadataItems = getObjectMetadataItemsMock();
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
describe('isObjectMetadataAvailableForRelation', () => {
it('should work as expected', () => {
- const objectMetadataItem = mockObjectMetadataItems.find(
+ const objectMetadataItem = generatedMockObjectMetadataItems.find(
(item) => item.nameSingular === 'person',
)!;
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/__tests__/mapFieldMetadataToGraphQLQuery.test.tsx b/packages/twenty-front/src/modules/object-metadata/utils/__tests__/mapFieldMetadataToGraphQLQuery.test.tsx
index da578f8973f8..7208246e7e49 100644
--- a/packages/twenty-front/src/modules/object-metadata/utils/__tests__/mapFieldMetadataToGraphQLQuery.test.tsx
+++ b/packages/twenty-front/src/modules/object-metadata/utils/__tests__/mapFieldMetadataToGraphQLQuery.test.tsx
@@ -1,10 +1,8 @@
-import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
import { mapFieldMetadataToGraphQLQuery } from '@/object-metadata/utils/mapFieldMetadataToGraphQLQuery';
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
import { normalizeGQLField } from '~/utils/normalizeGQLField';
-const mockObjectMetadataItems = getObjectMetadataItemsMock();
-
-const personObjectMetadataItem = mockObjectMetadataItems.find(
+const personObjectMetadataItem = generatedMockObjectMetadataItems.find(
(item) => item.nameSingular === 'person',
);
@@ -15,7 +13,7 @@ if (!personObjectMetadataItem) {
describe('mapFieldMetadataToGraphQLQuery', () => {
it('should return fieldName if simpleValue', async () => {
const res = mapFieldMetadataToGraphQLQuery({
- objectMetadataItems: mockObjectMetadataItems,
+ objectMetadataItems: generatedMockObjectMetadataItems,
field: personObjectMetadataItem.fields.find(
(field) => field.name === 'id',
)!,
@@ -24,7 +22,7 @@ describe('mapFieldMetadataToGraphQLQuery', () => {
});
it('should return fieldName if composite', async () => {
const res = mapFieldMetadataToGraphQLQuery({
- objectMetadataItems: mockObjectMetadataItems,
+ objectMetadataItems: generatedMockObjectMetadataItems,
field: personObjectMetadataItem.fields.find(
(field) => field.name === 'name',
)!,
@@ -40,7 +38,7 @@ describe('mapFieldMetadataToGraphQLQuery', () => {
it('should return non relation subFields if relation', async () => {
const res = mapFieldMetadataToGraphQLQuery({
- objectMetadataItems: mockObjectMetadataItems,
+ objectMetadataItems: generatedMockObjectMetadataItems,
field: personObjectMetadataItem.fields.find(
(field) => field.name === 'company',
)!,
@@ -96,7 +94,7 @@ idealCustomerProfile
it('should return only return relation subFields that are in recordGqlFields', async () => {
const res = mapFieldMetadataToGraphQLQuery({
- objectMetadataItems: mockObjectMetadataItems,
+ objectMetadataItems: generatedMockObjectMetadataItems,
relationrecordFields: {
accountOwner: { id: true, name: true },
people: true,
@@ -197,6 +195,10 @@ name
lastName
}
phone
+{
+ primaryPhoneNumber
+ primaryPhoneCountryCode
+}
linkedinLink
{
primaryLinkUrl
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/__tests__/mapObjectMetadataToGraphQLQuery.test.tsx b/packages/twenty-front/src/modules/object-metadata/utils/__tests__/mapObjectMetadataToGraphQLQuery.test.tsx
index 5a00909648f2..d2650b69807f 100644
--- a/packages/twenty-front/src/modules/object-metadata/utils/__tests__/mapObjectMetadataToGraphQLQuery.test.tsx
+++ b/packages/twenty-front/src/modules/object-metadata/utils/__tests__/mapObjectMetadataToGraphQLQuery.test.tsx
@@ -1,10 +1,8 @@
-import { getObjectMetadataItemsMock } from '@/object-metadata/utils/getObjectMetadataItemsMock';
import { mapObjectMetadataToGraphQLQuery } from '@/object-metadata/utils/mapObjectMetadataToGraphQLQuery';
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
import { normalizeGQLQuery } from '~/utils/normalizeGQLQuery';
-const mockObjectMetadataItems = getObjectMetadataItemsMock();
-
-const personObjectMetadataItem = mockObjectMetadataItems.find(
+const personObjectMetadataItem = generatedMockObjectMetadataItems.find(
(item) => item.nameSingular === 'person',
);
@@ -15,7 +13,7 @@ if (!personObjectMetadataItem) {
describe('mapObjectMetadataToGraphQLQuery', () => {
it('should query only specified recordGqlFields', async () => {
const res = mapObjectMetadataToGraphQLQuery({
- objectMetadataItems: mockObjectMetadataItems,
+ objectMetadataItems: generatedMockObjectMetadataItems,
objectMetadataItem: personObjectMetadataItem,
recordGqlFields: {
company: true,
@@ -46,7 +44,11 @@ describe('mapObjectMetadataToGraphQLQuery', () => {
primaryEmail
additionalEmails
}
- phone
+ phone
+ {
+ primaryPhoneNumber
+ primaryPhoneCountryCode
+ }
createdAt
avatarUrl
jobTitle
@@ -118,7 +120,7 @@ describe('mapObjectMetadataToGraphQLQuery', () => {
it('should load only specified operation fields nested', async () => {
const res = mapObjectMetadataToGraphQLQuery({
- objectMetadataItems: mockObjectMetadataItems,
+ objectMetadataItems: generatedMockObjectMetadataItems,
objectMetadataItem: personObjectMetadataItem,
recordGqlFields: { company: { id: true }, id: true, name: true },
});
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemAsFieldDefinition.ts b/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemAsFieldDefinition.ts
index 7d26d1150410..f372cd2eb3ac 100644
--- a/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemAsFieldDefinition.ts
+++ b/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemAsFieldDefinition.ts
@@ -37,6 +37,7 @@ export const formatFieldMetadataItemAsFieldDefinition = ({
targetFieldMetadataName:
field.relationDefinition?.targetFieldMetadata?.name ?? '',
options: field.options,
+ settings: field.settings,
isNullable: field.isNullable,
};
@@ -53,5 +54,6 @@ export const formatFieldMetadataItemAsFieldDefinition = ({
metadata: fieldDefintionMetadata,
type: field.type,
}),
+ settings: field.settings,
};
};
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemInput.ts b/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemInput.ts
index 15bc319a93f3..5900beed1faa 100644
--- a/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemInput.ts
+++ b/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemInput.ts
@@ -5,7 +5,13 @@ export const formatFieldMetadataItemInput = (
input: Partial<
Pick<
FieldMetadataItem,
- 'type' | 'label' | 'defaultValue' | 'icon' | 'description' | 'options'
+ | 'type'
+ | 'label'
+ | 'defaultValue'
+ | 'icon'
+ | 'description'
+ | 'options'
+ | 'settings'
>
>,
) => {
@@ -18,5 +24,6 @@ export const formatFieldMetadataItemInput = (
label,
name: label ? computeMetadataNameFromLabelOrThrow(label) : undefined,
options: input.options,
+ settings: input.settings,
};
};
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions.ts b/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions.ts
index 7ebeb0afee26..a110acdceba4 100644
--- a/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions.ts
+++ b/packages/twenty-front/src/modules/object-metadata/utils/formatFieldMetadataItemsAsFilterDefinitions.ts
@@ -26,10 +26,8 @@ export const formatFieldMetadataItemsAsFilterDefinitions = ({
FieldMetadataType.DateTime,
FieldMetadataType.Date,
FieldMetadataType.Text,
- FieldMetadataType.Email,
FieldMetadataType.Emails,
FieldMetadataType.Number,
- FieldMetadataType.Link,
FieldMetadataType.Links,
FieldMetadataType.FullName,
FieldMetadataType.Address,
@@ -68,8 +66,6 @@ export const getFilterTypeFromFieldType = (fieldType: FieldMetadataType) => {
return 'DATE_TIME';
case FieldMetadataType.Date:
return 'DATE';
- case FieldMetadataType.Link:
- return 'LINK';
case FieldMetadataType.Links:
return 'LINKS';
case FieldMetadataType.FullName:
@@ -78,12 +74,8 @@ export const getFilterTypeFromFieldType = (fieldType: FieldMetadataType) => {
return 'NUMBER';
case FieldMetadataType.Currency:
return 'CURRENCY';
- case FieldMetadataType.Email:
- return 'EMAIL';
case FieldMetadataType.Emails:
return 'EMAILS';
- case FieldMetadataType.Phone:
- return 'PHONE';
case FieldMetadataType.Phones:
return 'PHONES';
case FieldMetadataType.Relation:
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/getDisabledFieldMetadataItems.ts b/packages/twenty-front/src/modules/object-metadata/utils/getDisabledFieldMetadataItems.ts
deleted file mode 100644
index 52f781ccc203..000000000000
--- a/packages/twenty-front/src/modules/object-metadata/utils/getDisabledFieldMetadataItems.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
-
-export const getDisabledFieldMetadataItems = (
- objectMetadataItem: Pick,
-) =>
- objectMetadataItem.fields.filter(
- (fieldMetadataItem) =>
- !fieldMetadataItem.isActive && !fieldMetadataItem.isSystem,
- );
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/getObjectMetadataItemsMock.ts b/packages/twenty-front/src/modules/object-metadata/utils/getObjectMetadataItemsMock.ts
deleted file mode 100644
index 36612a698995..000000000000
--- a/packages/twenty-front/src/modules/object-metadata/utils/getObjectMetadataItemsMock.ts
+++ /dev/null
@@ -1,13353 +0,0 @@
-import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
-
-export const COMPANY_LABEL_IDENTIFIER_FIELD_METADATA_ID = '39403bee-314b-4f14-bc91-70d500397517';
-export const COMPANY_OBJECT_METADATA_ID = 'f1231579-8e7d-4b84-9a60-41844902f2c4';
-
-export const getObjectMetadataItemsMock = () => {
- const mockArray = [
- {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "person",
- "namePlural": "people",
- "labelSingular": "Person",
- "labelPlural": "People",
- "description": "A person",
- "icon": "IconUser",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "f01f1b33-0a27-49a7-b119-5f9bd58477a5",
- "imageIdentifierFieldMetadataId": "ef9ff5ea-8aff-4d91-9ab6-6dc38d3eccbe",
- "fields": [
- {
- "__typename": "field",
- "id": "102963b7-3e77-4293-a1e6-1ab59a02b663",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6697751c-3150-483b-8167-c5bc1d620c10",
- "type": "UUID",
- "name": "myCustomObjectId",
- "label": "myCustomObject Foreign Key",
- "description": null,
- "icon": null,
- "isCustom": true,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T17:10:31.391Z",
- "updatedAt": "2024-08-05T17:10:31.391Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "e1ecbeb4-76cb-4f9a-8829-ac0665854c69",
- "type": "RELATION",
- "name": "pointOfContactForOpportunities",
- "label": "Linked Opportunities",
- "description": "List of opportunities for which that person is the point of contact",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "3e039f55-e535-406a-8a80-185123910b7a",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "e1ecbeb4-76cb-4f9a-8829-ac0665854c69",
- "name": "pointOfContactForOpportunities"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "b95b3f38-9fc2-4d7e-a823-7791cf13d089",
- "nameSingular": "opportunity",
- "namePlural": "opportunities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "dc7898b0-d2b7-4910-bedc-a6fe8eb4c41e",
- "name": "pointOfContact"
- }
- }
- },
- {
- "__typename": "field",
- "id": "194ff398-99f9-4cbb-b87a-e44408f9c1ed",
- "type": "PHONE",
- "name": "whatsapp",
- "label": "Whatsapp",
- "description": "Contact's Whatsapp Number",
- "icon": "IconBrandWhatsapp",
- "isCustom": true,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:39:01.956Z",
- "updatedAt": "2024-08-05T16:39:01.956Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "d2729410-3db8-44b0-b88f-fa3ba9b10650",
- "type": "LINKS",
- "name": "linkedinLink",
- "label": "Linkedin",
- "description": "Contactโs Linkedin account",
- "icon": "IconBrandLinkedin",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": {
- "primaryLinkUrl": "''",
- "secondaryLinks": null,
- "primaryLinkLabel": "''"
- },
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "f01f1b33-0a27-49a7-b119-5f9bd58477a5",
- "type": "FULL_NAME",
- "name": "name",
- "label": "Name",
- "description": "Contactโs name",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": {
- "lastName": "''",
- "firstName": "''"
- },
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "a6d4fe23-a569-4cbb-a68c-96e30a0b0d5b",
- "type": "EMAIL",
- "name": "email",
- "label": "Email",
- "description": "Contactโs Email",
- "icon": "IconMail",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "55a856ae-0a48-4ff6-874d-b630818c8cea",
- "type": "POSITION",
- "name": "position",
- "label": "Position",
- "description": "Person record Position",
- "icon": "IconHierarchy2",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "d44bf743-b557-47d4-9341-04114fd05d52",
- "type": "RELATION",
- "name": "calendarEventParticipants",
- "label": "Calendar Event Participants",
- "description": "Calendar Event Participants",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "20d67b64-4e67-44a1-81c7-116c0c8c6368",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "d44bf743-b557-47d4-9341-04114fd05d52",
- "name": "calendarEventParticipants"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "2128a43e-af47-44bf-b7e9-5d00ddd27a99",
- "nameSingular": "calendarEventParticipant",
- "namePlural": "calendarEventParticipants"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "a7eb211d-4481-4269-99d7-cf2183b45598",
- "name": "person"
- }
- }
- },
- {
- "__typename": "field",
- "id": "9b018bba-687b-4850-9e0e-c192d3b5977d",
- "type": "RELATION",
- "name": "activityTargets",
- "label": "Activities",
- "description": "Activities tied to the contact",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "9a3a145b-6d06-4892-84d4-af523f40c58d",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "9b018bba-687b-4850-9e0e-c192d3b5977d",
- "name": "activityTargets"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "648268ca-94bf-418e-853c-56d0f51472b3",
- "nameSingular": "activityTarget",
- "namePlural": "activityTargets"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "940d1664-b17c-4f66-820b-abfec70adaa5",
- "name": "person"
- }
- }
- },
- {
- "__typename": "field",
- "id": "4c9ba269-244f-4768-a52d-9b1ffbe3339f",
- "type": "RELATION",
- "name": "taskTargets",
- "label": "Tasks",
- "description": "Tasks tied to the contact",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "182b32c3-9ee9-4a65-937b-d9035ab65300",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "4c9ba269-244f-4768-a52d-9b1ffbe3339f",
- "name": "taskTargets"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "77d124cc-049a-44f9-ab59-56e3dd55bb69",
- "nameSingular": "taskTarget",
- "namePlural": "taskTargets"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "fc1a31f8-6e1c-4ce1-b6ff-80d1cd605e58",
- "name": "person"
- }
- }
- },
- {
- "__typename": "field",
- "id": "e41d7b2e-3e60-4741-b410-a432b1a12b77",
- "type": "ACTOR",
- "name": "createdBy",
- "label": "Created by",
- "description": "The creator of the record",
- "icon": "IconCreativeCommonsSa",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": {
- "name": "''",
- "source": "'MANUAL'"
- },
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "ef9ff5ea-8aff-4d91-9ab6-6dc38d3eccbe",
- "type": "TEXT",
- "name": "avatarUrl",
- "label": "Avatar",
- "description": "Contactโs avatar",
- "icon": "IconFileUpload",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "c9d4cb92-7460-4bee-8ed7-0fbdca4ba546",
- "type": "TEXT",
- "name": "jobTitle",
- "label": "Job Title",
- "description": "Contactโs job title",
- "icon": "IconBriefcase",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "d1fb7174-82ab-4e31-8e1c-53036d0eefe2",
- "type": "LINKS",
- "name": "xLink",
- "label": "X",
- "description": "Contactโs X/Twitter account",
- "icon": "IconBrandX",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": {
- "primaryLinkUrl": "''",
- "secondaryLinks": null,
- "primaryLinkLabel": "''"
- },
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "ff809df8-9372-4345-9a73-393960c31950",
- "type": "RATING",
- "name": "performanceRating",
- "label": "Performance Rating",
- "description": "Person's Performance Rating",
- "icon": "IconStars",
- "isCustom": true,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:39:01.997Z",
- "updatedAt": "2024-08-05T16:39:01.997Z",
- "defaultValue": null,
- "options": [
- {
- "id": "d0d6de5e-0bf5-4cdd-a599-1f8005723f6e",
- "label": "1",
- "value": "RATING_1",
- "position": 0
- },
- {
- "id": "a0c86a34-6914-43b0-a7ab-9fb4f9b9641c",
- "label": "2",
- "value": "RATING_2",
- "position": 1
- },
- {
- "id": "750dd542-0172-42da-ae00-50423f0179d3",
- "label": "3",
- "value": "RATING_3",
- "position": 2
- },
- {
- "id": "8b935586-9844-49f1-ad92-3e633d613ede",
- "label": "4",
- "value": "RATING_4",
- "position": 3
- },
- {
- "id": "eab17ee7-5aa8-40b1-a431-34438ba6b54e",
- "label": "5",
- "value": "RATING_5",
- "position": 4
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6672a066-7a7f-44ae-bb5c-ae3a5e82d835",
- "type": "RELATION",
- "name": "company",
- "label": "Company",
- "description": "Contactโs company",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "0562d399-7053-4d7f-a415-cabfc889bd16",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "6672a066-7a7f-44ae-bb5c-ae3a5e82d835",
- "name": "company"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "48dba12f-4429-4ee2-9b3a-6df97c45141d",
- "name": "people"
- }
- }
- },
- {
- "__typename": "field",
- "id": "c08e6ba8-b7ef-4fa7-b199-c8e93045f8ee",
- "type": "RELATION",
- "name": "timelineActivities",
- "label": "Events",
- "description": "Events linked to the person",
- "icon": "IconTimelineEvent",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "ba3d762d-8fbf-45e5-a958-136a269a396d",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "c08e6ba8-b7ef-4fa7-b199-c8e93045f8ee",
- "name": "timelineActivities"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "94ef21ab-5eca-4c80-b378-2a207dcca2e4",
- "nameSingular": "timelineActivity",
- "namePlural": "timelineActivities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "69e1ecef-09d7-4b53-826e-f440ae72d2b7",
- "name": "person"
- }
- }
- },
- {
- "__typename": "field",
- "id": "1b21ef27-ba22-46ab-967e-f2d9f780bf8b",
- "type": "RELATION",
- "name": "attachments",
- "label": "Attachments",
- "description": "Attachments linked to the contact.",
- "icon": "IconFileImport",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "4b90ec4b-3199-4cea-9e8b-01498967bd9f",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "1b21ef27-ba22-46ab-967e-f2d9f780bf8b",
- "name": "attachments"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "9a53b4e1-bce2-4160-8ce3-028e14b2abb7",
- "nameSingular": "attachment",
- "namePlural": "attachments"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "df6ee118-1cb0-4b2e-8668-3693d4d87ae2",
- "name": "person"
- }
- }
- },
- {
- "__typename": "field",
- "id": "9fbf2632-6f28-400d-86d7-3cadfbbcf7ac",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "9c2bf923-304d-47b7-beb0-286e3229f6ac",
- "type": "TEXT",
- "name": "phone",
- "label": "Phone",
- "description": "Contactโs phone number",
- "icon": "IconPhone",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "4cd944c2-a252-42c2-93d3-c71d71b4587d",
- "type": "RELATION",
- "name": "favorites",
- "label": "Favorites",
- "description": "Favorites linked to the contact",
- "icon": "IconHeart",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "66551942-e576-4eb7-96c4-f78182f44491",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "4cd944c2-a252-42c2-93d3-c71d71b4587d",
- "name": "favorites"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "d19be8c8-2cf4-4c29-80ae-0d1841dc11c1",
- "nameSingular": "favorite",
- "namePlural": "favorites"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "b7caceaa-d49a-43c8-8b9b-10dc4298ade5",
- "name": "person"
- }
- }
- },
- {
- "__typename": "field",
- "id": "c817d48c-071b-47f0-917c-5e0717678c5c",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "22b21809-4eab-43a9-9ddc-0bbe04daffe3",
- "type": "TEXT",
- "name": "city",
- "label": "City",
- "description": "Contactโs city",
- "icon": "IconMap",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "4227c9a5-6dd3-4de0-9248-e62572afc92b",
- "type": "RELATION",
- "name": "messageParticipants",
- "label": "Message Participants",
- "description": "Message Participants",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "f26f3e6e-35bf-474a-9679-fbfbb009d67d",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "4227c9a5-6dd3-4de0-9248-e62572afc92b",
- "name": "messageParticipants"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "b889efa2-e58a-471c-b258-3c5ef2fa09e9",
- "nameSingular": "messageParticipant",
- "namePlural": "messageParticipants"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "3779c76a-30a8-45bc-a56a-6bfc084a9b29",
- "name": "person"
- }
- }
- },
- {
- "__typename": "field",
- "id": "14c3ddf2-a50b-40c3-9f93-6f3108c0dd72",
- "type": "UUID",
- "name": "companyId",
- "label": "Company id (foreign key)",
- "description": "Contactโs company id foreign key",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "9048daf8-bd6f-4c83-8887-14c764ec0053",
- "type": "TEXT",
- "name": "intro",
- "label": "Intro",
- "description": "Contact's Intro",
- "icon": "IconNote",
- "isCustom": true,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:39:01.936Z",
- "updatedAt": "2024-08-05T16:39:01.936Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "1c1c7ffc-3a45-4069-996a-bdfa8f46b037",
- "type": "RELATION",
- "name": "noteTargets",
- "label": "Notes",
- "description": "Notes tied to the contact",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "9d20f0c0-e37b-48ca-bc45-da16461aa547",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "1c1c7ffc-3a45-4069-996a-bdfa8f46b037",
- "name": "noteTargets"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "bd4e44a0-4b0d-4392-b0c9-d6c8684e3d44",
- "nameSingular": "noteTarget",
- "namePlural": "noteTargets"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "2f2fc7fb-51c5-4084-8d97-13b43b49c68a",
- "name": "person"
- }
- }
- },
- {
- "__typename": "field",
- "id": "f7002609-5760-4ae6-ba29-a8b9066b95de",
- "type": "RELATION",
- "name": "myCustomObject",
- "label": "myCustomObject",
- "description": null,
- "icon": "IconUser",
- "isCustom": true,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T17:10:31.391Z",
- "updatedAt": "2024-08-05T17:10:31.391Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "27f9741d-f967-4b75-affa-240f0f5f8d77",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "f7002609-5760-4ae6-ba29-a8b9066b95de",
- "name": "myCustomObject"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "56dffccc-daf8-4c49-8919-f19787f07846",
- "nameSingular": "myCustomObject",
- "namePlural": "myCustomObjects"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "23006c79-19fe-4148-9ee4-6db039ebc6fb",
- "name": "people"
- }
- }
- },
- {
- "__typename": "field",
- "id": "fdcffad9-a55c-4a74-9d3e-e0052cb3454e",
- "type": "MULTI_SELECT",
- "name": "workPrefereance",
- "label": "Work Preference",
- "description": "Person's Work Preference",
- "icon": "IconHome",
- "isCustom": true,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:39:01.977Z",
- "updatedAt": "2024-08-05T16:39:01.977Z",
- "defaultValue": null,
- "options": [
- {
- "id": "05ae5e3e-80bb-4a89-8539-de88f875384e",
- "color": "green",
- "label": "On-Site",
- "value": "ON_SITE",
- "position": 0
- },
- {
- "id": "fa7fb51a-3c52-48db-ac7c-ba23daed31cc",
- "color": "turquoise",
- "label": "Hybrid",
- "value": "HYBRID",
- "position": 1
- },
- {
- "id": "c29d7f0e-f82b-4bff-973a-5081f6d60a39",
- "color": "sky",
- "label": "Remote Work",
- "value": "REMOTE_WORK",
- "position": 2
- }
- ],
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "f62992f2-80ef-477c-ae60-fc7a862b0f4a",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "note",
- "namePlural": "notes",
- "labelSingular": "Note",
- "labelPlural": "Notes",
- "description": "A note",
- "icon": "IconNotes",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "2be5c772-b9f3-4851-9d9e-8990f81c475e",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "6c2c95b9-8e58-4956-a796-926fec68c67a",
- "type": "ACTOR",
- "name": "createdBy",
- "label": "Created by",
- "description": "The creator of the record",
- "icon": "IconCreativeCommonsSa",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": {
- "name": "''",
- "source": "'MANUAL'"
- },
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "854f4b18-7f4a-458a-b4b8-47ab09478625",
- "type": "POSITION",
- "name": "position",
- "label": "Position",
- "description": "Note record position",
- "icon": "IconHierarchy2",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "eb26a816-6dbd-4128-9a5f-fe92dd63ba55",
- "type": "RICH_TEXT",
- "name": "body",
- "label": "Body",
- "description": "Note body",
- "icon": "IconFilePencil",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "383d3f90-d691-4487-a13d-e80c50fb756e",
- "type": "RELATION",
- "name": "timelineActivities",
- "label": "Timeline Activities",
- "description": "Timeline Activities linked to the note.",
- "icon": "IconTimelineEvent",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "bc6b24e6-9fcd-43fd-a2ba-c12f5d022132",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "f62992f2-80ef-477c-ae60-fc7a862b0f4a",
- "nameSingular": "note",
- "namePlural": "notes"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "383d3f90-d691-4487-a13d-e80c50fb756e",
- "name": "timelineActivities"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "94ef21ab-5eca-4c80-b378-2a207dcca2e4",
- "nameSingular": "timelineActivity",
- "namePlural": "timelineActivities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "99599532-c0e9-4d62-b4a6-89866e0374be",
- "name": "note"
- }
- }
- },
- {
- "__typename": "field",
- "id": "a723f071-bc95-4a94-84d5-0f5904d88ea7",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "ff8e5043-6168-4c65-984d-ef4d28eb76ce",
- "type": "RELATION",
- "name": "favorites",
- "label": "Favorites",
- "description": "Favorites linked to the note",
- "icon": "IconHeart",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "a39ebd92-e37e-46d7-b545-aed1945476f2",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "f62992f2-80ef-477c-ae60-fc7a862b0f4a",
- "nameSingular": "note",
- "namePlural": "notes"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "ff8e5043-6168-4c65-984d-ef4d28eb76ce",
- "name": "favorites"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "d19be8c8-2cf4-4c29-80ae-0d1841dc11c1",
- "nameSingular": "favorite",
- "namePlural": "favorites"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "b4b7114a-8536-438a-8d13-917eae164506",
- "name": "note"
- }
- }
- },
- {
- "__typename": "field",
- "id": "143a13af-842b-4f5d-913c-648472fbfc28",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "38a2a378-bac0-4c4d-bf05-7f9ff995b860",
- "type": "RELATION",
- "name": "attachments",
- "label": "Attachments",
- "description": "Note attachments",
- "icon": "IconFileImport",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "ac29383b-d63e-4c0e-b28a-1abc03ab2b5a",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "f62992f2-80ef-477c-ae60-fc7a862b0f4a",
- "nameSingular": "note",
- "namePlural": "notes"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "38a2a378-bac0-4c4d-bf05-7f9ff995b860",
- "name": "attachments"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "9a53b4e1-bce2-4160-8ce3-028e14b2abb7",
- "nameSingular": "attachment",
- "namePlural": "attachments"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "e985e32a-532f-4259-828f-cac80c5fc3b8",
- "name": "note"
- }
- }
- },
- {
- "__typename": "field",
- "id": "d6d5a326-5a21-46a6-96b5-c70549f8f937",
- "type": "RELATION",
- "name": "noteTargets",
- "label": "Targets",
- "description": "Note targets",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "72daf099-f592-4521-8a4e-febd67309f47",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "f62992f2-80ef-477c-ae60-fc7a862b0f4a",
- "nameSingular": "note",
- "namePlural": "notes"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "d6d5a326-5a21-46a6-96b5-c70549f8f937",
- "name": "noteTargets"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "bd4e44a0-4b0d-4392-b0c9-d6c8684e3d44",
- "nameSingular": "noteTarget",
- "namePlural": "noteTargets"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "b8d93efe-14da-47a2-bb24-96ae2d037b59",
- "name": "note"
- }
- }
- },
- {
- "__typename": "field",
- "id": "2be5c772-b9f3-4851-9d9e-8990f81c475e",
- "type": "TEXT",
- "name": "title",
- "label": "Title",
- "description": "Note title",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "0baad27f-ac7b-48a3-b0a7-f2eb9613b2c6",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "f5a97cba-781d-4665-9dea-0eda6d687a99",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "message",
- "namePlural": "messages",
- "labelSingular": "Message",
- "labelPlural": "Messages",
- "description": "Message",
- "icon": "IconMessage",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "314263a0-4be7-4b22-bac1-37c8df91bdb2",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "938b8c3d-af73-43e7-acf9-ac634186d3aa",
- "type": "DATE_TIME",
- "name": "receivedAt",
- "label": "Received At",
- "description": "The date the message was received",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "2e91d365-c35a-446e-b019-bdf7e51d7d79",
- "type": "RELATION",
- "name": "messageThread",
- "label": "Message Thread Id",
- "description": "Message Thread Id",
- "icon": "IconHash",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "01efe0bd-eda8-494a-b7ea-b4813dcf0b5a",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "f5a97cba-781d-4665-9dea-0eda6d687a99",
- "nameSingular": "message",
- "namePlural": "messages"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "2e91d365-c35a-446e-b019-bdf7e51d7d79",
- "name": "messageThread"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "c62f3148-1b8d-4fa3-ac29-8a20585bcee9",
- "nameSingular": "messageThread",
- "namePlural": "messageThreads"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "11a2bd26-4856-4ab2-916d-86a07beaccd3",
- "name": "messages"
- }
- }
- },
- {
- "__typename": "field",
- "id": "5291bbf6-1c32-47fe-8164-ebd6dca187ad",
- "type": "RELATION",
- "name": "messageParticipants",
- "label": "Message Participants",
- "description": "Message Participants",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "099ebe85-572a-4f77-b077-475f97c0d54c",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "f5a97cba-781d-4665-9dea-0eda6d687a99",
- "nameSingular": "message",
- "namePlural": "messages"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "5291bbf6-1c32-47fe-8164-ebd6dca187ad",
- "name": "messageParticipants"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "b889efa2-e58a-471c-b258-3c5ef2fa09e9",
- "nameSingular": "messageParticipant",
- "namePlural": "messageParticipants"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "2efee208-73da-4ca1-ba73-19763d507611",
- "name": "message"
- }
- }
- },
- {
- "__typename": "field",
- "id": "232561ae-1e5f-4cde-a093-53597948a567",
- "type": "SELECT",
- "name": "direction",
- "label": "Direction",
- "description": "Message Direction",
- "icon": "IconDirection",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'INCOMING'",
- "options": [
- {
- "id": "14216544-33d1-47d0-99a9-717763d49c0f",
- "color": "green",
- "label": "Incoming",
- "value": "INCOMING",
- "position": 0
- },
- {
- "id": "f1b89e48-1107-45a2-b54a-31a75e76b9b2",
- "color": "blue",
- "label": "Outgoing",
- "value": "OUTGOING",
- "position": 1
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "c31a967f-0c76-4a07-9299-01ac653b3807",
- "type": "TEXT",
- "name": "headerMessageId",
- "label": "Header message Id",
- "description": "Message id from the message header",
- "icon": "IconHash",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "055e1afd-6445-4747-b489-0bb412c42e1e",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "314263a0-4be7-4b22-bac1-37c8df91bdb2",
- "type": "TEXT",
- "name": "subject",
- "label": "Subject",
- "description": "Subject",
- "icon": "IconMessage",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "c9419522-6ce4-48d6-bad8-8d71336ca964",
- "type": "UUID",
- "name": "messageThreadId",
- "label": "Message Thread Id id (foreign key)",
- "description": "Message Thread Id id foreign key",
- "icon": "IconHash",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "cb6eb250-d255-4446-88f3-bc6b7dd20800",
- "type": "RELATION",
- "name": "messageChannelMessageAssociations",
- "label": "Message Channel Association",
- "description": "Messages from the channel.",
- "icon": "IconMessage",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "3d3b5a91-f7b7-4c50-98d2-093be343711c",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "f5a97cba-781d-4665-9dea-0eda6d687a99",
- "nameSingular": "message",
- "namePlural": "messages"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "cb6eb250-d255-4446-88f3-bc6b7dd20800",
- "name": "messageChannelMessageAssociations"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "d0f0efa4-9f44-4812-96f9-d91ee933a5e8",
- "nameSingular": "messageChannelMessageAssociation",
- "namePlural": "messageChannelMessageAssociations"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "6e2131e3-b688-4b61-99bf-f0b50f100a5f",
- "name": "message"
- }
- }
- },
- {
- "__typename": "field",
- "id": "367b2c39-dca7-48cb-b04a-8dd4e5e489af",
- "type": "TEXT",
- "name": "text",
- "label": "Text",
- "description": "Text",
- "icon": "IconMessage",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "c2c61dcb-08ee-4761-b5d6-53b44fda1431",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "41cf0d75-84f4-4063-a428-d699a731b080",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "f3189217-0595-44ad-a51c-6145a2f7c6ba",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "apiKey",
- "namePlural": "apiKeys",
- "labelSingular": "Api Key",
- "labelPlural": "Api Keys",
- "description": "An api key",
- "icon": "IconRobot",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "13406939-4334-4820-ada4-3197dedc51b0",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "6a350a28-c036-4018-8caa-97128d74c3d9",
- "type": "DATE_TIME",
- "name": "revokedAt",
- "label": "Revocation date",
- "description": "ApiKey revocation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "22031e60-824f-4458-b265-bcae66ae8555",
- "type": "DATE_TIME",
- "name": "expiresAt",
- "label": "Expiration date",
- "description": "ApiKey expiration date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "eff85403-ee56-4b40-9d6c-d57197318bd2",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "13406939-4334-4820-ada4-3197dedc51b0",
- "type": "TEXT",
- "name": "name",
- "label": "Name",
- "description": "ApiKey name",
- "icon": "IconLink",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "75eccaec-4a93-4b74-a844-89b89ca98598",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "7f3deab6-000a-40e4-b513-8658642168cd",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "company",
- "namePlural": "companies",
- "labelSingular": "Company",
- "labelPlural": "Companies",
- "description": "A company",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "2599d01d-02ee-4d55-9063-35c67cc81a0f",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "b229e842-ca29-4c1a-ba74-e69be1f357ac",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "65ed4460-c5b9-4634-bdc1-80f59515a2f6",
- "type": "BOOLEAN",
- "name": "visaSponsorship",
- "label": "Visa Sponsorship",
- "description": "Company's Visa Sponsorship Policy",
- "icon": "IconBrandVisa",
- "isCustom": true,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:39:01.913Z",
- "updatedAt": "2024-08-05T16:39:01.913Z",
- "defaultValue": false,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "a7c771af-639a-4f01-b1fa-3b245c3d4e92",
- "type": "ACTOR",
- "name": "createdBy",
- "label": "Created by",
- "description": "The creator of the record",
- "icon": "IconCreativeCommonsSa",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": {
- "name": "''",
- "source": "'MANUAL'"
- },
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6cc3a88a-be92-47c7-9f17-8d726bb7f8b6",
- "type": "LINKS",
- "name": "domainName",
- "label": "Domain Name",
- "description": "The company website URL. We use this url to fetch the company icon",
- "icon": "IconLink",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": {
- "primaryLinkUrl": "''",
- "secondaryLinks": null,
- "primaryLinkLabel": "''"
- },
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "ec77df7f-a933-4415-a515-8b4938c9f125",
- "type": "LINKS",
- "name": "introVideo",
- "label": "Intro Video",
- "description": "Company's Intro Video",
- "icon": "IconVideo",
- "isCustom": true,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:39:01.865Z",
- "updatedAt": "2024-08-05T16:39:01.865Z",
- "defaultValue": {
- "primaryLinkUrl": "''",
- "secondaryLinks": null,
- "primaryLinkLabel": "''"
- },
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "3ece1b4d-c052-4b32-bd2a-ba0f8c8b6f3e",
- "type": "RELATION",
- "name": "accountOwner",
- "label": "Account Owner",
- "description": "Your team member responsible for managing the company account",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "0896a728-e2cf-4032-9af2-a471645e9697",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "3ece1b4d-c052-4b32-bd2a-ba0f8c8b6f3e",
- "name": "accountOwner"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "de44f939-76d9-4c1a-96aa-7c5a646f2045",
- "name": "accountOwnerForCompanies"
- }
- }
- },
- {
- "__typename": "field",
- "id": "c06142b8-52a9-4b0b-93f6-99e2b5b67ab8",
- "type": "RELATION",
- "name": "timelineActivities",
- "label": "Timeline Activities",
- "description": "Timeline Activities linked to the company",
- "icon": "IconIconTimelineEvent",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "c542c9e0-b4b6-4073-aae6-66299868e9fb",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "c06142b8-52a9-4b0b-93f6-99e2b5b67ab8",
- "name": "timelineActivities"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "94ef21ab-5eca-4c80-b378-2a207dcca2e4",
- "nameSingular": "timelineActivity",
- "namePlural": "timelineActivities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "979ea933-d8a1-4db6-8c29-5c747a690326",
- "name": "company"
- }
- }
- },
- {
- "__typename": "field",
- "id": "b08f7cc5-f0c9-4ab1-a2bd-2733ab95d97b",
- "type": "POSITION",
- "name": "position",
- "label": "Position",
- "description": "Company record position",
- "icon": "IconHierarchy2",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "f0c8cde4-5a5d-4a6f-8273-94396a60f918",
- "type": "CURRENCY",
- "name": "annualRecurringRevenue",
- "label": "ARR",
- "description": "Annual Recurring Revenue: The actual or estimated annual revenue of the company",
- "icon": "IconMoneybag",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": {
- "amountMicros": null,
- "currencyCode": "''"
- },
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "5e24424a-db05-468b-bd45-7cab4059be3a",
- "type": "NUMBER",
- "name": "employees",
- "label": "Employees",
- "description": "Number of employees in the company",
- "icon": "IconUsers",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "63261a95-39ac-4826-bc8b-7fc0fd21a8ad",
- "type": "RELATION",
- "name": "noteTargets",
- "label": "Notes",
- "description": "Notes tied to the company",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "d420db15-3060-4760-afd0-8485c76e53b4",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "63261a95-39ac-4826-bc8b-7fc0fd21a8ad",
- "name": "noteTargets"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "bd4e44a0-4b0d-4392-b0c9-d6c8684e3d44",
- "nameSingular": "noteTarget",
- "namePlural": "noteTargets"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "cb654210-43c9-4ff7-95ee-8250c1d80e8d",
- "name": "company"
- }
- }
- },
- {
- "__typename": "field",
- "id": "cb47633a-1b44-41b9-8bce-16e28616c2ad",
- "type": "RELATION",
- "name": "taskTargets",
- "label": "Tasks",
- "description": "Tasks tied to the company",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "f80bfd64-c33d-4488-bc49-1635e092ea3f",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "cb47633a-1b44-41b9-8bce-16e28616c2ad",
- "name": "taskTargets"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "77d124cc-049a-44f9-ab59-56e3dd55bb69",
- "nameSingular": "taskTarget",
- "namePlural": "taskTargets"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "1e4e3b2b-113f-4af3-aed8-94b03785a626",
- "name": "company"
- }
- }
- },
- {
- "__typename": "field",
- "id": "c132d454-299e-4885-89b0-de5b824e43e2",
- "type": "LINKS",
- "name": "linkedinLink",
- "label": "Linkedin",
- "description": "The company Linkedin account",
- "icon": "IconBrandLinkedin",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": {
- "primaryLinkUrl": "''",
- "secondaryLinks": null,
- "primaryLinkLabel": "''"
- },
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "64f76ec9-3fae-4a61-b30f-7c646f4fe33d",
- "type": "MULTI_SELECT",
- "name": "workPolicy",
- "label": "Work Policy",
- "description": "Company's Work Policy",
- "icon": "IconHome",
- "isCustom": true,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:39:01.888Z",
- "updatedAt": "2024-08-05T16:39:01.888Z",
- "defaultValue": null,
- "options": [
- {
- "id": "2a832e12-073e-4b58-bb71-9f68c00cabda",
- "color": "green",
- "label": "On-Site",
- "value": "ON_SITE",
- "position": 0
- },
- {
- "id": "231423db-f097-4410-8efc-95bc19f9e87f",
- "color": "turquoise",
- "label": "Hybrid",
- "value": "HYBRID",
- "position": 1
- },
- {
- "id": "db436d25-f1e3-45aa-9f81-7a5ef84a50ef",
- "color": "sky",
- "label": "Remote Work",
- "value": "REMOTE_WORK",
- "position": 2
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "79452277-0e6e-4dc5-b972-470c29bd6d12",
- "type": "ADDRESS",
- "name": "address",
- "label": "Address",
- "description": "Address of the company",
- "icon": "IconMap",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": {
- "addressLat": null,
- "addressLng": null,
- "addressCity": "''",
- "addressState": "''",
- "addressCountry": "''",
- "addressStreet1": "''",
- "addressStreet2": "''",
- "addressPostcode": "''"
- },
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "2599d01d-02ee-4d55-9063-35c67cc81a0f",
- "type": "TEXT",
- "name": "name",
- "label": "Name",
- "description": "The company name",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "4cbb077e-ccce-4892-8fc0-9b9238d7a009",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "3a2bd134-5b31-4bde-a64f-d5244a8e6271",
- "type": "RELATION",
- "name": "attachments",
- "label": "Attachments",
- "description": "Attachments linked to the company",
- "icon": "IconFileImport",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "be6051cd-703c-4539-89ed-e643784bad26",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "3a2bd134-5b31-4bde-a64f-d5244a8e6271",
- "name": "attachments"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "9a53b4e1-bce2-4160-8ce3-028e14b2abb7",
- "nameSingular": "attachment",
- "namePlural": "attachments"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "6496b8e0-2d8f-493e-8973-fcba2aa84b59",
- "name": "company"
- }
- }
- },
- {
- "__typename": "field",
- "id": "1ce2452b-75a2-4989-ad48-f6f696fe1a38",
- "type": "LINKS",
- "name": "xLink",
- "label": "X",
- "description": "The company Twitter/X account",
- "icon": "IconBrandX",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": {
- "primaryLinkUrl": "''",
- "secondaryLinks": null,
- "primaryLinkLabel": "''"
- },
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "48dba12f-4429-4ee2-9b3a-6df97c45141d",
- "type": "RELATION",
- "name": "people",
- "label": "People",
- "description": "People linked to the company.",
- "icon": "IconUsers",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "0562d399-7053-4d7f-a415-cabfc889bd16",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "48dba12f-4429-4ee2-9b3a-6df97c45141d",
- "name": "people"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "6672a066-7a7f-44ae-bb5c-ae3a5e82d835",
- "name": "company"
- }
- }
- },
- {
- "__typename": "field",
- "id": "a49c82ff-0483-4acc-9e67-16e121daa11f",
- "type": "TEXT",
- "name": "myCustomField",
- "label": "myCustomField",
- "description": null,
- "icon": "IconUsers",
- "isCustom": true,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T17:09:37.502Z",
- "updatedAt": "2024-08-05T17:09:37.502Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "0f2127dd-9364-4a9e-a66f-a866eb629d8b",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "4d74b886-b359-4c4c-a2c0-692edc8a3273",
- "type": "RELATION",
- "name": "activityTargets",
- "label": "Activities",
- "description": "Activities tied to the company",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "2ed70c2c-b17a-4ed1-9f35-b570139440fa",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "4d74b886-b359-4c4c-a2c0-692edc8a3273",
- "name": "activityTargets"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "648268ca-94bf-418e-853c-56d0f51472b3",
- "nameSingular": "activityTarget",
- "namePlural": "activityTargets"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "10150d34-2f00-4642-8a9d-6b0b6ab72562",
- "name": "company"
- }
- }
- },
- {
- "__typename": "field",
- "id": "cbd94612-00a2-4efd-8869-93f945e93076",
- "type": "RELATION",
- "name": "opportunities",
- "label": "Opportunities",
- "description": "Opportunities linked to the company.",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "67d4ff08-f5e6-4382-8996-67fdc2d02125",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "cbd94612-00a2-4efd-8869-93f945e93076",
- "name": "opportunities"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "b95b3f38-9fc2-4d7e-a823-7791cf13d089",
- "nameSingular": "opportunity",
- "namePlural": "opportunities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "28b61c8a-8437-4770-9b12-f3d0e591bee8",
- "name": "company"
- }
- }
- },
- {
- "__typename": "field",
- "id": "ae74690d-94d5-4860-928f-4ed8ea36be1d",
- "type": "RELATION",
- "name": "favorites",
- "label": "Favorites",
- "description": "Favorites linked to the company",
- "icon": "IconHeart",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "31819eaa-5847-4207-b4a3-0ecffefd9332",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "ae74690d-94d5-4860-928f-4ed8ea36be1d",
- "name": "favorites"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "d19be8c8-2cf4-4c29-80ae-0d1841dc11c1",
- "nameSingular": "favorite",
- "namePlural": "favorites"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "69b1d954-1ed3-4bf9-b9e1-b886a00953b4",
- "name": "company"
- }
- }
- },
- {
- "__typename": "field",
- "id": "abc8bbb4-cc34-428b-a182-b032c2b3c7ff",
- "type": "UUID",
- "name": "accountOwnerId",
- "label": "Account Owner id (foreign key)",
- "description": "Your team member responsible for managing the company account id foreign key",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "9bbd039b-40e0-4742-879e-0be3cf9b12b7",
- "type": "TEXT",
- "name": "tagline",
- "label": "Tagline",
- "description": "Company's Tagline",
- "icon": "IconAdCircle",
- "isCustom": true,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:39:01.834Z",
- "updatedAt": "2024-08-05T16:39:01.834Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "f90f1fda-258f-4b52-af93-9f157e2ed187",
- "type": "BOOLEAN",
- "name": "idealCustomerProfile",
- "label": "ICP",
- "description": "Ideal Customer Profile: Indicates whether the company is the most suitable and valuable customer for you",
- "icon": "IconTarget",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": false,
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "ee025446-440d-49ae-8d0e-ad30b6309840",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "viewField",
- "namePlural": "viewFields",
- "labelSingular": "View Field",
- "labelPlural": "View Fields",
- "description": "(System) View Fields",
- "icon": "IconTag",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "440d28bb-2d5f-4624-8fdd-5476ac84baa5",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "2c466c0c-926a-4722-846c-3bd89c2751da",
- "type": "BOOLEAN",
- "name": "isVisible",
- "label": "Visible",
- "description": "View Field visibility",
- "icon": "IconEye",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": true,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6725c7ad-a704-436a-be67-a4612bc48e37",
- "type": "RELATION",
- "name": "view",
- "label": "View",
- "description": "View Field related view",
- "icon": "IconLayoutCollage",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "57d32129-b126-417e-98a8-7f1217b29dea",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "ee025446-440d-49ae-8d0e-ad30b6309840",
- "nameSingular": "viewField",
- "namePlural": "viewFields"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "6725c7ad-a704-436a-be67-a4612bc48e37",
- "name": "view"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "90df20e5-c655-474f-bb98-b423652e36df",
- "nameSingular": "view",
- "namePlural": "views"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "6ea01d0e-340e-40e4-a029-89a7cbc07291",
- "name": "viewFields"
- }
- }
- },
- {
- "__typename": "field",
- "id": "21015789-4b34-4a98-8669-1ceb7e408d0c",
- "type": "UUID",
- "name": "viewId",
- "label": "View id (foreign key)",
- "description": "View Field related view id foreign key",
- "icon": "IconLayoutCollage",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "4ce74348-740e-49e4-b13f-05a7810fc021",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "be8726a0-5584-4e78-82b8-4be201cd8870",
- "type": "UUID",
- "name": "fieldMetadataId",
- "label": "Field Metadata Id",
- "description": "View Field target field",
- "icon": "IconTag",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6a582800-ad4d-4a5b-ac51-9a4a28f7b348",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "619cb257-468c-4496-8db7-3d119013b5a8",
- "type": "NUMBER",
- "name": "size",
- "label": "Size",
- "description": "View Field size",
- "icon": "IconEye",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": 0,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "c82925e9-c98a-497d-9d70-c39158402171",
- "type": "NUMBER",
- "name": "position",
- "label": "Position",
- "description": "View Field position",
- "icon": "IconList",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": 0,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "440d28bb-2d5f-4624-8fdd-5476ac84baa5",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "id": "7943376e-fa16-41e8-9e7e-0cfd8fc104ad",
- "dataSourceId": "92760295-6c51-4ebc-9a59-0000e1f24f85",
- "nameSingular": "viewGroup",
- "namePlural": "viewGroups",
- "labelSingular": "View Group",
- "labelPlural": "View Groups",
- "description": "(System) View Groups",
- "icon": "IconTag",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-09-20T09:44:11.774Z",
- "updatedAt": "2024-09-20T09:44:11.774Z",
- "labelIdentifierFieldMetadataId": "0e8d59e3-1121-469d-8c89-240bc16ebd98",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "id": "0e8d59e3-1121-469d-8c89-240bc16ebd98",
- "type": "UUID",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-09-20T09:44:11.774Z",
- "updatedAt": "2024-09-20T09:44:11.774Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "id": "2fca1d8d-ec8a-4a58-807d-290fa3f1b2b3",
- "type": "UUID",
- "label": "Field Metadata Id",
- "description": "View Group target field",
- "icon": "IconTag",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-09-20T09:44:11.774Z",
- "updatedAt": "2024-09-20T09:44:11.774Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "id": "3a2f5200-45ba-46a5-aed2-fa5bb5ced269",
- "type": "DATE_TIME",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-09-20T09:44:11.774Z",
- "updatedAt": "2024-09-20T09:44:11.774Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "id": "41d8e614-13ec-4c47-938b-65909a1bb4f8",
- "type": "BOOLEAN",
- "label": "Visible",
- "description": "View Group visibility",
- "icon": "IconEye",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-09-20T09:44:11.774Z",
- "updatedAt": "2024-09-20T09:44:11.774Z",
- "defaultValue": true,
- "options": null,
- "relationDefinition": null
- },
- {
- "id": "4a712eb7-3f90-4510-b46f-02709199cde5",
- "type": "TEXT",
- "label": "Field Value",
- "description": "Group by this field value",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-09-20T09:44:11.774Z",
- "updatedAt": "2024-09-20T09:44:11.774Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "id": "605598bd-d132-40a9-afe7-c76af518e502",
- "type": "NUMBER",
- "label": "Position",
- "description": "View Field position",
- "icon": "IconList",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-09-20T09:44:11.774Z",
- "updatedAt": "2024-09-20T09:44:11.774Z",
- "defaultValue": 0,
- "options": null,
- "relationDefinition": null
- },
- {
- "id": "6c9b7054-21c2-4589-a667-63ccd8a178ad",
- "type": "DATE_TIME",
- "label": "Deleted at",
- "description": "Date when the record was deleted",
- "icon": "IconCalendarMinus",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-09-20T09:44:11.774Z",
- "updatedAt": "2024-09-20T09:44:11.774Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "id": "a988bd1c-4996-4281-bdc3-3bcd8b545037",
- "type": "RELATION",
- "label": "View",
- "description": "View Group related view",
- "icon": "IconLayoutCollage",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-09-20T09:44:11.774Z",
- "updatedAt": "2024-09-20T09:44:11.774Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "relationId": "1db712c0-9e0d-49da-ade5-f27abfb323a3",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "id": "7943376e-fa16-41e8-9e7e-0cfd8fc104ad",
- "nameSingular": "viewGroup",
- "namePlural": "viewGroups"
- },
- "sourceFieldMetadata": {
- "id": "a988bd1c-4996-4281-bdc3-3bcd8b545037",
- "name": "view"
- },
- "targetObjectMetadata": {
- "id": "54436344-c24c-4d9e-9302-32a8c7171638",
- "nameSingular": "view",
- "namePlural": "views"
- },
- "targetFieldMetadata": {
- "id": "1f1c7735-44e6-4d1e-8854-1d485bf60bf8",
- "name": "viewGroups"
- }
- }
- },
- {
- "id": "ac1b8c3e-ce1e-47f5-82a2-0a20d2b36ae8",
- "type": "DATE_TIME",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-09-20T09:44:11.774Z",
- "updatedAt": "2024-09-20T09:44:11.774Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "id": "ea6277dc-7642-4d41-b574-72160319864f",
- "type": "UUID",
- "label": "View id (foreign key)",
- "description": "View Group related view id foreign key",
- "icon": "IconLayoutCollage",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-09-20T09:44:11.774Z",
- "updatedAt": "2024-09-20T09:44:11.774Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "e0bf07c5-4729-46ab-aa15-480f26999477",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "webhook",
- "namePlural": "webhooks",
- "labelSingular": "Webhook",
- "labelPlural": "Webhooks",
- "description": "A webhook",
- "icon": "IconRobot",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "1b437ef4-0bcf-4a8d-9ebf-f25ffccb3d54",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "1b437ef4-0bcf-4a8d-9ebf-f25ffccb3d54",
- "type": "TEXT",
- "name": "targetUrl",
- "label": "Target Url",
- "description": "Webhook target url",
- "icon": "IconLink",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "b3ce5dca-00ec-4ea3-ae2a-4f08cac53a3b",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "e11a3ed9-2576-4bca-bc8d-4559b247f466",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "670a4724-178c-44b4-94a6-30e11f015cb0",
- "type": "TEXT",
- "name": "operation",
- "label": "Operation",
- "description": "Webhook operation",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "a3d5bfcd-ed28-4dcb-a650-c474de21ec58",
- "type": "TEXT",
- "name": "description",
- "label": "Description",
- "description": null,
- "icon": "IconInfo",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "7ab0a589-fe02-4e80-8ae9-4ea51d3b8907",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "d19be8c8-2cf4-4c29-80ae-0d1841dc11c1",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "favorite",
- "namePlural": "favorites",
- "labelSingular": "Favorite",
- "labelPlural": "Favorites",
- "description": "A favorite",
- "icon": "IconHeart",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "18c9dce6-51cb-4326-890f-156a3e19a88d",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "3d4cd287-7435-4574-aedd-09f6f5b34afb",
- "type": "UUID",
- "name": "taskId",
- "label": "Task id (foreign key)",
- "description": "Favorite task id foreign key",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "3214e46b-3728-42ea-bdcc-dc8d0d15e64c",
- "type": "UUID",
- "name": "myCustomObjectId",
- "label": "myCustomObject ID (foreign key)",
- "description": "Favorite myCustomObject id foreign key",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.167Z",
- "updatedAt": "2024-08-05T17:09:54.167Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "b5845911-ec5b-4032-a60e-bcdbd1a6b1f2",
- "type": "UUID",
- "name": "workspaceMemberId",
- "label": "Workspace Member id (foreign key)",
- "description": "Favorite workspace member id foreign key",
- "icon": "IconCircleUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "407a2cbc-6c15-41dd-942c-5322d273bec3",
- "type": "RELATION",
- "name": "workspaceMember",
- "label": "Workspace Member",
- "description": "Favorite workspace member",
- "icon": "IconCircleUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "b0f40da3-1fda-4803-be21-14a2755bc834",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "d19be8c8-2cf4-4c29-80ae-0d1841dc11c1",
- "nameSingular": "favorite",
- "namePlural": "favorites"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "407a2cbc-6c15-41dd-942c-5322d273bec3",
- "name": "workspaceMember"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "f537669a-4524-4dfc-91d3-79438e2a481e",
- "name": "favorites"
- }
- }
- },
- {
- "__typename": "field",
- "id": "9c99e6fc-aed4-44f6-a231-1d1ce3f218ab",
- "type": "UUID",
- "name": "companyId",
- "label": "Company id (foreign key)",
- "description": "Favorite company id foreign key",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "87c2dd65-2c54-4184-9a19-0bdce7781a3f",
- "type": "RELATION",
- "name": "myCustomObject",
- "label": "myCustomObject",
- "description": "Favorite myCustomObject",
- "icon": "IconHeart",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.168Z",
- "updatedAt": "2024-08-05T17:09:54.168Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "143c2257-721f-46eb-8114-987a70979146",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "d19be8c8-2cf4-4c29-80ae-0d1841dc11c1",
- "nameSingular": "favorite",
- "namePlural": "favorites"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "87c2dd65-2c54-4184-9a19-0bdce7781a3f",
- "name": "myCustomObject"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "56dffccc-daf8-4c49-8919-f19787f07846",
- "nameSingular": "myCustomObject",
- "namePlural": "myCustomObjects"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "c475ebbc-f86b-4956-9d67-d0bb62062408",
- "name": "favorites"
- }
- }
- },
- {
- "__typename": "field",
- "id": "0c955466-cf7a-43b5-a0c5-4703b9703193",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "18c9dce6-51cb-4326-890f-156a3e19a88d",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "3464f1ce-34d3-4bf1-ac74-072bf750cc5c",
- "type": "RELATION",
- "name": "opportunity",
- "label": "Opportunity",
- "description": "Favorite opportunity",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "c1110f68-bbc9-4dbf-aae4-c6e5e2569240",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "d19be8c8-2cf4-4c29-80ae-0d1841dc11c1",
- "nameSingular": "favorite",
- "namePlural": "favorites"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "3464f1ce-34d3-4bf1-ac74-072bf750cc5c",
- "name": "opportunity"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "b95b3f38-9fc2-4d7e-a823-7791cf13d089",
- "nameSingular": "opportunity",
- "namePlural": "opportunities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "a1a7bb38-6f6c-4bdb-803f-804cdd97cb77",
- "name": "favorites"
- }
- }
- },
- {
- "__typename": "field",
- "id": "9520f201-9dec-4e48-ba68-4fb9f2a4c662",
- "type": "UUID",
- "name": "noteId",
- "label": "Note id (foreign key)",
- "description": "Favorite note id foreign key",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "b4b7114a-8536-438a-8d13-917eae164506",
- "type": "RELATION",
- "name": "note",
- "label": "Note",
- "description": "Favorite note",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "a39ebd92-e37e-46d7-b545-aed1945476f2",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "d19be8c8-2cf4-4c29-80ae-0d1841dc11c1",
- "nameSingular": "favorite",
- "namePlural": "favorites"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "b4b7114a-8536-438a-8d13-917eae164506",
- "name": "note"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "f62992f2-80ef-477c-ae60-fc7a862b0f4a",
- "nameSingular": "note",
- "namePlural": "notes"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "ff8e5043-6168-4c65-984d-ef4d28eb76ce",
- "name": "favorites"
- }
- }
- },
- {
- "__typename": "field",
- "id": "4f2c079a-0221-47e9-ab92-68f529726424",
- "type": "UUID",
- "name": "personId",
- "label": "Person id (foreign key)",
- "description": "Favorite person id foreign key",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "e7201f19-bfa7-42e1-9550-7c848a842ecc",
- "type": "RELATION",
- "name": "task",
- "label": "Task",
- "description": "Favorite task",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "32b10a0d-0ca4-4027-be9e-ab8d8be608d1",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "d19be8c8-2cf4-4c29-80ae-0d1841dc11c1",
- "nameSingular": "favorite",
- "namePlural": "favorites"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "e7201f19-bfa7-42e1-9550-7c848a842ecc",
- "name": "task"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "99f8caa6-263c-4690-8dc0-eb7645304cf5",
- "nameSingular": "task",
- "namePlural": "tasks"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "80fe7004-903e-4bdd-985d-9ef7e6acd793",
- "name": "favorites"
- }
- }
- },
- {
- "__typename": "field",
- "id": "ce728fc3-01f7-4e2b-b71c-05ed44b50836",
- "type": "UUID",
- "name": "opportunityId",
- "label": "Opportunity id (foreign key)",
- "description": "Favorite opportunity id foreign key",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "674ead9c-88e9-481c-b5b3-dec4a450d67e",
- "type": "NUMBER",
- "name": "position",
- "label": "Position",
- "description": "Favorite position",
- "icon": "IconList",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": 0,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "5966af59-a371-42a3-85de-1b9a8e9768c9",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "69b1d954-1ed3-4bf9-b9e1-b886a00953b4",
- "type": "RELATION",
- "name": "company",
- "label": "Company",
- "description": "Favorite company",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "31819eaa-5847-4207-b4a3-0ecffefd9332",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "d19be8c8-2cf4-4c29-80ae-0d1841dc11c1",
- "nameSingular": "favorite",
- "namePlural": "favorites"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "69b1d954-1ed3-4bf9-b9e1-b886a00953b4",
- "name": "company"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "ae74690d-94d5-4860-928f-4ed8ea36be1d",
- "name": "favorites"
- }
- }
- },
- {
- "__typename": "field",
- "id": "b7caceaa-d49a-43c8-8b9b-10dc4298ade5",
- "type": "RELATION",
- "name": "person",
- "label": "Person",
- "description": "Favorite person",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "66551942-e576-4eb7-96c4-f78182f44491",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "d19be8c8-2cf4-4c29-80ae-0d1841dc11c1",
- "nameSingular": "favorite",
- "namePlural": "favorites"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "b7caceaa-d49a-43c8-8b9b-10dc4298ade5",
- "name": "person"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "4cd944c2-a252-42c2-93d3-c71d71b4587d",
- "name": "favorites"
- }
- }
- }
- ]
- },
- {
- "__typename": "object",
- "id": "d0f0efa4-9f44-4812-96f9-d91ee933a5e8",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "messageChannelMessageAssociation",
- "namePlural": "messageChannelMessageAssociations",
- "labelSingular": "Message Channel Message Association",
- "labelPlural": "Message Channel Message Associations",
- "description": "Message Synced with a Message Channel",
- "icon": "IconMessage",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "f3df53cf-dad8-4880-9b06-cd24188c77e5",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "53f2d078-7fd1-4ba7-bae7-e58398dd2d6e",
- "type": "UUID",
- "name": "messageThreadId",
- "label": "Message Thread Id id (foreign key)",
- "description": "Message Thread Id id foreign key",
- "icon": "IconHash",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "70a1610d-08ea-44eb-a453-02c1749e6e0c",
- "type": "UUID",
- "name": "messageId",
- "label": "Message Id id (foreign key)",
- "description": "Message Id id foreign key",
- "icon": "IconHash",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "930b7926-639c-43c1-85ba-4c185a9ad5d3",
- "type": "RELATION",
- "name": "messageThread",
- "label": "Message Thread Id",
- "description": "Message Thread Id",
- "icon": "IconHash",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "6be1cb67-30fe-41b3-8695-09cf6cbef18a",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "d0f0efa4-9f44-4812-96f9-d91ee933a5e8",
- "nameSingular": "messageChannelMessageAssociation",
- "namePlural": "messageChannelMessageAssociations"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "930b7926-639c-43c1-85ba-4c185a9ad5d3",
- "name": "messageThread"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "c62f3148-1b8d-4fa3-ac29-8a20585bcee9",
- "nameSingular": "messageThread",
- "namePlural": "messageThreads"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "bfa74ef1-b2d8-4720-a9bd-3084ceb005f3",
- "name": "messageChannelMessageAssociations"
- }
- }
- },
- {
- "__typename": "field",
- "id": "aa5c5146-05fc-4f48-a90a-1570bdc91ed9",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "470b0e39-1f5b-45e3-a092-c0f247539933",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6e2131e3-b688-4b61-99bf-f0b50f100a5f",
- "type": "RELATION",
- "name": "message",
- "label": "Message Id",
- "description": "Message Id",
- "icon": "IconHash",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "3d3b5a91-f7b7-4c50-98d2-093be343711c",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "d0f0efa4-9f44-4812-96f9-d91ee933a5e8",
- "nameSingular": "messageChannelMessageAssociation",
- "namePlural": "messageChannelMessageAssociations"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "6e2131e3-b688-4b61-99bf-f0b50f100a5f",
- "name": "message"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "f5a97cba-781d-4665-9dea-0eda6d687a99",
- "nameSingular": "message",
- "namePlural": "messages"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "cb6eb250-d255-4446-88f3-bc6b7dd20800",
- "name": "messageChannelMessageAssociations"
- }
- }
- },
- {
- "__typename": "field",
- "id": "621d12d5-80e5-4d0e-9c93-2433ff447dda",
- "type": "UUID",
- "name": "messageChannelId",
- "label": "Message Channel Id id (foreign key)",
- "description": "Message Channel Id id foreign key",
- "icon": "IconHash",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "ec0e8151-40a6-4695-a3bd-68794b26ea40",
- "type": "TEXT",
- "name": "messageExternalId",
- "label": "Message External Id",
- "description": "Message id from the messaging provider",
- "icon": "IconHash",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "f3df53cf-dad8-4880-9b06-cd24188c77e5",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "f2561dd5-c695-4635-816c-27175470b285",
- "type": "RELATION",
- "name": "messageChannel",
- "label": "Message Channel Id",
- "description": "Message Channel Id",
- "icon": "IconHash",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "e420b731-e1e1-425a-ac7a-488d37d1958b",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "d0f0efa4-9f44-4812-96f9-d91ee933a5e8",
- "nameSingular": "messageChannelMessageAssociation",
- "namePlural": "messageChannelMessageAssociations"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "f2561dd5-c695-4635-816c-27175470b285",
- "name": "messageChannel"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "219d7acf-5934-44dc-8789-62ade666cb43",
- "nameSingular": "messageChannel",
- "namePlural": "messageChannels"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "2682d5c3-f05e-4c5c-87eb-bb1a6c0c37bb",
- "name": "messageChannelMessageAssociations"
- }
- }
- },
- {
- "__typename": "field",
- "id": "b93119d3-d244-42a4-8d7d-8c312f683f55",
- "type": "TEXT",
- "name": "messageThreadExternalId",
- "label": "Thread External Id",
- "description": "Thread id from the messaging provider",
- "icon": "IconHash",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "cf6f8138-3445-4a36-b137-41ebb8f2e3dc",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "activity",
- "namePlural": "activities",
- "labelSingular": "Activity",
- "labelPlural": "Activities",
- "description": "An activity",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "7690dd7a-0c0d-444a-845a-2ea9ea4fa54d",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "beac3449-af10-43a2-9abb-276a798df3de",
- "type": "RELATION",
- "name": "author",
- "label": "Author",
- "description": "Activity author",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "6d4e8025-7ee9-4079-ae80-b18de7b5ff4e",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "cf6f8138-3445-4a36-b137-41ebb8f2e3dc",
- "nameSingular": "activity",
- "namePlural": "activities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "beac3449-af10-43a2-9abb-276a798df3de",
- "name": "author"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "5e889b07-de1e-47f0-aeb9-301a684bd6a4",
- "name": "authoredActivities"
- }
- }
- },
- {
- "__typename": "field",
- "id": "9045116d-0fed-433c-80a4-f4296db72ae5",
- "type": "RELATION",
- "name": "comments",
- "label": "Comments",
- "description": "Activity comments",
- "icon": "IconComment",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "00b07eda-840c-4a91-a8f7-365c008a2ea1",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "cf6f8138-3445-4a36-b137-41ebb8f2e3dc",
- "nameSingular": "activity",
- "namePlural": "activities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "9045116d-0fed-433c-80a4-f4296db72ae5",
- "name": "comments"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "3af96291-b873-402f-bd90-f4731984c8dd",
- "nameSingular": "comment",
- "namePlural": "comments"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "88c3a2b9-b59a-413a-b2d3-44b151185929",
- "name": "activity"
- }
- }
- },
- {
- "__typename": "field",
- "id": "bec64b6b-d141-45fe-a166-4f5d9ae578ce",
- "type": "UUID",
- "name": "authorId",
- "label": "Author id (foreign key)",
- "description": "Activity author id foreign key",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6e363f5f-737c-4b94-b5ce-5fe034330f47",
- "type": "TEXT",
- "name": "body",
- "label": "Body",
- "description": "Activity body",
- "icon": "IconList",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "605e8c91-456d-4a53-906c-df02d6425362",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "d8477f91-7cb2-4455-b2c3-911dcb4c464f",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "8958f22c-ba22-42f5-8db9-11ea3df92c5b",
- "type": "UUID",
- "name": "assigneeId",
- "label": "Assignee id (foreign key)",
- "description": "Activity assignee id foreign key",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "41f8fd90-2de9-402f-8b37-fb023d318de2",
- "type": "RELATION",
- "name": "activityTargets",
- "label": "Targets",
- "description": "Activity targets",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "16017cba-688e-4483-a258-9cef3999cbbf",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "cf6f8138-3445-4a36-b137-41ebb8f2e3dc",
- "nameSingular": "activity",
- "namePlural": "activities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "41f8fd90-2de9-402f-8b37-fb023d318de2",
- "name": "activityTargets"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "648268ca-94bf-418e-853c-56d0f51472b3",
- "nameSingular": "activityTarget",
- "namePlural": "activityTargets"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "aa1c7e04-31c1-4b62-8451-6b32926cab47",
- "name": "activity"
- }
- }
- },
- {
- "__typename": "field",
- "id": "ea9aa19c-22d8-4b72-83ff-78d9653c27c4",
- "type": "RELATION",
- "name": "assignee",
- "label": "Assignee",
- "description": "Activity assignee",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "cf9ac76a-9f22-4252-a00a-63cc45fcabc4",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "cf6f8138-3445-4a36-b137-41ebb8f2e3dc",
- "nameSingular": "activity",
- "namePlural": "activities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "ea9aa19c-22d8-4b72-83ff-78d9653c27c4",
- "name": "assignee"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "a147a0df-eb28-4259-a304-0460f92adf30",
- "name": "assignedActivities"
- }
- }
- },
- {
- "__typename": "field",
- "id": "7690dd7a-0c0d-444a-845a-2ea9ea4fa54d",
- "type": "TEXT",
- "name": "title",
- "label": "Title",
- "description": "Activity title",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "918033d1-237e-45fd-960f-3fa4f0e45292",
- "type": "DATE_TIME",
- "name": "reminderAt",
- "label": "Reminder Date",
- "description": "Activity reminder date",
- "icon": "IconCalendarEvent",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "5c749bc8-9331-4744-8697-a03a4ad46a3d",
- "type": "TEXT",
- "name": "type",
- "label": "Type",
- "description": "Activity type",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'Note'",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "7b24a2df-8118-4dea-862b-ec21e5a12e47",
- "type": "DATE_TIME",
- "name": "completedAt",
- "label": "Completion Date",
- "description": "Activity completion date",
- "icon": "IconCheck",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "29a1593e-7704-4e43-ae88-507b1ff0febb",
- "type": "DATE_TIME",
- "name": "dueAt",
- "label": "Due Date",
- "description": "Activity due date",
- "icon": "IconCalendarEvent",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "d9f1711b-a8b1-48ee-9f81-503bbf945b87",
- "type": "RELATION",
- "name": "attachments",
- "label": "Attachments",
- "description": "Activity attachments",
- "icon": "IconFileImport",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "23518310-2443-4907-8ac6-b77bf340d99d",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "cf6f8138-3445-4a36-b137-41ebb8f2e3dc",
- "nameSingular": "activity",
- "namePlural": "activities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "d9f1711b-a8b1-48ee-9f81-503bbf945b87",
- "name": "attachments"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "9a53b4e1-bce2-4160-8ce3-028e14b2abb7",
- "nameSingular": "attachment",
- "namePlural": "attachments"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "394c0644-d8bd-44a8-82c9-6e2a4c9aa19c",
- "name": "activity"
- }
- }
- },
- {
- "__typename": "field",
- "id": "2d969fc8-07b3-470e-8bb5-b6e78fbfb22a",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "c62f3148-1b8d-4fa3-ac29-8a20585bcee9",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "messageThread",
- "namePlural": "messageThreads",
- "labelSingular": "Message Thread",
- "labelPlural": "Message Threads",
- "description": "Message Thread",
- "icon": "IconMessage",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "260b37ba-7451-488f-ae65-a7143aa694e8",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "f05ccb65-325b-4bef-b946-695e598092b5",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "bfa74ef1-b2d8-4720-a9bd-3084ceb005f3",
- "type": "RELATION",
- "name": "messageChannelMessageAssociations",
- "label": "Message Channel Association",
- "description": "Messages from the channel",
- "icon": "IconMessage",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "6be1cb67-30fe-41b3-8695-09cf6cbef18a",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "c62f3148-1b8d-4fa3-ac29-8a20585bcee9",
- "nameSingular": "messageThread",
- "namePlural": "messageThreads"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "bfa74ef1-b2d8-4720-a9bd-3084ceb005f3",
- "name": "messageChannelMessageAssociations"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "d0f0efa4-9f44-4812-96f9-d91ee933a5e8",
- "nameSingular": "messageChannelMessageAssociation",
- "namePlural": "messageChannelMessageAssociations"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "930b7926-639c-43c1-85ba-4c185a9ad5d3",
- "name": "messageThread"
- }
- }
- },
- {
- "__typename": "field",
- "id": "463d59e6-add9-494a-a88f-a280329fb16e",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "260b37ba-7451-488f-ae65-a7143aa694e8",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "11a2bd26-4856-4ab2-916d-86a07beaccd3",
- "type": "RELATION",
- "name": "messages",
- "label": "Messages",
- "description": "Messages from the thread.",
- "icon": "IconMessage",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "01efe0bd-eda8-494a-b7ea-b4813dcf0b5a",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "c62f3148-1b8d-4fa3-ac29-8a20585bcee9",
- "nameSingular": "messageThread",
- "namePlural": "messageThreads"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "11a2bd26-4856-4ab2-916d-86a07beaccd3",
- "name": "messages"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "f5a97cba-781d-4665-9dea-0eda6d687a99",
- "nameSingular": "message",
- "namePlural": "messages"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "2e91d365-c35a-446e-b019-bdf7e51d7d79",
- "name": "messageThread"
- }
- }
- }
- ]
- },
- {
- "__typename": "object",
- "id": "bd4e44a0-4b0d-4392-b0c9-d6c8684e3d44",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "noteTarget",
- "namePlural": "noteTargets",
- "labelSingular": "Note Target",
- "labelPlural": "Note Targets",
- "description": "A note target",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "96b428bf-6cda-44ec-a774-764075c44326",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "c60efe10-abb9-4c1f-8a27-e97884770401",
- "type": "UUID",
- "name": "personId",
- "label": "Person id (foreign key)",
- "description": "NoteTarget person id foreign key",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "96b428bf-6cda-44ec-a774-764075c44326",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "e1b3d8bb-787a-4f2c-a6b0-5384f7ce19fe",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "f4814caa-d470-415b-83e0-015903b68bca",
- "type": "UUID",
- "name": "myCustomObjectId",
- "label": "myCustomObject ID (foreign key)",
- "description": "NoteTarget myCustomObject id foreign key",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.176Z",
- "updatedAt": "2024-08-05T17:09:54.176Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "e884eac3-4cbd-40af-970e-a34b409c0acd",
- "type": "RELATION",
- "name": "myCustomObject",
- "label": "myCustomObject",
- "description": "NoteTarget myCustomObject",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.177Z",
- "updatedAt": "2024-08-05T17:09:54.177Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "4f4d3969-913b-478c-a41d-9daffc9b2255",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "bd4e44a0-4b0d-4392-b0c9-d6c8684e3d44",
- "nameSingular": "noteTarget",
- "namePlural": "noteTargets"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "e884eac3-4cbd-40af-970e-a34b409c0acd",
- "name": "myCustomObject"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "56dffccc-daf8-4c49-8919-f19787f07846",
- "nameSingular": "myCustomObject",
- "namePlural": "myCustomObjects"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "87631266-4a85-4c49-82d1-90d1805c3de6",
- "name": "noteTargets"
- }
- }
- },
- {
- "__typename": "field",
- "id": "6267cb8e-04e2-48ce-a479-3108b2bf1801",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "c4946aa0-9c73-4daf-af28-85fff088525c",
- "type": "UUID",
- "name": "opportunityId",
- "label": "Opportunity id (foreign key)",
- "description": "NoteTarget opportunity id foreign key",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "b8d93efe-14da-47a2-bb24-96ae2d037b59",
- "type": "RELATION",
- "name": "note",
- "label": "Note",
- "description": "NoteTarget note",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "72daf099-f592-4521-8a4e-febd67309f47",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "bd4e44a0-4b0d-4392-b0c9-d6c8684e3d44",
- "nameSingular": "noteTarget",
- "namePlural": "noteTargets"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "b8d93efe-14da-47a2-bb24-96ae2d037b59",
- "name": "note"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "f62992f2-80ef-477c-ae60-fc7a862b0f4a",
- "nameSingular": "note",
- "namePlural": "notes"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "d6d5a326-5a21-46a6-96b5-c70549f8f937",
- "name": "noteTargets"
- }
- }
- },
- {
- "__typename": "field",
- "id": "18504863-6684-44f8-afa6-12e2eae7f428",
- "type": "UUID",
- "name": "companyId",
- "label": "Company id (foreign key)",
- "description": "NoteTarget company id foreign key",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "459cd941-1db8-4e61-af0e-35812736cfd1",
- "type": "RELATION",
- "name": "opportunity",
- "label": "Opportunity",
- "description": "NoteTarget opportunity",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "a0fa9159-85ab-47c5-bdac-46f7acbb78a7",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "bd4e44a0-4b0d-4392-b0c9-d6c8684e3d44",
- "nameSingular": "noteTarget",
- "namePlural": "noteTargets"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "459cd941-1db8-4e61-af0e-35812736cfd1",
- "name": "opportunity"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "b95b3f38-9fc2-4d7e-a823-7791cf13d089",
- "nameSingular": "opportunity",
- "namePlural": "opportunities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "8ee18f64-937c-489b-893c-80bc44f9c105",
- "name": "noteTargets"
- }
- }
- },
- {
- "__typename": "field",
- "id": "cb654210-43c9-4ff7-95ee-8250c1d80e8d",
- "type": "RELATION",
- "name": "company",
- "label": "Company",
- "description": "NoteTarget company",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "d420db15-3060-4760-afd0-8485c76e53b4",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "bd4e44a0-4b0d-4392-b0c9-d6c8684e3d44",
- "nameSingular": "noteTarget",
- "namePlural": "noteTargets"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "cb654210-43c9-4ff7-95ee-8250c1d80e8d",
- "name": "company"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "63261a95-39ac-4826-bc8b-7fc0fd21a8ad",
- "name": "noteTargets"
- }
- }
- },
- {
- "__typename": "field",
- "id": "2d7a63c8-3a4f-4e20-aa73-f417ee714632",
- "type": "UUID",
- "name": "noteId",
- "label": "Note id (foreign key)",
- "description": "NoteTarget note id foreign key",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "2f2fc7fb-51c5-4084-8d97-13b43b49c68a",
- "type": "RELATION",
- "name": "person",
- "label": "Person",
- "description": "NoteTarget person",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "9d20f0c0-e37b-48ca-bc45-da16461aa547",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "bd4e44a0-4b0d-4392-b0c9-d6c8684e3d44",
- "nameSingular": "noteTarget",
- "namePlural": "noteTargets"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "2f2fc7fb-51c5-4084-8d97-13b43b49c68a",
- "name": "person"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "1c1c7ffc-3a45-4069-996a-bdfa8f46b037",
- "name": "noteTargets"
- }
- }
- }
- ]
- },
- {
- "__typename": "object",
- "id": "b95b3f38-9fc2-4d7e-a823-7791cf13d089",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "opportunity",
- "namePlural": "opportunities",
- "labelSingular": "Opportunity",
- "labelPlural": "Opportunities",
- "description": "An opportunity",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "945ed2b8-974b-47cd-a40e-63dd1130919e",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "40cdd413-5239-4887-b5e6-eb32eb1d95e3",
- "type": "RELATION",
- "name": "taskTargets",
- "label": "Tasks",
- "description": "Tasks tied to the opportunity",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "e594dda4-55fc-46ba-8108-5f672a5b1301",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "b95b3f38-9fc2-4d7e-a823-7791cf13d089",
- "nameSingular": "opportunity",
- "namePlural": "opportunities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "40cdd413-5239-4887-b5e6-eb32eb1d95e3",
- "name": "taskTargets"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "77d124cc-049a-44f9-ab59-56e3dd55bb69",
- "nameSingular": "taskTarget",
- "namePlural": "taskTargets"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "705e4379-9ba2-4853-b267-c86dad461dd7",
- "name": "opportunity"
- }
- }
- },
- {
- "__typename": "field",
- "id": "8ee18f64-937c-489b-893c-80bc44f9c105",
- "type": "RELATION",
- "name": "noteTargets",
- "label": "Notes",
- "description": "Notes tied to the opportunity",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "a0fa9159-85ab-47c5-bdac-46f7acbb78a7",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "b95b3f38-9fc2-4d7e-a823-7791cf13d089",
- "nameSingular": "opportunity",
- "namePlural": "opportunities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "8ee18f64-937c-489b-893c-80bc44f9c105",
- "name": "noteTargets"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "bd4e44a0-4b0d-4392-b0c9-d6c8684e3d44",
- "nameSingular": "noteTarget",
- "namePlural": "noteTargets"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "459cd941-1db8-4e61-af0e-35812736cfd1",
- "name": "opportunity"
- }
- }
- },
- {
- "__typename": "field",
- "id": "b32abba8-6801-4bf2-8c62-748fb0f2c224",
- "type": "UUID",
- "name": "companyId",
- "label": "Company id (foreign key)",
- "description": "Opportunity company id foreign key",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "a1a7bb38-6f6c-4bdb-803f-804cdd97cb77",
- "type": "RELATION",
- "name": "favorites",
- "label": "Favorites",
- "description": "Favorites linked to the opportunity",
- "icon": "IconHeart",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "c1110f68-bbc9-4dbf-aae4-c6e5e2569240",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "b95b3f38-9fc2-4d7e-a823-7791cf13d089",
- "nameSingular": "opportunity",
- "namePlural": "opportunities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "a1a7bb38-6f6c-4bdb-803f-804cdd97cb77",
- "name": "favorites"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "d19be8c8-2cf4-4c29-80ae-0d1841dc11c1",
- "nameSingular": "favorite",
- "namePlural": "favorites"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "3464f1ce-34d3-4bf1-ac74-072bf750cc5c",
- "name": "opportunity"
- }
- }
- },
- {
- "__typename": "field",
- "id": "b32af3b6-330f-405b-b9ce-6156797f836a",
- "type": "RELATION",
- "name": "attachments",
- "label": "Attachments",
- "description": "Attachments linked to the opportunity",
- "icon": "IconFileImport",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "0ee1046a-3f9f-477e-8811-5d29021eca38",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "b95b3f38-9fc2-4d7e-a823-7791cf13d089",
- "nameSingular": "opportunity",
- "namePlural": "opportunities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "b32af3b6-330f-405b-b9ce-6156797f836a",
- "name": "attachments"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "9a53b4e1-bce2-4160-8ce3-028e14b2abb7",
- "nameSingular": "attachment",
- "namePlural": "attachments"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "31bbc876-619d-4444-b954-9b6c66343314",
- "name": "opportunity"
- }
- }
- },
- {
- "__typename": "field",
- "id": "59d9b42a-aedf-4bd4-89bb-79416d1c45ba",
- "type": "DATE_TIME",
- "name": "closeDate",
- "label": "Close date",
- "description": "Opportunity close date",
- "icon": "IconCalendarEvent",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "23598371-f3eb-4dc3-9254-c8150639fa2d",
- "type": "SELECT",
- "name": "stage",
- "label": "Stage",
- "description": "Opportunity stage",
- "icon": "IconProgressCheck",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'NEW'",
- "options": [
- {
- "id": "20e58665-2b7c-464b-b25e-6ed2f27cc94a",
- "color": "red",
- "label": "New",
- "value": "NEW",
- "position": 0
- },
- {
- "id": "9c2a17fd-65ad-4b55-82e1-eaf62da947ee",
- "color": "purple",
- "label": "Screening",
- "value": "SCREENING",
- "position": 1
- },
- {
- "id": "a0e93b94-c12f-433d-9971-2e7a6d55881b",
- "color": "sky",
- "label": "Meeting",
- "value": "MEETING",
- "position": 2
- },
- {
- "id": "7c510ced-cbea-4e39-98a0-35b449a1ac28",
- "color": "turquoise",
- "label": "Proposal",
- "value": "PROPOSAL",
- "position": 3
- },
- {
- "id": "ff6973c2-a8eb-4e37-b742-259ea74893dd",
- "color": "yellow",
- "label": "Customer",
- "value": "CUSTOMER",
- "position": 4
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "f1e9a8ea-6c0a-4bf4-acef-86d0855ac9ae",
- "type": "ACTOR",
- "name": "createdBy",
- "label": "Created by",
- "description": "The creator of the record",
- "icon": "IconCreativeCommonsSa",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": {
- "name": "''",
- "source": "'MANUAL'"
- },
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "f28ff3e4-c792-4f94-84d2-4df0572d29cb",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "64c6f5b9-63c4-4079-bd72-b54bf2b0c1ae",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "71341870-4e4d-4399-ab74-8f277047664e",
- "type": "RELATION",
- "name": "activityTargets",
- "label": "Activities",
- "description": "Activities tied to the opportunity",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "d2a53784-3664-49ab-983e-5ad5bf15dbd0",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "b95b3f38-9fc2-4d7e-a823-7791cf13d089",
- "nameSingular": "opportunity",
- "namePlural": "opportunities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "71341870-4e4d-4399-ab74-8f277047664e",
- "name": "activityTargets"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "648268ca-94bf-418e-853c-56d0f51472b3",
- "nameSingular": "activityTarget",
- "namePlural": "activityTargets"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "997b0618-d3f7-4e5c-8c8e-2ba1bad10549",
- "name": "opportunity"
- }
- }
- },
- {
- "__typename": "field",
- "id": "713c39d7-63e2-4b0e-bd5c-d240b840255e",
- "type": "RELATION",
- "name": "timelineActivities",
- "label": "Timeline Activities",
- "description": "Timeline Activities linked to the opportunity.",
- "icon": "IconTimelineEvent",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "61e4edee-13d4-4edd-9101-b9dc5ea5506a",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "b95b3f38-9fc2-4d7e-a823-7791cf13d089",
- "nameSingular": "opportunity",
- "namePlural": "opportunities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "713c39d7-63e2-4b0e-bd5c-d240b840255e",
- "name": "timelineActivities"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "94ef21ab-5eca-4c80-b378-2a207dcca2e4",
- "nameSingular": "timelineActivity",
- "namePlural": "timelineActivities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "2c3baa6b-7ffe-470e-bd9d-0532e2bce3ac",
- "name": "opportunity"
- }
- }
- },
- {
- "__typename": "field",
- "id": "945ed2b8-974b-47cd-a40e-63dd1130919e",
- "type": "TEXT",
- "name": "name",
- "label": "Name",
- "description": "The opportunity name",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "eeeecdec-299d-4ac1-8475-180b9de43351",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "28b61c8a-8437-4770-9b12-f3d0e591bee8",
- "type": "RELATION",
- "name": "company",
- "label": "Company",
- "description": "Opportunity company",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "67d4ff08-f5e6-4382-8996-67fdc2d02125",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "b95b3f38-9fc2-4d7e-a823-7791cf13d089",
- "nameSingular": "opportunity",
- "namePlural": "opportunities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "28b61c8a-8437-4770-9b12-f3d0e591bee8",
- "name": "company"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "cbd94612-00a2-4efd-8869-93f945e93076",
- "name": "opportunities"
- }
- }
- },
- {
- "__typename": "field",
- "id": "dc7898b0-d2b7-4910-bedc-a6fe8eb4c41e",
- "type": "RELATION",
- "name": "pointOfContact",
- "label": "Point of Contact",
- "description": "Opportunity point of contact",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "3e039f55-e535-406a-8a80-185123910b7a",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "b95b3f38-9fc2-4d7e-a823-7791cf13d089",
- "nameSingular": "opportunity",
- "namePlural": "opportunities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "dc7898b0-d2b7-4910-bedc-a6fe8eb4c41e",
- "name": "pointOfContact"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "e1ecbeb4-76cb-4f9a-8829-ac0665854c69",
- "name": "pointOfContactForOpportunities"
- }
- }
- },
- {
- "__typename": "field",
- "id": "35f32ceb-5f9c-4106-84e1-a480e015fb6f",
- "type": "UUID",
- "name": "pointOfContactId",
- "label": "Point of Contact id (foreign key)",
- "description": "Opportunity point of contact id foreign key",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "d4fdbcc2-9de3-4ec8-a3d2-6126f01cd930",
- "type": "CURRENCY",
- "name": "amount",
- "label": "Amount",
- "description": "Opportunity amount",
- "icon": "IconCurrencyDollar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": {
- "amountMicros": null,
- "currencyCode": "''"
- },
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6fe0ff62-8159-4a5f-b0cd-2ca1dfcf5fb7",
- "type": "POSITION",
- "name": "position",
- "label": "Position",
- "description": "Opportunity record position",
- "icon": "IconHierarchy2",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "b889efa2-e58a-471c-b258-3c5ef2fa09e9",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "messageParticipant",
- "namePlural": "messageParticipants",
- "labelSingular": "Message Participant",
- "labelPlural": "Message Participants",
- "description": "Message Participants",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "3ad8eb5c-c148-43f4-89b9-3152b77854e5",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "a7036ff9-a86d-4290-9f2a-cc360c86fe1e",
- "type": "RELATION",
- "name": "workspaceMember",
- "label": "Workspace Member",
- "description": "Workspace member",
- "icon": "IconCircleUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "94c22c13-b00a-4f60-b2d2-f34b9efe6aa2",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "b889efa2-e58a-471c-b258-3c5ef2fa09e9",
- "nameSingular": "messageParticipant",
- "namePlural": "messageParticipants"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "a7036ff9-a86d-4290-9f2a-cc360c86fe1e",
- "name": "workspaceMember"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "dd7ee456-52bf-4335-bee9-7ba18a1e9a09",
- "name": "messageParticipants"
- }
- }
- },
- {
- "__typename": "field",
- "id": "3779c76a-30a8-45bc-a56a-6bfc084a9b29",
- "type": "RELATION",
- "name": "person",
- "label": "Person",
- "description": "Person",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "f26f3e6e-35bf-474a-9679-fbfbb009d67d",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "b889efa2-e58a-471c-b258-3c5ef2fa09e9",
- "nameSingular": "messageParticipant",
- "namePlural": "messageParticipants"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "3779c76a-30a8-45bc-a56a-6bfc084a9b29",
- "name": "person"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "4227c9a5-6dd3-4de0-9248-e62572afc92b",
- "name": "messageParticipants"
- }
- }
- },
- {
- "__typename": "field",
- "id": "2efee208-73da-4ca1-ba73-19763d507611",
- "type": "RELATION",
- "name": "message",
- "label": "Message",
- "description": "Message",
- "icon": "IconMessage",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "099ebe85-572a-4f77-b077-475f97c0d54c",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "b889efa2-e58a-471c-b258-3c5ef2fa09e9",
- "nameSingular": "messageParticipant",
- "namePlural": "messageParticipants"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "2efee208-73da-4ca1-ba73-19763d507611",
- "name": "message"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "f5a97cba-781d-4665-9dea-0eda6d687a99",
- "nameSingular": "message",
- "namePlural": "messages"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "5291bbf6-1c32-47fe-8164-ebd6dca187ad",
- "name": "messageParticipants"
- }
- }
- },
- {
- "__typename": "field",
- "id": "199bc901-b741-42c5-85dd-4869ce61c879",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "e218128f-4d7f-4aa8-9dd2-28849b6c538b",
- "type": "TEXT",
- "name": "displayName",
- "label": "Display Name",
- "description": "Display Name",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "71f33a61-2df2-4e23-bdd4-175e572e87ed",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "25cbd116-0230-46f6-88a7-4943ac810ec7",
- "type": "UUID",
- "name": "personId",
- "label": "Person id (foreign key)",
- "description": "Person id foreign key",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "3ad8eb5c-c148-43f4-89b9-3152b77854e5",
- "type": "TEXT",
- "name": "handle",
- "label": "Handle",
- "description": "Handle",
- "icon": "IconAt",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "0e8a37ac-fd49-4d07-9695-7a156b5469b7",
- "type": "SELECT",
- "name": "role",
- "label": "Role",
- "description": "Role",
- "icon": "IconAt",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'from'",
- "options": [
- {
- "id": "333b63f9-8a5a-4532-ac53-c03b300fc23e",
- "color": "green",
- "label": "From",
- "value": "from",
- "position": 0
- },
- {
- "id": "0e980644-befb-4f91-91db-b566c8ff5533",
- "color": "blue",
- "label": "To",
- "value": "to",
- "position": 1
- },
- {
- "id": "662e29a9-43bd-40ad-a4b7-e728cc2489f0",
- "color": "orange",
- "label": "Cc",
- "value": "cc",
- "position": 2
- },
- {
- "id": "c3405807-634e-4195-bc58-5d4f0eae8b29",
- "color": "red",
- "label": "Bcc",
- "value": "bcc",
- "position": 3
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "dd20415d-fb86-40b6-99bb-25b128d81776",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6c0f1e3e-8aea-4e5d-9298-089a0a3dd0de",
- "type": "UUID",
- "name": "workspaceMemberId",
- "label": "Workspace Member id (foreign key)",
- "description": "Workspace member id foreign key",
- "icon": "IconCircleUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "4bef8eac-ecb2-4de2-af0e-7c9e1fca1f06",
- "type": "UUID",
- "name": "messageId",
- "label": "Message id (foreign key)",
- "description": "Message id foreign key",
- "icon": "IconMessage",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "9a53b4e1-bce2-4160-8ce3-028e14b2abb7",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "attachment",
- "namePlural": "attachments",
- "labelSingular": "Attachment",
- "labelPlural": "Attachments",
- "description": "An attachment",
- "icon": "IconFileImport",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "13649d8b-94c8-40ce-9dbb-9c7ab32a2ed8",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "e985e32a-532f-4259-828f-cac80c5fc3b8",
- "type": "RELATION",
- "name": "note",
- "label": "Note",
- "description": "Attachment note",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "ac29383b-d63e-4c0e-b28a-1abc03ab2b5a",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "9a53b4e1-bce2-4160-8ce3-028e14b2abb7",
- "nameSingular": "attachment",
- "namePlural": "attachments"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "e985e32a-532f-4259-828f-cac80c5fc3b8",
- "name": "note"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "f62992f2-80ef-477c-ae60-fc7a862b0f4a",
- "nameSingular": "note",
- "namePlural": "notes"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "38a2a378-bac0-4c4d-bf05-7f9ff995b860",
- "name": "attachments"
- }
- }
- },
- {
- "__typename": "field",
- "id": "2352488a-4c22-42ac-9645-2ef1cedc80b5",
- "type": "UUID",
- "name": "activityId",
- "label": "Activity id (foreign key)",
- "description": "Attachment activity id foreign key",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "c2ace3e1-07b9-4073-b27d-023586dfc0d2",
- "type": "TEXT",
- "name": "type",
- "label": "Type",
- "description": "Attachment type",
- "icon": "IconList",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "df6ee118-1cb0-4b2e-8668-3693d4d87ae2",
- "type": "RELATION",
- "name": "person",
- "label": "Person",
- "description": "Attachment person",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "4b90ec4b-3199-4cea-9e8b-01498967bd9f",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "9a53b4e1-bce2-4160-8ce3-028e14b2abb7",
- "nameSingular": "attachment",
- "namePlural": "attachments"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "df6ee118-1cb0-4b2e-8668-3693d4d87ae2",
- "name": "person"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "1b21ef27-ba22-46ab-967e-f2d9f780bf8b",
- "name": "attachments"
- }
- }
- },
- {
- "__typename": "field",
- "id": "53d23be1-1b1f-4782-900c-3501e5ff1e96",
- "type": "TEXT",
- "name": "fullPath",
- "label": "Full path",
- "description": "Attachment full path",
- "icon": "IconLink",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "41623677-7310-44a0-80a2-4a19880bccd1",
- "type": "UUID",
- "name": "opportunityId",
- "label": "Opportunity id (foreign key)",
- "description": "Attachment opportunity id foreign key",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "0f978508-2e4a-4bc6-bbaf-87ad6acbe08a",
- "type": "RELATION",
- "name": "task",
- "label": "Task",
- "description": "Attachment task",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "aeca7339-1ff5-45cb-b9f4-d8bd9ec572d9",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "9a53b4e1-bce2-4160-8ce3-028e14b2abb7",
- "nameSingular": "attachment",
- "namePlural": "attachments"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "0f978508-2e4a-4bc6-bbaf-87ad6acbe08a",
- "name": "task"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "99f8caa6-263c-4690-8dc0-eb7645304cf5",
- "nameSingular": "task",
- "namePlural": "tasks"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "7e719850-091f-4876-87b0-4eb5fd9847af",
- "name": "attachments"
- }
- }
- },
- {
- "__typename": "field",
- "id": "263a372a-3df9-4c57-9e5b-80db73c7b56e",
- "type": "UUID",
- "name": "authorId",
- "label": "Author id (foreign key)",
- "description": "Attachment author id foreign key",
- "icon": "IconCircleUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "b86a10c8-fc7f-436a-8b05-7b6c618357a7",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "d9a522cf-9b09-496d-b5be-a57589c42bc5",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "3d2bbb4e-e908-4bc5-97d7-a152dd7652bf",
- "type": "RELATION",
- "name": "author",
- "label": "Author",
- "description": "Attachment author",
- "icon": "IconCircleUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "c86299f2-7210-4c89-a2ab-29e17f21edc8",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "9a53b4e1-bce2-4160-8ce3-028e14b2abb7",
- "nameSingular": "attachment",
- "namePlural": "attachments"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "3d2bbb4e-e908-4bc5-97d7-a152dd7652bf",
- "name": "author"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "1b2d1e2c-290d-4a0e-adf9-192e5fac103c",
- "name": "authoredAttachments"
- }
- }
- },
- {
- "__typename": "field",
- "id": "31bbc876-619d-4444-b954-9b6c66343314",
- "type": "RELATION",
- "name": "opportunity",
- "label": "Opportunity",
- "description": "Attachment opportunity",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "0ee1046a-3f9f-477e-8811-5d29021eca38",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "9a53b4e1-bce2-4160-8ce3-028e14b2abb7",
- "nameSingular": "attachment",
- "namePlural": "attachments"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "31bbc876-619d-4444-b954-9b6c66343314",
- "name": "opportunity"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "b95b3f38-9fc2-4d7e-a823-7791cf13d089",
- "nameSingular": "opportunity",
- "namePlural": "opportunities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "b32af3b6-330f-405b-b9ce-6156797f836a",
- "name": "attachments"
- }
- }
- },
- {
- "__typename": "field",
- "id": "3ec97541-3618-453f-b498-e2a0b2d7aee4",
- "type": "UUID",
- "name": "noteId",
- "label": "Note id (foreign key)",
- "description": "Attachment note id foreign key",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "2e1b103b-a75b-4ebc-8219-4b59027bd3fd",
- "type": "RELATION",
- "name": "myCustomObject",
- "label": "myCustomObject",
- "description": "Attachment myCustomObject",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.173Z",
- "updatedAt": "2024-08-05T17:09:54.173Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "bd914a9e-b1f8-43c6-af60-3afe46518988",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "9a53b4e1-bce2-4160-8ce3-028e14b2abb7",
- "nameSingular": "attachment",
- "namePlural": "attachments"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "2e1b103b-a75b-4ebc-8219-4b59027bd3fd",
- "name": "myCustomObject"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "56dffccc-daf8-4c49-8919-f19787f07846",
- "nameSingular": "myCustomObject",
- "namePlural": "myCustomObjects"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "a4580aee-6fb4-4b5d-87c0-daf24745ca13",
- "name": "attachments"
- }
- }
- },
- {
- "__typename": "field",
- "id": "c538c173-a98b-4019-b956-ab997255a429",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "13649d8b-94c8-40ce-9dbb-9c7ab32a2ed8",
- "type": "TEXT",
- "name": "name",
- "label": "Name",
- "description": "Attachment name",
- "icon": "IconFileUpload",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "fffa8f0c-6e71-42fa-8127-50c27909efe2",
- "type": "UUID",
- "name": "taskId",
- "label": "Task id (foreign key)",
- "description": "Attachment task id foreign key",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6496b8e0-2d8f-493e-8973-fcba2aa84b59",
- "type": "RELATION",
- "name": "company",
- "label": "Company",
- "description": "Attachment company",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "be6051cd-703c-4539-89ed-e643784bad26",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "9a53b4e1-bce2-4160-8ce3-028e14b2abb7",
- "nameSingular": "attachment",
- "namePlural": "attachments"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "6496b8e0-2d8f-493e-8973-fcba2aa84b59",
- "name": "company"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "3a2bd134-5b31-4bde-a64f-d5244a8e6271",
- "name": "attachments"
- }
- }
- },
- {
- "__typename": "field",
- "id": "827ed149-e80e-4d73-a687-23e005e20670",
- "type": "UUID",
- "name": "personId",
- "label": "Person id (foreign key)",
- "description": "Attachment person id foreign key",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "352954a9-daf9-4d56-9360-51587debc379",
- "type": "UUID",
- "name": "myCustomObjectId",
- "label": "myCustomObject ID (foreign key)",
- "description": "Attachment myCustomObject id foreign key",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.172Z",
- "updatedAt": "2024-08-05T17:09:54.172Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "394c0644-d8bd-44a8-82c9-6e2a4c9aa19c",
- "type": "RELATION",
- "name": "activity",
- "label": "Activity",
- "description": "Attachment activity",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "23518310-2443-4907-8ac6-b77bf340d99d",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "9a53b4e1-bce2-4160-8ce3-028e14b2abb7",
- "nameSingular": "attachment",
- "namePlural": "attachments"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "394c0644-d8bd-44a8-82c9-6e2a4c9aa19c",
- "name": "activity"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "cf6f8138-3445-4a36-b137-41ebb8f2e3dc",
- "nameSingular": "activity",
- "namePlural": "activities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "d9f1711b-a8b1-48ee-9f81-503bbf945b87",
- "name": "attachments"
- }
- }
- },
- {
- "__typename": "field",
- "id": "86007c49-92a3-4b62-aa0a-5d6418675b0a",
- "type": "UUID",
- "name": "companyId",
- "label": "Company id (foreign key)",
- "description": "Attachment company id foreign key",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "99f8caa6-263c-4690-8dc0-eb7645304cf5",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "task",
- "namePlural": "tasks",
- "labelSingular": "Task",
- "labelPlural": "Tasks",
- "description": "A task",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "3a9c10bc-f466-42e3-aa9d-203c8a946955",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "4e474cea-2549-45bc-9c60-4eecff56a186",
- "type": "SELECT",
- "name": "status",
- "label": "Status",
- "description": "Task status",
- "icon": "IconCheck",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'TODO'",
- "options": [
- {
- "id": "d6af8120-3e3d-49ba-b6ac-3089e3446b6c",
- "color": "sky",
- "label": "To do",
- "value": "TODO",
- "position": 0
- },
- {
- "id": "0d66033b-96f3-4128-8182-a25751a50ce2",
- "color": "purple",
- "label": "In progress",
- "value": "IN_PROGESS",
- "position": 1
- },
- {
- "id": "8e897afd-d233-4943-92c3-89e8979faa9c",
- "color": "green",
- "label": "Done",
- "value": "DONE",
- "position": 1
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "53347f0d-658a-45b0-91b5-2088adbeaaf0",
- "type": "RELATION",
- "name": "assignee",
- "label": "Assignee",
- "description": "Task assignee",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "5527b9f6-55ec-4efd-b244-03e91b01e91b",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "99f8caa6-263c-4690-8dc0-eb7645304cf5",
- "nameSingular": "task",
- "namePlural": "tasks"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "53347f0d-658a-45b0-91b5-2088adbeaaf0",
- "name": "assignee"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "fefca31b-ba53-4860-b04e-5b9944587693",
- "name": "assignedTasks"
- }
- }
- },
- {
- "__typename": "field",
- "id": "9233de38-fac9-4df0-bb13-d68c14389a59",
- "type": "UUID",
- "name": "assigneeId",
- "label": "Assignee id (foreign key)",
- "description": "Task assignee id foreign key",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "886d752e-cc9d-43c5-8e73-ee99943ae04c",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "7f33f6b1-1c59-4860-ba51-ed0bc3356f06",
- "type": "RICH_TEXT",
- "name": "body",
- "label": "Body",
- "description": "Task body",
- "icon": "IconFilePencil",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "90f8da4c-865b-4ebe-ae5c-d4377081d8d5",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "c7759c16-3319-40b2-873d-84e3d4a1d3ad",
- "type": "DATE_TIME",
- "name": "dueAt",
- "label": "Due Date",
- "description": "Task due date",
- "icon": "IconCalendarEvent",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "a6c74223-e44c-4677-bde7-e3e06c28fe01",
- "type": "POSITION",
- "name": "position",
- "label": "Position",
- "description": "Task record position",
- "icon": "IconHierarchy2",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "7e719850-091f-4876-87b0-4eb5fd9847af",
- "type": "RELATION",
- "name": "attachments",
- "label": "Attachments",
- "description": "Task attachments",
- "icon": "IconFileImport",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "aeca7339-1ff5-45cb-b9f4-d8bd9ec572d9",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "99f8caa6-263c-4690-8dc0-eb7645304cf5",
- "nameSingular": "task",
- "namePlural": "tasks"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "7e719850-091f-4876-87b0-4eb5fd9847af",
- "name": "attachments"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "9a53b4e1-bce2-4160-8ce3-028e14b2abb7",
- "nameSingular": "attachment",
- "namePlural": "attachments"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "0f978508-2e4a-4bc6-bbaf-87ad6acbe08a",
- "name": "task"
- }
- }
- },
- {
- "__typename": "field",
- "id": "f1ed6bba-53bc-4f9c-ac40-504a9ff5bade",
- "type": "RELATION",
- "name": "taskTargets",
- "label": "Targets",
- "description": "Task targets",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "85f92b6a-bc71-4da4-ba4e-7b0685a05fde",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "99f8caa6-263c-4690-8dc0-eb7645304cf5",
- "nameSingular": "task",
- "namePlural": "tasks"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "f1ed6bba-53bc-4f9c-ac40-504a9ff5bade",
- "name": "taskTargets"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "77d124cc-049a-44f9-ab59-56e3dd55bb69",
- "nameSingular": "taskTarget",
- "namePlural": "taskTargets"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "31d8d648-5118-4b59-8c1e-876e83bf85f3",
- "name": "task"
- }
- }
- },
- {
- "__typename": "field",
- "id": "e10938b5-0a72-48b3-8fb1-4984d1bd651b",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "80fe7004-903e-4bdd-985d-9ef7e6acd793",
- "type": "RELATION",
- "name": "favorites",
- "label": "Favorites",
- "description": "Favorites linked to the task",
- "icon": "IconHeart",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "32b10a0d-0ca4-4027-be9e-ab8d8be608d1",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "99f8caa6-263c-4690-8dc0-eb7645304cf5",
- "nameSingular": "task",
- "namePlural": "tasks"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "80fe7004-903e-4bdd-985d-9ef7e6acd793",
- "name": "favorites"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "d19be8c8-2cf4-4c29-80ae-0d1841dc11c1",
- "nameSingular": "favorite",
- "namePlural": "favorites"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "e7201f19-bfa7-42e1-9550-7c848a842ecc",
- "name": "task"
- }
- }
- },
- {
- "__typename": "field",
- "id": "3a9c10bc-f466-42e3-aa9d-203c8a946955",
- "type": "TEXT",
- "name": "title",
- "label": "Title",
- "description": "Task title",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "49cf9eb7-53bc-4347-93f5-daec9c219cfa",
- "type": "RELATION",
- "name": "timelineActivities",
- "label": "Timeline Activities",
- "description": "Timeline Activities linked to the task.",
- "icon": "IconTimelineEvent",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "9f7f6a7c-072e-4818-8077-d0d0c9601cb0",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "99f8caa6-263c-4690-8dc0-eb7645304cf5",
- "nameSingular": "task",
- "namePlural": "tasks"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "49cf9eb7-53bc-4347-93f5-daec9c219cfa",
- "name": "timelineActivities"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "94ef21ab-5eca-4c80-b378-2a207dcca2e4",
- "nameSingular": "timelineActivity",
- "namePlural": "timelineActivities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "6ea41d58-7eae-4434-bb2f-9a1b2c30dba3",
- "name": "task"
- }
- }
- },
- {
- "__typename": "field",
- "id": "504f6d88-cdaa-4e7f-beda-14d7e8adf203",
- "type": "ACTOR",
- "name": "createdBy",
- "label": "Created by",
- "description": "The creator of the record",
- "icon": "IconCreativeCommonsSa",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": {
- "name": "''",
- "source": "'MANUAL'"
- },
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "94ef21ab-5eca-4c80-b378-2a207dcca2e4",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "timelineActivity",
- "namePlural": "timelineActivities",
- "labelSingular": "Timeline Activity",
- "labelPlural": "Timeline Activities",
- "description": "Aggregated / filtered event to be displayed on the timeline",
- "icon": "IconIconTimelineEvent",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "13cff5d9-b6d4-4eaa-82d3-31c98395deca",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "13cff5d9-b6d4-4eaa-82d3-31c98395deca",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "99599532-c0e9-4d62-b4a6-89866e0374be",
- "type": "RELATION",
- "name": "note",
- "label": "Note",
- "description": "Event note",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "bc6b24e6-9fcd-43fd-a2ba-c12f5d022132",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "94ef21ab-5eca-4c80-b378-2a207dcca2e4",
- "nameSingular": "timelineActivity",
- "namePlural": "timelineActivities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "99599532-c0e9-4d62-b4a6-89866e0374be",
- "name": "note"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "f62992f2-80ef-477c-ae60-fc7a862b0f4a",
- "nameSingular": "note",
- "namePlural": "notes"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "383d3f90-d691-4487-a13d-e80c50fb756e",
- "name": "timelineActivities"
- }
- }
- },
- {
- "__typename": "field",
- "id": "b148030f-e465-4961-9c94-d096dc332bf7",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "e86bb958-5af5-4e89-8104-925159a41d79",
- "type": "TEXT",
- "name": "name",
- "label": "Event name",
- "description": "Event name",
- "icon": "IconAbc",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "a866ea59-2ff6-4a55-816f-f19927ff742e",
- "type": "UUID",
- "name": "taskId",
- "label": "Task id (foreign key)",
- "description": "Event task id foreign key",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "136cece0-793d-4274-9cc4-f03d5aea0ce0",
- "type": "UUID",
- "name": "myCustomObjectId",
- "label": "myCustomObject ID (foreign key)",
- "description": "Timeline Activity myCustomObject id foreign key",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.152Z",
- "updatedAt": "2024-08-05T17:09:54.152Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6c46473c-5baa-4795-8eed-3b0649cc9ef0",
- "type": "UUID",
- "name": "opportunityId",
- "label": "Opportunity id (foreign key)",
- "description": "Event opportunity id foreign key",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "dba195e2-63d6-42ca-94aa-42c87b4306ea",
- "type": "RELATION",
- "name": "workspaceMember",
- "label": "Workspace Member",
- "description": "Event workspace member",
- "icon": "IconCircleUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "170c6f88-63b3-41ff-9e5d-044968a062a4",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "94ef21ab-5eca-4c80-b378-2a207dcca2e4",
- "nameSingular": "timelineActivity",
- "namePlural": "timelineActivities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "dba195e2-63d6-42ca-94aa-42c87b4306ea",
- "name": "workspaceMember"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "4ae17923-dd16-45c7-9df3-8cee92584a52",
- "name": "timelineActivities"
- }
- }
- },
- {
- "__typename": "field",
- "id": "a4101adc-223b-4fa3-a375-b5e49e5a05eb",
- "type": "UUID",
- "name": "linkedRecordId",
- "label": "Linked Record id",
- "description": "Linked Record id",
- "icon": "IconAbc",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "da41fbb2-1e52-416b-be9c-32242ae63e33",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "69e1ecef-09d7-4b53-826e-f440ae72d2b7",
- "type": "RELATION",
- "name": "person",
- "label": "Person",
- "description": "Event person",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "ba3d762d-8fbf-45e5-a958-136a269a396d",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "94ef21ab-5eca-4c80-b378-2a207dcca2e4",
- "nameSingular": "timelineActivity",
- "namePlural": "timelineActivities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "69e1ecef-09d7-4b53-826e-f440ae72d2b7",
- "name": "person"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "c08e6ba8-b7ef-4fa7-b199-c8e93045f8ee",
- "name": "timelineActivities"
- }
- }
- },
- {
- "__typename": "field",
- "id": "6ea41d58-7eae-4434-bb2f-9a1b2c30dba3",
- "type": "RELATION",
- "name": "task",
- "label": "Task",
- "description": "Event task",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "9f7f6a7c-072e-4818-8077-d0d0c9601cb0",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "94ef21ab-5eca-4c80-b378-2a207dcca2e4",
- "nameSingular": "timelineActivity",
- "namePlural": "timelineActivities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "6ea41d58-7eae-4434-bb2f-9a1b2c30dba3",
- "name": "task"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "99f8caa6-263c-4690-8dc0-eb7645304cf5",
- "nameSingular": "task",
- "namePlural": "tasks"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "49cf9eb7-53bc-4347-93f5-daec9c219cfa",
- "name": "timelineActivities"
- }
- }
- },
- {
- "__typename": "field",
- "id": "979ea933-d8a1-4db6-8c29-5c747a690326",
- "type": "RELATION",
- "name": "company",
- "label": "Company",
- "description": "Event company",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "c542c9e0-b4b6-4073-aae6-66299868e9fb",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "94ef21ab-5eca-4c80-b378-2a207dcca2e4",
- "nameSingular": "timelineActivity",
- "namePlural": "timelineActivities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "979ea933-d8a1-4db6-8c29-5c747a690326",
- "name": "company"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "c06142b8-52a9-4b0b-93f6-99e2b5b67ab8",
- "name": "timelineActivities"
- }
- }
- },
- {
- "__typename": "field",
- "id": "55701d3c-1710-4f70-ae03-25690249dddf",
- "type": "RAW_JSON",
- "name": "properties",
- "label": "Event details",
- "description": "Json value for event details",
- "icon": "IconListDetails",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "ff438247-19b7-4ea6-a00e-1f66b4caa523",
- "type": "UUID",
- "name": "linkedObjectMetadataId",
- "label": "Linked Object Metadata Id",
- "description": "inked Object Metadata Id",
- "icon": "IconAbc",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "faacecdd-08e4-4d9a-b64d-abbac4d5320e",
- "type": "TEXT",
- "name": "linkedRecordCachedName",
- "label": "Linked Record cached name",
- "description": "Cached record name",
- "icon": "IconAbc",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "2a612f5a-c6c8-4e82-9368-2ba6f458b4f2",
- "type": "UUID",
- "name": "companyId",
- "label": "Company id (foreign key)",
- "description": "Event company id foreign key",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "8d4a2a2f-a04f-4cd4-add6-8a417220306e",
- "type": "UUID",
- "name": "noteId",
- "label": "Note id (foreign key)",
- "description": "Event note id foreign key",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "e7e04af7-a0a2-4999-9265-e9bafcd0197c",
- "type": "RELATION",
- "name": "myCustomObject",
- "label": "myCustomObject",
- "description": "Timeline Activity myCustomObject",
- "icon": "IconTimeline",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.153Z",
- "updatedAt": "2024-08-05T17:09:54.153Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "e143276e-7f4a-46e8-bf0f-61111f36d4fd",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "94ef21ab-5eca-4c80-b378-2a207dcca2e4",
- "nameSingular": "timelineActivity",
- "namePlural": "timelineActivities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "e7e04af7-a0a2-4999-9265-e9bafcd0197c",
- "name": "myCustomObject"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "56dffccc-daf8-4c49-8919-f19787f07846",
- "nameSingular": "myCustomObject",
- "namePlural": "myCustomObjects"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "e7cd7adb-152e-4d19-b2ba-d1b66bc40e79",
- "name": "timelineActivities"
- }
- }
- },
- {
- "__typename": "field",
- "id": "a5a11b28-dc40-42b1-b160-f95e36f25682",
- "type": "UUID",
- "name": "personId",
- "label": "Person id (foreign key)",
- "description": "Event person id foreign key",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "5494a528-2d5c-402b-b5b0-30b0d30852a1",
- "type": "UUID",
- "name": "workspaceMemberId",
- "label": "Workspace Member id (foreign key)",
- "description": "Event workspace member id foreign key",
- "icon": "IconCircleUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "2c3baa6b-7ffe-470e-bd9d-0532e2bce3ac",
- "type": "RELATION",
- "name": "opportunity",
- "label": "Opportunity",
- "description": "Event opportunity",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "61e4edee-13d4-4edd-9101-b9dc5ea5506a",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "94ef21ab-5eca-4c80-b378-2a207dcca2e4",
- "nameSingular": "timelineActivity",
- "namePlural": "timelineActivities"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "2c3baa6b-7ffe-470e-bd9d-0532e2bce3ac",
- "name": "opportunity"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "b95b3f38-9fc2-4d7e-a823-7791cf13d089",
- "nameSingular": "opportunity",
- "namePlural": "opportunities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "713c39d7-63e2-4b0e-bd5c-d240b840255e",
- "name": "timelineActivities"
- }
- }
- },
- {
- "__typename": "field",
- "id": "2371abba-e2a8-42c1-96cf-127f2fd2fddc",
- "type": "DATE_TIME",
- "name": "happensAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "90e63030-f26d-46c8-b27a-13686b717538",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "connectedAccount",
- "namePlural": "connectedAccounts",
- "labelSingular": "Connected Account",
- "labelPlural": "Connected Accounts",
- "description": "A connected account",
- "icon": "IconAt",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "6a63f624-b6fe-4b46-ab94-6d9e327dedf8",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "6b464b10-e402-4862-887c-eccc38af9145",
- "type": "UUID",
- "name": "accountOwnerId",
- "label": "Account Owner id (foreign key)",
- "description": "Account Owner id foreign key",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "b392b533-9e94-4c00-8dfd-5183c6a544df",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "b6b3881a-852b-42dd-bfe0-65eab4dbcb0a",
- "type": "TEXT",
- "name": "provider",
- "label": "provider",
- "description": "The account provider",
- "icon": "IconSettings",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "7e0a02a3-6d2f-4064-a2fa-e13da62c0e6f",
- "type": "TEXT",
- "name": "refreshToken",
- "label": "Refresh Token",
- "description": "Messaging provider refresh token",
- "icon": "IconKey",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "55a55985-3e1d-4db6-b0ac-3585d72b69ed",
- "type": "RELATION",
- "name": "messageChannels",
- "label": "Message Channels",
- "description": "Message Channels",
- "icon": "IconMessage",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "1a74fdd8-63d4-407f-9d25-7e2e6c4d271c",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "90e63030-f26d-46c8-b27a-13686b717538",
- "nameSingular": "connectedAccount",
- "namePlural": "connectedAccounts"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "55a55985-3e1d-4db6-b0ac-3585d72b69ed",
- "name": "messageChannels"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "219d7acf-5934-44dc-8789-62ade666cb43",
- "nameSingular": "messageChannel",
- "namePlural": "messageChannels"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "252a6670-31ea-4b7a-a75f-09c44f4822be",
- "name": "connectedAccount"
- }
- }
- },
- {
- "__typename": "field",
- "id": "ff264a3b-dcfa-4a94-aa6b-3416456ca567",
- "type": "TEXT",
- "name": "handleAliases",
- "label": "Handle Aliases",
- "description": "Handle Aliases",
- "icon": "IconMail",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "793ca9eb-06ac-433a-b0c3-d62139cbd71c",
- "type": "RELATION",
- "name": "calendarChannels",
- "label": "Calendar Channels",
- "description": "Calendar Channels",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "69dde225-0e12-4df6-ab55-d870d6dec717",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "90e63030-f26d-46c8-b27a-13686b717538",
- "nameSingular": "connectedAccount",
- "namePlural": "connectedAccounts"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "793ca9eb-06ac-433a-b0c3-d62139cbd71c",
- "name": "calendarChannels"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "3f89df71-38d5-46f4-818f-076a5ee77e48",
- "nameSingular": "calendarChannel",
- "namePlural": "calendarChannels"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "f7f4925d-e186-4fe6-80f5-1ddd1ae5bf22",
- "name": "connectedAccount"
- }
- }
- },
- {
- "__typename": "field",
- "id": "044bb29e-1cea-455e-8cd4-76c3aecfe9c5",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6a63f624-b6fe-4b46-ab94-6d9e327dedf8",
- "type": "TEXT",
- "name": "handle",
- "label": "handle",
- "description": "The account handle (email, username, phone number, etc.)",
- "icon": "IconMail",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "02ff8c81-8978-4dae-b719-2efed251c95d",
- "type": "TEXT",
- "name": "accessToken",
- "label": "Access Token",
- "description": "Messaging provider access token",
- "icon": "IconKey",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "8c36e0eb-108e-4797-97a1-b9b5ea096180",
- "type": "RELATION",
- "name": "accountOwner",
- "label": "Account Owner",
- "description": "Account Owner",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "9a65de46-ef09-429f-b7ba-31cb8a8c7038",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "90e63030-f26d-46c8-b27a-13686b717538",
- "nameSingular": "connectedAccount",
- "namePlural": "connectedAccounts"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "8c36e0eb-108e-4797-97a1-b9b5ea096180",
- "name": "accountOwner"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "4d977e6a-4d0e-4bca-b743-9bc3df1744d6",
- "name": "connectedAccounts"
- }
- }
- },
- {
- "__typename": "field",
- "id": "7aa3c042-1267-4ff7-9dcf-51bf6dafb96d",
- "type": "DATE_TIME",
- "name": "authFailedAt",
- "label": "Auth failed at",
- "description": "Auth failed at",
- "icon": "IconX",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "608ca34b-405b-4b6e-8eaa-7183c45f9b13",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "46ffb6c5-a7fc-4035-bf98-e02f06d67059",
- "type": "TEXT",
- "name": "lastSyncHistoryId",
- "label": "Last sync history ID",
- "description": "Last sync history ID",
- "icon": "IconHistory",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "90df20e5-c655-474f-bb98-b423652e36df",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "view",
- "namePlural": "views",
- "labelSingular": "View",
- "labelPlural": "Views",
- "description": "(System) Views",
- "icon": "IconLayoutCollage",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "1558d329-6983-48af-a136-e5b10f9edd3a",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "fa6d3625-a637-421d-97f6-354c92915ff1",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "4a7f5e32-8c16-43fe-a20b-0847e8002a8a",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "0d2e0bfe-fe67-4df4-af4f-49722ba4bf96",
- "type": "RELATION",
- "name": "viewFilters",
- "label": "View Filters",
- "description": "View Filters",
- "icon": "IconFilterBolt",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "bd7a6047-3eb5-413e-9315-bb28533c4aed",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "90df20e5-c655-474f-bb98-b423652e36df",
- "nameSingular": "view",
- "namePlural": "views"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "0d2e0bfe-fe67-4df4-af4f-49722ba4bf96",
- "name": "viewFilters"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "666caea5-3c1e-4847-9fd9-2d8c1d08eabb",
- "nameSingular": "viewFilter",
- "namePlural": "viewFilters"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "c56cc7db-9e19-470e-9d6d-2b7180fb0fb7",
- "name": "view"
- }
- }
- },
- {
- "__typename": "field",
- "id": "4c25b9f8-40e3-4889-ab95-551cd9fdfbb6",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "0e220989-7171-4776-9045-4cea28effd86",
- "type": "TEXT",
- "name": "type",
- "label": "Type",
- "description": "View type",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'table'",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "1a7b73fc-a1b3-41e1-8971-e11bc73421cf",
- "type": "BOOLEAN",
- "name": "isCompact",
- "label": "Compact View",
- "description": "Describes if the view is in compact mode",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": false,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "d8c8b4c5-d58c-4990-9c43-65d8c070d629",
- "type": "POSITION",
- "name": "position",
- "label": "Position",
- "description": "View position",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6ea01d0e-340e-40e4-a029-89a7cbc07291",
- "type": "RELATION",
- "name": "viewFields",
- "label": "View Fields",
- "description": "View Fields",
- "icon": "IconTag",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "57d32129-b126-417e-98a8-7f1217b29dea",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "90df20e5-c655-474f-bb98-b423652e36df",
- "nameSingular": "view",
- "namePlural": "views"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "6ea01d0e-340e-40e4-a029-89a7cbc07291",
- "name": "viewFields"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "ee025446-440d-49ae-8d0e-ad30b6309840",
- "nameSingular": "viewField",
- "namePlural": "viewFields"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "6725c7ad-a704-436a-be67-a4612bc48e37",
- "name": "view"
- }
- }
- },
- {
- "__typename": "field",
- "id": "737edb22-8d06-4d16-aac0-4eda04062485",
- "type": "TEXT",
- "name": "kanbanFieldMetadataId",
- "label": "kanbanfieldMetadataId",
- "description": "View Kanban column field",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "1558d329-6983-48af-a136-e5b10f9edd3a",
- "type": "TEXT",
- "name": "name",
- "label": "Name",
- "description": "View name",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "8b65e9c3-764d-4569-9d47-0e9146b27802",
- "type": "TEXT",
- "name": "icon",
- "label": "Icon",
- "description": "View icon",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "b6cb0290-080b-4bab-867a-6d32122d24ad",
- "type": "SELECT",
- "name": "key",
- "label": "Key",
- "description": "View key",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'INDEX'",
- "options": [
- {
- "id": "54770bee-85b8-48db-87e9-9ba47fde5b27",
- "color": "red",
- "label": "Index",
- "value": "INDEX",
- "position": 0
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "df99390b-b681-4c2b-ba91-8279f0bf0707",
- "type": "UUID",
- "name": "objectMetadataId",
- "label": "Object Metadata Id",
- "description": "View target object",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "4abadd14-56cd-48e4-8013-7b46de4ffe22",
- "type": "RELATION",
- "name": "viewSorts",
- "label": "View Sorts",
- "description": "View Sorts",
- "icon": "IconArrowsSort",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "53abf7c2-810d-478b-bb2d-689f31322d67",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "90df20e5-c655-474f-bb98-b423652e36df",
- "nameSingular": "view",
- "namePlural": "views"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "4abadd14-56cd-48e4-8013-7b46de4ffe22",
- "name": "viewSorts"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "1b5e63b9-9fc3-485d-86ff-de70ff17a665",
- "nameSingular": "viewSort",
- "namePlural": "viewSorts"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "673fb6fb-5123-4336-9b4b-e4b268c1cffe",
- "name": "view"
- }
- }
- }
- ]
- },
- {
- "__typename": "object",
- "id": "77d124cc-049a-44f9-ab59-56e3dd55bb69",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "taskTarget",
- "namePlural": "taskTargets",
- "labelSingular": "Task Target",
- "labelPlural": "Task Targets",
- "description": "An task target",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "4d792e46-cd2f-4db4-a348-50f1adbf0ebf",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "85958c6a-882f-4304-947c-45a44fb73585",
- "type": "UUID",
- "name": "taskId",
- "label": "Task id (foreign key)",
- "description": "TaskTarget task id foreign key",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "90e006e0-f7b9-49da-acd5-7c36a85e5d53",
- "type": "UUID",
- "name": "opportunityId",
- "label": "Opportunity id (foreign key)",
- "description": "TaskTarget opportunity id foreign key",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "cd786729-40e1-4829-a6ee-9e4bf2e0a04f",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "4d792e46-cd2f-4db4-a348-50f1adbf0ebf",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "e0094c52-055f-4f11-9334-927f01ac586f",
- "type": "UUID",
- "name": "personId",
- "label": "Person id (foreign key)",
- "description": "TaskTarget person id foreign key",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "ea500914-d6c5-45d6-90ef-40c9912c98c2",
- "type": "UUID",
- "name": "companyId",
- "label": "Company id (foreign key)",
- "description": "TaskTarget company id foreign key",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "fc1a31f8-6e1c-4ce1-b6ff-80d1cd605e58",
- "type": "RELATION",
- "name": "person",
- "label": "Person",
- "description": "TaskTarget person",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "182b32c3-9ee9-4a65-937b-d9035ab65300",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "77d124cc-049a-44f9-ab59-56e3dd55bb69",
- "nameSingular": "taskTarget",
- "namePlural": "taskTargets"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "fc1a31f8-6e1c-4ce1-b6ff-80d1cd605e58",
- "name": "person"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "4c9ba269-244f-4768-a52d-9b1ffbe3339f",
- "name": "taskTargets"
- }
- }
- },
- {
- "__typename": "field",
- "id": "0cfef76e-8309-4946-bfad-0a400d2327b9",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "7c6ab6b0-9978-456b-bb7c-c7c1dc454e3d",
- "type": "RELATION",
- "name": "myCustomObject",
- "label": "myCustomObject",
- "description": "TaskTarget myCustomObject",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.181Z",
- "updatedAt": "2024-08-05T17:09:54.181Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "3f2b2bab-8411-41b7-a87b-06dd0007eab4",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "77d124cc-049a-44f9-ab59-56e3dd55bb69",
- "nameSingular": "taskTarget",
- "namePlural": "taskTargets"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "7c6ab6b0-9978-456b-bb7c-c7c1dc454e3d",
- "name": "myCustomObject"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "56dffccc-daf8-4c49-8919-f19787f07846",
- "nameSingular": "myCustomObject",
- "namePlural": "myCustomObjects"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "90dd4b06-8b21-4411-9f38-b95968a1d4e1",
- "name": "taskTargets"
- }
- }
- },
- {
- "__typename": "field",
- "id": "705e4379-9ba2-4853-b267-c86dad461dd7",
- "type": "RELATION",
- "name": "opportunity",
- "label": "Opportunity",
- "description": "TaskTarget opportunity",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "e594dda4-55fc-46ba-8108-5f672a5b1301",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "77d124cc-049a-44f9-ab59-56e3dd55bb69",
- "nameSingular": "taskTarget",
- "namePlural": "taskTargets"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "705e4379-9ba2-4853-b267-c86dad461dd7",
- "name": "opportunity"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "b95b3f38-9fc2-4d7e-a823-7791cf13d089",
- "nameSingular": "opportunity",
- "namePlural": "opportunities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "40cdd413-5239-4887-b5e6-eb32eb1d95e3",
- "name": "taskTargets"
- }
- }
- },
- {
- "__typename": "field",
- "id": "31d8d648-5118-4b59-8c1e-876e83bf85f3",
- "type": "RELATION",
- "name": "task",
- "label": "Task",
- "description": "TaskTarget task",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "85f92b6a-bc71-4da4-ba4e-7b0685a05fde",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "77d124cc-049a-44f9-ab59-56e3dd55bb69",
- "nameSingular": "taskTarget",
- "namePlural": "taskTargets"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "31d8d648-5118-4b59-8c1e-876e83bf85f3",
- "name": "task"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "99f8caa6-263c-4690-8dc0-eb7645304cf5",
- "nameSingular": "task",
- "namePlural": "tasks"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "f1ed6bba-53bc-4f9c-ac40-504a9ff5bade",
- "name": "taskTargets"
- }
- }
- },
- {
- "__typename": "field",
- "id": "f6566665-bc44-4d92-9e6a-7405e8f505cb",
- "type": "UUID",
- "name": "myCustomObjectId",
- "label": "myCustomObject ID (foreign key)",
- "description": "TaskTarget myCustomObject id foreign key",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.180Z",
- "updatedAt": "2024-08-05T17:09:54.180Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "1e4e3b2b-113f-4af3-aed8-94b03785a626",
- "type": "RELATION",
- "name": "company",
- "label": "Company",
- "description": "TaskTarget company",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "f80bfd64-c33d-4488-bc49-1635e092ea3f",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "77d124cc-049a-44f9-ab59-56e3dd55bb69",
- "nameSingular": "taskTarget",
- "namePlural": "taskTargets"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "1e4e3b2b-113f-4af3-aed8-94b03785a626",
- "name": "company"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "cb47633a-1b44-41b9-8bce-16e28616c2ad",
- "name": "taskTargets"
- }
- }
- }
- ]
- },
- {
- "__typename": "object",
- "id": "666caea5-3c1e-4847-9fd9-2d8c1d08eabb",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "viewFilter",
- "namePlural": "viewFilters",
- "labelSingular": "View Filter",
- "labelPlural": "View Filters",
- "description": "(System) View Filters",
- "icon": "IconFilterBolt",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "5a3d73f8-918d-49f5-a890-aac2b3163ed2",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "2d97f9a5-4f5b-45d0-aabd-843c7f2ed19b",
- "type": "TEXT",
- "name": "operand",
- "label": "Operand",
- "description": "View Filter operand",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'Contains'",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "40f77e70-c43b-4f16-8a20-beb0aafd77a0",
- "type": "TEXT",
- "name": "displayValue",
- "label": "Display Value",
- "description": "View Filter Display Value",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "c56cc7db-9e19-470e-9d6d-2b7180fb0fb7",
- "type": "RELATION",
- "name": "view",
- "label": "View",
- "description": "View Filter related view",
- "icon": "IconLayoutCollage",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "bd7a6047-3eb5-413e-9315-bb28533c4aed",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "666caea5-3c1e-4847-9fd9-2d8c1d08eabb",
- "nameSingular": "viewFilter",
- "namePlural": "viewFilters"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "c56cc7db-9e19-470e-9d6d-2b7180fb0fb7",
- "name": "view"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "90df20e5-c655-474f-bb98-b423652e36df",
- "nameSingular": "view",
- "namePlural": "views"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "0d2e0bfe-fe67-4df4-af4f-49722ba4bf96",
- "name": "viewFilters"
- }
- }
- },
- {
- "__typename": "field",
- "id": "5a3d73f8-918d-49f5-a890-aac2b3163ed2",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "f2f27130-bc36-4a22-96eb-a7a3a0aee6c5",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "97ecc896-e994-4822-8758-6f06de23b1d5",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "1927b1c6-5531-43f4-9c3d-078aeeedbafc",
- "type": "TEXT",
- "name": "value",
- "label": "Value",
- "description": "View Filter value",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6e257f21-2577-46eb-81e1-30b6280411ce",
- "type": "UUID",
- "name": "viewId",
- "label": "View id (foreign key)",
- "description": "View Filter related view id foreign key",
- "icon": "IconLayoutCollage",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "97920c5b-939b-489f-9132-15522c8b2f25",
- "type": "UUID",
- "name": "fieldMetadataId",
- "label": "Field Metadata Id",
- "description": "View Filter target field",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "648268ca-94bf-418e-853c-56d0f51472b3",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "activityTarget",
- "namePlural": "activityTargets",
- "labelSingular": "Activity Target",
- "labelPlural": "Activity Targets",
- "description": "An activity target",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "ba72ff28-333c-4a4e-a9a7-97625ae1a899",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "aa1c7e04-31c1-4b62-8451-6b32926cab47",
- "type": "RELATION",
- "name": "activity",
- "label": "Activity",
- "description": "ActivityTarget activity",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "16017cba-688e-4483-a258-9cef3999cbbf",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "648268ca-94bf-418e-853c-56d0f51472b3",
- "nameSingular": "activityTarget",
- "namePlural": "activityTargets"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "aa1c7e04-31c1-4b62-8451-6b32926cab47",
- "name": "activity"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "cf6f8138-3445-4a36-b137-41ebb8f2e3dc",
- "nameSingular": "activity",
- "namePlural": "activities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "41f8fd90-2de9-402f-8b37-fb023d318de2",
- "name": "activityTargets"
- }
- }
- },
- {
- "__typename": "field",
- "id": "702bc8dc-83d5-4367-82e9-a221dcf05687",
- "type": "UUID",
- "name": "companyId",
- "label": "Company id (foreign key)",
- "description": "ActivityTarget company id foreign key",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "a2e154ce-eb15-4d30-adcf-f8b6f969b007",
- "type": "UUID",
- "name": "opportunityId",
- "label": "Opportunity id (foreign key)",
- "description": "ActivityTarget opportunity id foreign key",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "997b0618-d3f7-4e5c-8c8e-2ba1bad10549",
- "type": "RELATION",
- "name": "opportunity",
- "label": "Opportunity",
- "description": "ActivityTarget opportunity",
- "icon": "IconTargetArrow",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "d2a53784-3664-49ab-983e-5ad5bf15dbd0",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "648268ca-94bf-418e-853c-56d0f51472b3",
- "nameSingular": "activityTarget",
- "namePlural": "activityTargets"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "997b0618-d3f7-4e5c-8c8e-2ba1bad10549",
- "name": "opportunity"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "b95b3f38-9fc2-4d7e-a823-7791cf13d089",
- "nameSingular": "opportunity",
- "namePlural": "opportunities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "71341870-4e4d-4399-ab74-8f277047664e",
- "name": "activityTargets"
- }
- }
- },
- {
- "__typename": "field",
- "id": "0dbe65bc-b07e-4359-a7ab-c70cdf95dcf7",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "29b26108-6f7e-4424-b430-de1b54a9629a",
- "type": "UUID",
- "name": "myCustomObjectId",
- "label": "myCustomObject ID (foreign key)",
- "description": "ActivityTarget myCustomObject id foreign key",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.160Z",
- "updatedAt": "2024-08-05T17:09:54.160Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "f522e7f8-7e9c-4fde-9e8a-1ddd5fa40063",
- "type": "UUID",
- "name": "personId",
- "label": "Person id (foreign key)",
- "description": "ActivityTarget person id foreign key",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "5032f1f4-d2ae-46de-bff6-b596a73c0d8c",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "ba72ff28-333c-4a4e-a9a7-97625ae1a899",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "10150d34-2f00-4642-8a9d-6b0b6ab72562",
- "type": "RELATION",
- "name": "company",
- "label": "Company",
- "description": "ActivityTarget company",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "2ed70c2c-b17a-4ed1-9f35-b570139440fa",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "648268ca-94bf-418e-853c-56d0f51472b3",
- "nameSingular": "activityTarget",
- "namePlural": "activityTargets"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "10150d34-2f00-4642-8a9d-6b0b6ab72562",
- "name": "company"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "4d74b886-b359-4c4c-a2c0-692edc8a3273",
- "name": "activityTargets"
- }
- }
- },
- {
- "__typename": "field",
- "id": "940d1664-b17c-4f66-820b-abfec70adaa5",
- "type": "RELATION",
- "name": "person",
- "label": "Person",
- "description": "ActivityTarget person",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "9a3a145b-6d06-4892-84d4-af523f40c58d",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "648268ca-94bf-418e-853c-56d0f51472b3",
- "nameSingular": "activityTarget",
- "namePlural": "activityTargets"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "940d1664-b17c-4f66-820b-abfec70adaa5",
- "name": "person"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "9b018bba-687b-4850-9e0e-c192d3b5977d",
- "name": "activityTargets"
- }
- }
- },
- {
- "__typename": "field",
- "id": "d20eb128-2dd6-49e2-ac71-9d8991bc22fb",
- "type": "RELATION",
- "name": "myCustomObject",
- "label": "myCustomObject",
- "description": "ActivityTarget myCustomObject",
- "icon": "IconBuildingSkyscraper",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.161Z",
- "updatedAt": "2024-08-05T17:09:54.161Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "1271db29-f60e-4cf2-83cb-b31f62211850",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "648268ca-94bf-418e-853c-56d0f51472b3",
- "nameSingular": "activityTarget",
- "namePlural": "activityTargets"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "d20eb128-2dd6-49e2-ac71-9d8991bc22fb",
- "name": "myCustomObject"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "56dffccc-daf8-4c49-8919-f19787f07846",
- "nameSingular": "myCustomObject",
- "namePlural": "myCustomObjects"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "7e079b54-1abf-486d-850e-5a5d32fed77b",
- "name": "activityTargets"
- }
- }
- },
- {
- "__typename": "field",
- "id": "23a39b63-86cb-46da-b4a1-a49317ad06f5",
- "type": "UUID",
- "name": "activityId",
- "label": "Activity id (foreign key)",
- "description": "ActivityTarget activity id foreign key",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "5b55de69-76d8-4170-94d3-ff85ee7640ca",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "calendarChannelEventAssociation",
- "namePlural": "calendarChannelEventAssociations",
- "labelSingular": "Calendar Channel Event Association",
- "labelPlural": "Calendar Channel Event Associations",
- "description": "Calendar Channel Event Associations",
- "icon": "IconCalendar",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "5966ae0a-06c2-4f9e-92e7-e908b4afbcbc",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "94180d42-50ed-48a0-a62b-e00f1a6f4753",
- "type": "RELATION",
- "name": "calendarChannel",
- "label": "Channel ID",
- "description": "Channel ID",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "876e63a4-ce57-4852-b1b7-5659021ea34c",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "5b55de69-76d8-4170-94d3-ff85ee7640ca",
- "nameSingular": "calendarChannelEventAssociation",
- "namePlural": "calendarChannelEventAssociations"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "94180d42-50ed-48a0-a62b-e00f1a6f4753",
- "name": "calendarChannel"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "3f89df71-38d5-46f4-818f-076a5ee77e48",
- "nameSingular": "calendarChannel",
- "namePlural": "calendarChannels"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "0751ede9-2493-4079-b976-14b98a4eb971",
- "name": "calendarChannelEventAssociations"
- }
- }
- },
- {
- "__typename": "field",
- "id": "c9dfb626-58e2-4aab-986c-4839dc7f5e0b",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "2baeedd7-34a0-4d07-ab4c-5e6995213ec5",
- "type": "RELATION",
- "name": "calendarEvent",
- "label": "Event ID",
- "description": "Event ID",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "09476064-1403-4948-84c2-d87a02a022ca",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "5b55de69-76d8-4170-94d3-ff85ee7640ca",
- "nameSingular": "calendarChannelEventAssociation",
- "namePlural": "calendarChannelEventAssociations"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "2baeedd7-34a0-4d07-ab4c-5e6995213ec5",
- "name": "calendarEvent"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "37d40c3f-e106-4348-af22-201659bbd8a6",
- "nameSingular": "calendarEvent",
- "namePlural": "calendarEvents"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "46421d40-86ab-4f44-aee4-862320bf7534",
- "name": "calendarChannelEventAssociations"
- }
- }
- },
- {
- "__typename": "field",
- "id": "a00a384b-ab25-4dc5-a778-25d9b9cb8ffd",
- "type": "UUID",
- "name": "calendarEventId",
- "label": "Event ID id (foreign key)",
- "description": "Event ID id foreign key",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "fea76c39-2d44-4d78-b346-eec8a9d55102",
- "type": "TEXT",
- "name": "eventExternalId",
- "label": "Event external ID",
- "description": "Event external ID",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "5966ae0a-06c2-4f9e-92e7-e908b4afbcbc",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6bec724b-ce56-4ebb-82fb-f2c79c4ef360",
- "type": "UUID",
- "name": "calendarChannelId",
- "label": "Channel ID id (foreign key)",
- "description": "Channel ID id foreign key",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "00171466-dba6-4b35-81a5-e37a9d4ea659",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "56dffccc-daf8-4c49-8919-f19787f07846",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "myCustomObject",
- "namePlural": "myCustomObjects",
- "labelSingular": "myCustomObject",
- "labelPlural": "myCustomObjects",
- "description": null,
- "icon": "IconListNumbers",
- "isCustom": true,
- "isRemote": false,
- "isActive": true,
- "isSystem": false,
- "createdAt": "2024-08-05T17:09:54.141Z",
- "updatedAt": "2024-08-05T17:09:54.141Z",
- "labelIdentifierFieldMetadataId": null,
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "c475ebbc-f86b-4956-9d67-d0bb62062408",
- "type": "RELATION",
- "name": "favorites",
- "label": "Favorites",
- "description": "Favorites tied to the myCustomObject",
- "icon": "IconHeart",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.168Z",
- "updatedAt": "2024-08-05T17:09:54.168Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "143c2257-721f-46eb-8114-987a70979146",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "56dffccc-daf8-4c49-8919-f19787f07846",
- "nameSingular": "myCustomObject",
- "namePlural": "myCustomObjects"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "c475ebbc-f86b-4956-9d67-d0bb62062408",
- "name": "favorites"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "d19be8c8-2cf4-4c29-80ae-0d1841dc11c1",
- "nameSingular": "favorite",
- "namePlural": "favorites"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "87c2dd65-2c54-4184-9a19-0bdce7781a3f",
- "name": "myCustomObject"
- }
- }
- },
- {
- "__typename": "field",
- "id": "7e079b54-1abf-486d-850e-5a5d32fed77b",
- "type": "RELATION",
- "name": "activityTargets",
- "label": "Activities",
- "description": "Activities tied to the myCustomObject",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.161Z",
- "updatedAt": "2024-08-05T17:09:54.161Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "1271db29-f60e-4cf2-83cb-b31f62211850",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "56dffccc-daf8-4c49-8919-f19787f07846",
- "nameSingular": "myCustomObject",
- "namePlural": "myCustomObjects"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "7e079b54-1abf-486d-850e-5a5d32fed77b",
- "name": "activityTargets"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "648268ca-94bf-418e-853c-56d0f51472b3",
- "nameSingular": "activityTarget",
- "namePlural": "activityTargets"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "d20eb128-2dd6-49e2-ac71-9d8991bc22fb",
- "name": "myCustomObject"
- }
- }
- },
- {
- "__typename": "field",
- "id": "90dd4b06-8b21-4411-9f38-b95968a1d4e1",
- "type": "RELATION",
- "name": "taskTargets",
- "label": "Tasks",
- "description": "Tasks tied to the myCustomObject",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.181Z",
- "updatedAt": "2024-08-05T17:09:54.181Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "3f2b2bab-8411-41b7-a87b-06dd0007eab4",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "56dffccc-daf8-4c49-8919-f19787f07846",
- "nameSingular": "myCustomObject",
- "namePlural": "myCustomObjects"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "90dd4b06-8b21-4411-9f38-b95968a1d4e1",
- "name": "taskTargets"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "77d124cc-049a-44f9-ab59-56e3dd55bb69",
- "nameSingular": "taskTarget",
- "namePlural": "taskTargets"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "7c6ab6b0-9978-456b-bb7c-c7c1dc454e3d",
- "name": "myCustomObject"
- }
- }
- },
- {
- "__typename": "field",
- "id": "13b6535d-d523-4e2b-9ba4-90630173388a",
- "type": "ACTOR",
- "name": "createdBy",
- "label": "Created by",
- "description": "The creator of the record",
- "icon": "IconCreativeCommonsSa",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T17:09:54.141Z",
- "updatedAt": "2024-08-05T17:09:54.141Z",
- "defaultValue": {
- "name": "''",
- "source": "'MANUAL'"
- },
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "9d9aa060-cdfd-4e01-80fc-92549f025a9d",
- "type": "POSITION",
- "name": "position",
- "label": "Position",
- "description": "Position",
- "icon": "IconHierarchy2",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.141Z",
- "updatedAt": "2024-08-05T17:09:54.141Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "5842b56f-0029-4205-9ee2-d90bc51f25e5",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T17:09:54.141Z",
- "updatedAt": "2024-08-05T17:09:54.141Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "87631266-4a85-4c49-82d1-90d1805c3de6",
- "type": "RELATION",
- "name": "noteTargets",
- "label": "Notes",
- "description": "Notes tied to the myCustomObject",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.177Z",
- "updatedAt": "2024-08-05T17:09:54.177Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "4f4d3969-913b-478c-a41d-9daffc9b2255",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "56dffccc-daf8-4c49-8919-f19787f07846",
- "nameSingular": "myCustomObject",
- "namePlural": "myCustomObjects"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "87631266-4a85-4c49-82d1-90d1805c3de6",
- "name": "noteTargets"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "bd4e44a0-4b0d-4392-b0c9-d6c8684e3d44",
- "nameSingular": "noteTarget",
- "namePlural": "noteTargets"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "e884eac3-4cbd-40af-970e-a34b409c0acd",
- "name": "myCustomObject"
- }
- }
- },
- {
- "__typename": "field",
- "id": "7dd8ba1c-17d8-491b-bc6d-1bf024b38eee",
- "type": "TEXT",
- "name": "name",
- "label": "Name",
- "description": "Name",
- "icon": "IconAbc",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T17:09:54.141Z",
- "updatedAt": "2024-08-05T17:09:54.141Z",
- "defaultValue": "'Untitled'",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "c2a859ac-2667-4f12-8cbd-6cc55e45664f",
- "type": "TEXT",
- "name": "myCustomField",
- "label": "myCustomField",
- "description": null,
- "icon": "IconUsers",
- "isCustom": true,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T17:10:03.185Z",
- "updatedAt": "2024-08-05T17:10:03.185Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "a4580aee-6fb4-4b5d-87c0-daf24745ca13",
- "type": "RELATION",
- "name": "attachments",
- "label": "Attachments",
- "description": "Attachments tied to the myCustomObject",
- "icon": "IconFileImport",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.173Z",
- "updatedAt": "2024-08-05T17:09:54.173Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "bd914a9e-b1f8-43c6-af60-3afe46518988",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "56dffccc-daf8-4c49-8919-f19787f07846",
- "nameSingular": "myCustomObject",
- "namePlural": "myCustomObjects"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "a4580aee-6fb4-4b5d-87c0-daf24745ca13",
- "name": "attachments"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "9a53b4e1-bce2-4160-8ce3-028e14b2abb7",
- "nameSingular": "attachment",
- "namePlural": "attachments"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "2e1b103b-a75b-4ebc-8219-4b59027bd3fd",
- "name": "myCustomObject"
- }
- }
- },
- {
- "__typename": "field",
- "id": "6e5b1581-2e88-44e4-ac0c-2143cc92ad19",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T17:09:54.141Z",
- "updatedAt": "2024-08-05T17:09:54.141Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "e7cd7adb-152e-4d19-b2ba-d1b66bc40e79",
- "type": "RELATION",
- "name": "timelineActivities",
- "label": "Timeline Activities",
- "description": "Timeline Activities tied to the myCustomObject",
- "icon": "IconIconTimelineEvent",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T17:09:54.153Z",
- "updatedAt": "2024-08-05T17:09:54.153Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "e143276e-7f4a-46e8-bf0f-61111f36d4fd",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "56dffccc-daf8-4c49-8919-f19787f07846",
- "nameSingular": "myCustomObject",
- "namePlural": "myCustomObjects"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "e7cd7adb-152e-4d19-b2ba-d1b66bc40e79",
- "name": "timelineActivities"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "94ef21ab-5eca-4c80-b378-2a207dcca2e4",
- "nameSingular": "timelineActivity",
- "namePlural": "timelineActivities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "e7e04af7-a0a2-4999-9265-e9bafcd0197c",
- "name": "myCustomObject"
- }
- }
- },
- {
- "__typename": "field",
- "id": "dbf144b7-885d-40ae-af3e-3efdb424fe26",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T17:09:54.141Z",
- "updatedAt": "2024-08-05T17:09:54.141Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "23006c79-19fe-4148-9ee4-6db039ebc6fb",
- "type": "RELATION",
- "name": "people",
- "label": "people",
- "description": null,
- "icon": "IconUsers",
- "isCustom": true,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T17:10:31.391Z",
- "updatedAt": "2024-08-05T17:10:31.391Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "27f9741d-f967-4b75-affa-240f0f5f8d77",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "56dffccc-daf8-4c49-8919-f19787f07846",
- "nameSingular": "myCustomObject",
- "namePlural": "myCustomObjects"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "23006c79-19fe-4148-9ee4-6db039ebc6fb",
- "name": "people"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "f7002609-5760-4ae6-ba29-a8b9066b95de",
- "name": "myCustomObject"
- }
- }
- }
- ]
- },
- {
- "__typename": "object",
- "id": "3f89df71-38d5-46f4-818f-076a5ee77e48",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "calendarChannel",
- "namePlural": "calendarChannels",
- "labelSingular": "Calendar Channel",
- "labelPlural": "Calendar Channels",
- "description": "Calendar Channels",
- "icon": "IconCalendar",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "fc64465a-ab08-4df8-93e2-a19e758e54d8",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "26d457d6-8f93-4813-88fa-78704b780644",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "895be714-df44-4d95-8860-a40ab37bf61d",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "11816da4-27dd-475c-ae34-c578b21d1072",
- "type": "DATE_TIME",
- "name": "syncStageStartedAt",
- "label": "Sync stage started at",
- "description": "Sync stage started at",
- "icon": "IconHistory",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "17cc8c28-aa8d-43a0-9c11-ccfc43300d57",
- "type": "BOOLEAN",
- "name": "isContactAutoCreationEnabled",
- "label": "Is Contact Auto Creation Enabled",
- "description": "Is Contact Auto Creation Enabled",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": true,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "bb8528d4-eb52-469b-a87a-895e41fce448",
- "type": "NUMBER",
- "name": "throttleFailureCount",
- "label": "Throttle Failure Count",
- "description": "Throttle Failure Count",
- "icon": "IconX",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": 0,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "cc4fbb8e-3d27-461c-be5e-3b55c3d059d0",
- "type": "BOOLEAN",
- "name": "isSyncEnabled",
- "label": "Is Sync Enabled",
- "description": "Is Sync Enabled",
- "icon": "IconRefresh",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": true,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "fc64465a-ab08-4df8-93e2-a19e758e54d8",
- "type": "TEXT",
- "name": "handle",
- "label": "Handle",
- "description": "Handle",
- "icon": "IconAt",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "0751ede9-2493-4079-b976-14b98a4eb971",
- "type": "RELATION",
- "name": "calendarChannelEventAssociations",
- "label": "Calendar Channel Event Associations",
- "description": "Calendar Channel Event Associations",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "876e63a4-ce57-4852-b1b7-5659021ea34c",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "3f89df71-38d5-46f4-818f-076a5ee77e48",
- "nameSingular": "calendarChannel",
- "namePlural": "calendarChannels"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "0751ede9-2493-4079-b976-14b98a4eb971",
- "name": "calendarChannelEventAssociations"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "5b55de69-76d8-4170-94d3-ff85ee7640ca",
- "nameSingular": "calendarChannelEventAssociation",
- "namePlural": "calendarChannelEventAssociations"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "94180d42-50ed-48a0-a62b-e00f1a6f4753",
- "name": "calendarChannel"
- }
- }
- },
- {
- "__typename": "field",
- "id": "ce4b8d97-0dbc-4e35-b07d-9b76b78b0805",
- "type": "SELECT",
- "name": "visibility",
- "label": "Visibility",
- "description": "Visibility",
- "icon": "IconEyeglass",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'SHARE_EVERYTHING'",
- "options": [
- {
- "id": "b6afdf8e-219c-4fa4-b493-2ef201cf08ae",
- "color": "green",
- "label": "Metadata",
- "value": "METADATA",
- "position": 0
- },
- {
- "id": "1005e275-acda-4842-9b5f-202a82d7eef9",
- "color": "orange",
- "label": "Share Everything",
- "value": "SHARE_EVERYTHING",
- "position": 1
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "f7f4925d-e186-4fe6-80f5-1ddd1ae5bf22",
- "type": "RELATION",
- "name": "connectedAccount",
- "label": "Connected Account",
- "description": "Connected Account",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "69dde225-0e12-4df6-ab55-d870d6dec717",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "3f89df71-38d5-46f4-818f-076a5ee77e48",
- "nameSingular": "calendarChannel",
- "namePlural": "calendarChannels"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "f7f4925d-e186-4fe6-80f5-1ddd1ae5bf22",
- "name": "connectedAccount"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "90e63030-f26d-46c8-b27a-13686b717538",
- "nameSingular": "connectedAccount",
- "namePlural": "connectedAccounts"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "793ca9eb-06ac-433a-b0c3-d62139cbd71c",
- "name": "calendarChannels"
- }
- }
- },
- {
- "__typename": "field",
- "id": "fb9fa3ad-8a76-4b35-9e3d-2d70e0bd9b43",
- "type": "TEXT",
- "name": "syncCursor",
- "label": "Sync Cursor",
- "description": "Sync Cursor. Used for syncing events from the calendar provider",
- "icon": "IconReload",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "cc894f79-0ce0-4534-8874-f6f7b38bcfe8",
- "type": "SELECT",
- "name": "contactAutoCreationPolicy",
- "label": "Contact auto creation policy",
- "description": "Automatically create records for people you participated with in an event.",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'AS_PARTICIPANT_AND_ORGANIZER'",
- "options": [
- {
- "id": "479dcab1-99b1-49db-a398-c838657d694c",
- "color": "green",
- "label": "As Participant and Organizer",
- "value": "AS_PARTICIPANT_AND_ORGANIZER",
- "position": 0
- },
- {
- "id": "8736e812-170f-46ff-ace4-e16a58a6426d",
- "color": "orange",
- "label": "As Participant",
- "value": "AS_PARTICIPANT",
- "position": 1
- },
- {
- "id": "afffd87a-0025-4c0e-bd88-6808da2a6d4c",
- "color": "blue",
- "label": "As Organizer",
- "value": "AS_ORGANIZER",
- "position": 2
- },
- {
- "id": "45145a84-a014-436a-bf88-a174e6da5352",
- "color": "red",
- "label": "None",
- "value": "NONE",
- "position": 3
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "87dda3f9-e513-44c1-87f3-1c2b322368e6",
- "type": "UUID",
- "name": "connectedAccountId",
- "label": "Connected Account id (foreign key)",
- "description": "Connected Account id foreign key",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "465d2623-1abb-4587-878c-4752cacf5fc9",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "2a2b8f04-c432-4a96-9eb2-7b824b68dfc6",
- "type": "SELECT",
- "name": "syncStage",
- "label": "Sync stage",
- "description": "Sync stage",
- "icon": "IconStatusChange",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'FULL_CALENDAR_EVENT_LIST_FETCH_PENDING'",
- "options": [
- {
- "id": "37376ca4-6926-4128-9395-9cd599d1dc56",
- "color": "blue",
- "label": "Full calendar event list fetch pending",
- "value": "FULL_CALENDAR_EVENT_LIST_FETCH_PENDING",
- "position": 0
- },
- {
- "id": "0ee03d31-3ffc-4b2d-9e8d-0eea0179bf04",
- "color": "blue",
- "label": "Partial calendar event list fetch pending",
- "value": "PARTIAL_CALENDAR_EVENT_LIST_FETCH_PENDING",
- "position": 1
- },
- {
- "id": "aaa2d5b7-c930-4672-b381-8759b53c3c12",
- "color": "orange",
- "label": "Calendar event list fetch ongoing",
- "value": "CALENDAR_EVENT_LIST_FETCH_ONGOING",
- "position": 2
- },
- {
- "id": "940eeb35-e2f6-44ca-9b81-cd682b9f4d32",
- "color": "blue",
- "label": "Calendar events import pending",
- "value": "CALENDAR_EVENTS_IMPORT_PENDING",
- "position": 3
- },
- {
- "id": "ff49a7d8-b7ee-4804-85a3-b0b1641681f2",
- "color": "orange",
- "label": "Calendar events import ongoing",
- "value": "CALENDAR_EVENTS_IMPORT_ONGOING",
- "position": 4
- },
- {
- "id": "10e8fafb-a086-491e-a6b5-b33bb11e757b",
- "color": "red",
- "label": "Failed",
- "value": "FAILED",
- "position": 5
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "335172ff-f683-4cd4-96d0-3120d505ee7e",
- "type": "SELECT",
- "name": "syncStatus",
- "label": "Sync status",
- "description": "Sync status",
- "icon": "IconStatusChange",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": [
- {
- "id": "427be75a-3309-4ac7-ad9f-6315829ec1de",
- "color": "yellow",
- "label": "Ongoing",
- "value": "ONGOING",
- "position": 1
- },
- {
- "id": "5caefabb-b384-4d23-84cf-569ae417e0e9",
- "color": "blue",
- "label": "Not Synced",
- "value": "NOT_SYNCED",
- "position": 2
- },
- {
- "id": "34d49c7c-ea37-4293-ab2c-1d1e68bb0e09",
- "color": "green",
- "label": "Active",
- "value": "ACTIVE",
- "position": 3
- },
- {
- "id": "b7ed2a50-b048-4f30-b7f8-b586a7e8deef",
- "color": "red",
- "label": "Failed Insufficient Permissions",
- "value": "FAILED_INSUFFICIENT_PERMISSIONS",
- "position": 4
- },
- {
- "id": "73e4ce2f-f208-482f-b054-85ecb9cbfb9c",
- "color": "red",
- "label": "Failed Unknown",
- "value": "FAILED_UNKNOWN",
- "position": 5
- }
- ],
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "3af96291-b873-402f-bd90-f4731984c8dd",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "comment",
- "namePlural": "comments",
- "labelSingular": "Comment",
- "labelPlural": "Comments",
- "description": "A comment",
- "icon": "IconMessageCircle",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "95c741f7-cf0f-403e-9664-83a052f3934c",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "209c9e5d-c82d-4d30-8fb1-1f7bc70d74ec",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "95c741f7-cf0f-403e-9664-83a052f3934c",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "e2400fef-dfb4-4ec8-b83f-705b923b7b00",
- "type": "UUID",
- "name": "authorId",
- "label": "Author id (foreign key)",
- "description": "Comment author id foreign key",
- "icon": "IconCircleUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "7e3e4ebe-fc63-47c6-b21d-0934b2842806",
- "type": "TEXT",
- "name": "body",
- "label": "Body",
- "description": "Comment body",
- "icon": "IconLink",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "239d39c7-de84-462e-b99c-c7e9c1b99d8a",
- "type": "UUID",
- "name": "activityId",
- "label": "Activity id (foreign key)",
- "description": "Comment activity id foreign key",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "5a74f15a-2abd-4631-b324-575dd0a81b14",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "1a7fec45-dd33-43a0-9302-5b0b9052d2f0",
- "type": "RELATION",
- "name": "author",
- "label": "Author",
- "description": "Comment author",
- "icon": "IconCircleUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "4917f689-5cc2-4716-b4ab-6906aef009b3",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "3af96291-b873-402f-bd90-f4731984c8dd",
- "nameSingular": "comment",
- "namePlural": "comments"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "1a7fec45-dd33-43a0-9302-5b0b9052d2f0",
- "name": "author"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "12d19915-891e-4a4e-8c42-49a12639264f",
- "name": "authoredComments"
- }
- }
- },
- {
- "__typename": "field",
- "id": "88c3a2b9-b59a-413a-b2d3-44b151185929",
- "type": "RELATION",
- "name": "activity",
- "label": "Activity",
- "description": "Comment activity",
- "icon": "IconNotes",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "00b07eda-840c-4a91-a8f7-365c008a2ea1",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "3af96291-b873-402f-bd90-f4731984c8dd",
- "nameSingular": "comment",
- "namePlural": "comments"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "88c3a2b9-b59a-413a-b2d3-44b151185929",
- "name": "activity"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "cf6f8138-3445-4a36-b137-41ebb8f2e3dc",
- "nameSingular": "activity",
- "namePlural": "activities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "9045116d-0fed-433c-80a4-f4296db72ae5",
- "name": "comments"
- }
- }
- }
- ]
- },
- {
- "__typename": "object",
- "id": "37d40c3f-e106-4348-af22-201659bbd8a6",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "calendarEvent",
- "namePlural": "calendarEvents",
- "labelSingular": "Calendar event",
- "labelPlural": "Calendar events",
- "description": "Calendar events",
- "icon": "IconCalendar",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "c84c6690-4785-4487-a164-75b35fa6b5ed",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "2563cdaf-19b2-4ca7-bea7-d233228ac87b",
- "type": "TEXT",
- "name": "description",
- "label": "Description",
- "description": "Description",
- "icon": "IconFileDescription",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "f67e0a42-d909-4029-b740-ed4ba6fef8d2",
- "type": "BOOLEAN",
- "name": "isCanceled",
- "label": "Is canceled",
- "description": "Is canceled",
- "icon": "IconCalendarCancel",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": false,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "21f11229-c9a8-4d90-8f78-8803296de422",
- "type": "DATE_TIME",
- "name": "endsAt",
- "label": "End Date",
- "description": "End Date",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "3f88228c-6666-4c18-b4c3-2355e9fb74fd",
- "type": "TEXT",
- "name": "iCalUID",
- "label": "iCal UID",
- "description": "iCal UID",
- "icon": "IconKey",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "b9ff2603-b060-47f7-8b74-367411c97043",
- "type": "DATE_TIME",
- "name": "externalCreatedAt",
- "label": "Creation DateTime",
- "description": "Creation DateTime",
- "icon": "IconCalendarPlus",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "65f9e0fd-c875-43e0-9988-94dcd1105951",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "e4b6323e-2faa-472a-b369-394b7682f7f1",
- "type": "BOOLEAN",
- "name": "isFullDay",
- "label": "Is Full Day",
- "description": "Is Full Day",
- "icon": "Icon24Hours",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": false,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "eec86c3b-f7ac-4066-ae3e-f7add17f1f97",
- "type": "TEXT",
- "name": "location",
- "label": "Location",
- "description": "Location",
- "icon": "IconMapPin",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "46421d40-86ab-4f44-aee4-862320bf7534",
- "type": "RELATION",
- "name": "calendarChannelEventAssociations",
- "label": "Calendar Channel Event Associations",
- "description": "Calendar Channel Event Associations",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "09476064-1403-4948-84c2-d87a02a022ca",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "37d40c3f-e106-4348-af22-201659bbd8a6",
- "nameSingular": "calendarEvent",
- "namePlural": "calendarEvents"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "46421d40-86ab-4f44-aee4-862320bf7534",
- "name": "calendarChannelEventAssociations"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "5b55de69-76d8-4170-94d3-ff85ee7640ca",
- "nameSingular": "calendarChannelEventAssociation",
- "namePlural": "calendarChannelEventAssociations"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "2baeedd7-34a0-4d07-ab4c-5e6995213ec5",
- "name": "calendarEvent"
- }
- }
- },
- {
- "__typename": "field",
- "id": "c84c6690-4785-4487-a164-75b35fa6b5ed",
- "type": "TEXT",
- "name": "title",
- "label": "Title",
- "description": "Title",
- "icon": "IconH1",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "26107044-238f-49dc-89ce-179b46450864",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "57f8f510-2486-47cf-aa05-b10c14f3cc43",
- "type": "LINKS",
- "name": "conferenceLink",
- "label": "Meet Link",
- "description": "Meet Link",
- "icon": "IconLink",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": {
- "primaryLinkUrl": "''",
- "secondaryLinks": null,
- "primaryLinkLabel": "''"
- },
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "75f5a937-b2c8-4225-bbd6-c8b575e2dd25",
- "type": "DATE_TIME",
- "name": "startsAt",
- "label": "Start Date",
- "description": "Start Date",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "e286138c-24c0-49d9-8f51-41d47f7958cd",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "849a0245-051d-4dac-8ecf-f35462912b3f",
- "type": "DATE_TIME",
- "name": "externalUpdatedAt",
- "label": "Update DateTime",
- "description": "Update DateTime",
- "icon": "IconCalendarCog",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "c9a2189f-abb1-4166-9d1d-f870f0e32b3e",
- "type": "RELATION",
- "name": "calendarEventParticipants",
- "label": "Event Participants",
- "description": "Event Participants",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "28688620-c3df-463d-a655-ad6435f6215b",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "37d40c3f-e106-4348-af22-201659bbd8a6",
- "nameSingular": "calendarEvent",
- "namePlural": "calendarEvents"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "c9a2189f-abb1-4166-9d1d-f870f0e32b3e",
- "name": "calendarEventParticipants"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "2128a43e-af47-44bf-b7e9-5d00ddd27a99",
- "nameSingular": "calendarEventParticipant",
- "namePlural": "calendarEventParticipants"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "9ae2ccf9-1390-4861-a771-324ab4310f33",
- "name": "calendarEvent"
- }
- }
- },
- {
- "__typename": "field",
- "id": "cb31cbcb-b866-46d9-aeda-4b4aacd32e6e",
- "type": "TEXT",
- "name": "conferenceSolution",
- "label": "Conference Solution",
- "description": "Conference Solution",
- "icon": "IconScreenShare",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "c1a46da5-904c-4883-8cf1-730ecd860a18",
- "type": "TEXT",
- "name": "recurringEventExternalId",
- "label": "Recurring Event ID",
- "description": "Recurring Event ID",
- "icon": "IconHistory",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "219d7acf-5934-44dc-8789-62ade666cb43",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "messageChannel",
- "namePlural": "messageChannels",
- "labelSingular": "Message Channel",
- "labelPlural": "Message Channels",
- "description": "Message Channels",
- "icon": "IconMessage",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "ee88f9a9-318c-44ce-ba9e-3d64c740e090",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "47b231aa-01e2-49e0-bafb-d2b63a153265",
- "type": "NUMBER",
- "name": "throttleFailureCount",
- "label": "Throttle Failure Count",
- "description": "Throttle Failure Count",
- "icon": "IconX",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": 0,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "2821a085-4008-4b66-a99d-f3c2e1557967",
- "type": "SELECT",
- "name": "type",
- "label": "Type",
- "description": "Channel Type",
- "icon": "IconMessage",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'email'",
- "options": [
- {
- "id": "08b1d086-9a6f-4343-8f13-2201c1310f5e",
- "color": "green",
- "label": "Email",
- "value": "email",
- "position": 0
- },
- {
- "id": "2cef0d80-3db0-4793-b849-650cca4d5021",
- "color": "blue",
- "label": "SMS",
- "value": "sms",
- "position": 1
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "b4d39140-3163-4a87-98fe-bb9e8cc137d8",
- "type": "DATE_TIME",
- "name": "syncStageStartedAt",
- "label": "Sync stage started at",
- "description": "Sync stage started at",
- "icon": "IconHistory",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6485d1ba-0c12-4843-bef8-2ecd53074e7d",
- "type": "UUID",
- "name": "connectedAccountId",
- "label": "Connected Account id (foreign key)",
- "description": "Connected Account id foreign key",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "608b0c0a-a828-44e8-9491-e58507090911",
- "type": "SELECT",
- "name": "syncStatus",
- "label": "Sync status",
- "description": "Sync status",
- "icon": "IconStatusChange",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": [
- {
- "id": "3b0b0655-df75-40cc-b2a3-5b0a44d4e89e",
- "color": "yellow",
- "label": "Ongoing",
- "value": "ONGOING",
- "position": 1
- },
- {
- "id": "668d19e4-a5f7-471b-aa2d-5b9ee0bd38a4",
- "color": "blue",
- "label": "Not Synced",
- "value": "NOT_SYNCED",
- "position": 2
- },
- {
- "id": "5d0b907a-0f0d-48ef-971e-6da5c8c6cb08",
- "color": "green",
- "label": "Active",
- "value": "ACTIVE",
- "position": 3
- },
- {
- "id": "919a86ec-634a-4d12-8a70-0da59eed2ed7",
- "color": "red",
- "label": "Failed Insufficient Permissions",
- "value": "FAILED_INSUFFICIENT_PERMISSIONS",
- "position": 4
- },
- {
- "id": "360e055a-314f-4e1f-b1a3-bde1cb3a3743",
- "color": "red",
- "label": "Failed Unknown",
- "value": "FAILED_UNKNOWN",
- "position": 5
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "898058fb-b487-4300-a3d7-a9f5d7efc928",
- "type": "TEXT",
- "name": "syncCursor",
- "label": "Last sync cursor",
- "description": "Last sync cursor",
- "icon": "IconHistory",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "ee851ccd-e643-40aa-9553-bb0487d4b4b9",
- "type": "BOOLEAN",
- "name": "isContactAutoCreationEnabled",
- "label": "Is Contact Auto Creation Enabled",
- "description": "Is Contact Auto Creation Enabled",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": true,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "60c85385-7576-4f68-a3a3-4539f9a79f14",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "7dc2ea04-202c-4f02-a302-6438d5100423",
- "type": "SELECT",
- "name": "visibility",
- "label": "Visibility",
- "description": "Visibility",
- "icon": "IconEyeglass",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'SHARE_EVERYTHING'",
- "options": [
- {
- "id": "30bf3541-7afe-4a39-a070-79b85f6de6ce",
- "color": "green",
- "label": "Metadata",
- "value": "METADATA",
- "position": 0
- },
- {
- "id": "edb11f69-2cda-4959-9fd2-0629f8d9d4c5",
- "color": "blue",
- "label": "Subject",
- "value": "SUBJECT",
- "position": 1
- },
- {
- "id": "5728b6b0-59fc-4def-ae0a-6aa261a18ad9",
- "color": "orange",
- "label": "Share Everything",
- "value": "SHARE_EVERYTHING",
- "position": 2
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "1987d97a-4dd3-4d12-a991-8e514f6999ca",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "ee88f9a9-318c-44ce-ba9e-3d64c740e090",
- "type": "TEXT",
- "name": "handle",
- "label": "Handle",
- "description": "Handle",
- "icon": "IconAt",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6a84ba01-5f11-40bf-99e4-a5a7e9a8dadb",
- "type": "DATE_TIME",
- "name": "syncedAt",
- "label": "Last sync date",
- "description": "Last sync date",
- "icon": "IconHistory",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "252a6670-31ea-4b7a-a75f-09c44f4822be",
- "type": "RELATION",
- "name": "connectedAccount",
- "label": "Connected Account",
- "description": "Connected Account",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "1a74fdd8-63d4-407f-9d25-7e2e6c4d271c",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "219d7acf-5934-44dc-8789-62ade666cb43",
- "nameSingular": "messageChannel",
- "namePlural": "messageChannels"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "252a6670-31ea-4b7a-a75f-09c44f4822be",
- "name": "connectedAccount"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "90e63030-f26d-46c8-b27a-13686b717538",
- "nameSingular": "connectedAccount",
- "namePlural": "connectedAccounts"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "55a55985-3e1d-4db6-b0ac-3585d72b69ed",
- "name": "messageChannels"
- }
- }
- },
- {
- "__typename": "field",
- "id": "2682d5c3-f05e-4c5c-87eb-bb1a6c0c37bb",
- "type": "RELATION",
- "name": "messageChannelMessageAssociations",
- "label": "Message Channel Association",
- "description": "Messages from the channel.",
- "icon": "IconMessage",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "e420b731-e1e1-425a-ac7a-488d37d1958b",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "219d7acf-5934-44dc-8789-62ade666cb43",
- "nameSingular": "messageChannel",
- "namePlural": "messageChannels"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "2682d5c3-f05e-4c5c-87eb-bb1a6c0c37bb",
- "name": "messageChannelMessageAssociations"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "d0f0efa4-9f44-4812-96f9-d91ee933a5e8",
- "nameSingular": "messageChannelMessageAssociation",
- "namePlural": "messageChannelMessageAssociations"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "f2561dd5-c695-4635-816c-27175470b285",
- "name": "messageChannel"
- }
- }
- },
- {
- "__typename": "field",
- "id": "6484b400-3a26-4e67-94d4-f286e758d32d",
- "type": "SELECT",
- "name": "syncStage",
- "label": "Sync stage",
- "description": "Sync stage",
- "icon": "IconStatusChange",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'FULL_MESSAGE_LIST_FETCH_PENDING'",
- "options": [
- {
- "id": "542073b7-5d8d-456a-9f97-c4318c965ee1",
- "color": "blue",
- "label": "Full messages list fetch pending",
- "value": "FULL_MESSAGE_LIST_FETCH_PENDING",
- "position": 0
- },
- {
- "id": "9b6e03b6-7f79-4af9-adc6-be179c7e12ba",
- "color": "blue",
- "label": "Partial messages list fetch pending",
- "value": "PARTIAL_MESSAGE_LIST_FETCH_PENDING",
- "position": 1
- },
- {
- "id": "1e551bc2-cc65-4b02-9538-3964763ed964",
- "color": "orange",
- "label": "Messages list fetch ongoing",
- "value": "MESSAGE_LIST_FETCH_ONGOING",
- "position": 2
- },
- {
- "id": "d9fb2786-ccbb-4c26-a8e8-efa09cec9779",
- "color": "blue",
- "label": "Messages import pending",
- "value": "MESSAGES_IMPORT_PENDING",
- "position": 3
- },
- {
- "id": "a0c3a8c3-be71-4b7e-9fbd-79e9d564e033",
- "color": "orange",
- "label": "Messages import ongoing",
- "value": "MESSAGES_IMPORT_ONGOING",
- "position": 4
- },
- {
- "id": "0bea2ea8-99cf-4a04-80a7-197022bab014",
- "color": "red",
- "label": "Failed",
- "value": "FAILED",
- "position": 5
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "5d8b9142-82f7-44cc-931b-457a7895c864",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "53050215-3982-4ed7-857f-6089bb66e63e",
- "type": "BOOLEAN",
- "name": "excludeGroupEmails",
- "label": "Exclude group emails",
- "description": "Exclude group emails",
- "icon": "IconUsersGroup",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": true,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "95465535-60f1-4a23-8c0d-0e3c98b986da",
- "type": "BOOLEAN",
- "name": "excludeNonProfessionalEmails",
- "label": "Exclude non professional emails",
- "description": "Exclude non professional emails",
- "icon": "IconBriefcase",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": true,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "71179534-e47a-4f19-916e-adad2e0360c8",
- "type": "SELECT",
- "name": "contactAutoCreationPolicy",
- "label": "Contact auto creation policy",
- "description": "Automatically create People records when receiving or sending emails",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'SENT'",
- "options": [
- {
- "id": "61e4a068-f941-4951-940b-4534b55036e5",
- "color": "green",
- "label": "Sent and Received",
- "value": "SENT_AND_RECEIVED",
- "position": 0
- },
- {
- "id": "8922afcf-f166-48cd-bdbe-1fc29cbc9d83",
- "color": "blue",
- "label": "Sent",
- "value": "SENT",
- "position": 1
- },
- {
- "id": "e992588f-fb3c-483c-9bd8-3798c944246b",
- "color": "red",
- "label": "None",
- "value": "NONE",
- "position": 2
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "697a053e-b751-469e-a46a-c1d9ca189ed0",
- "type": "BOOLEAN",
- "name": "isSyncEnabled",
- "label": "Is Sync Enabled",
- "description": "Is Sync Enabled",
- "icon": "IconRefresh",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": true,
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "2128a43e-af47-44bf-b7e9-5d00ddd27a99",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "calendarEventParticipant",
- "namePlural": "calendarEventParticipants",
- "labelSingular": "Calendar event participant",
- "labelPlural": "Calendar event participants",
- "description": "Calendar event participants",
- "icon": "IconCalendar",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "40ddb08c-2b24-429b-8c38-538aa6793d9e",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "57c875cf-6453-4e41-9bd5-3c804464de3b",
- "type": "UUID",
- "name": "workspaceMemberId",
- "label": "Workspace Member id (foreign key)",
- "description": "Workspace Member id foreign key",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "cc3faae7-be01-435f-aafb-835e0f7cd8e4",
- "type": "UUID",
- "name": "personId",
- "label": "Person id (foreign key)",
- "description": "Person id foreign key",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "00b58d77-0409-4fb0-a6b4-7a4b4f4ec71b",
- "type": "UUID",
- "name": "calendarEventId",
- "label": "Event ID id (foreign key)",
- "description": "Event ID id foreign key",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "40ddb08c-2b24-429b-8c38-538aa6793d9e",
- "type": "TEXT",
- "name": "handle",
- "label": "Handle",
- "description": "Handle",
- "icon": "IconMail",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "b2982cd8-c796-4718-b74b-298b46d19841",
- "type": "RELATION",
- "name": "workspaceMember",
- "label": "Workspace Member",
- "description": "Workspace Member",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "67aaa999-8332-43ba-8830-76bf48d53cf2",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "2128a43e-af47-44bf-b7e9-5d00ddd27a99",
- "nameSingular": "calendarEventParticipant",
- "namePlural": "calendarEventParticipants"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "b2982cd8-c796-4718-b74b-298b46d19841",
- "name": "workspaceMember"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "6623a9d7-e137-4709-a592-02ae76e5bfd7",
- "name": "calendarEventParticipants"
- }
- }
- },
- {
- "__typename": "field",
- "id": "00578ebe-8d35-4f34-8f67-02485d704025",
- "type": "SELECT",
- "name": "responseStatus",
- "label": "Response Status",
- "description": "Response Status",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'NEEDS_ACTION'",
- "options": [
- {
- "id": "fd0a498b-4600-41c1-9a96-cebe90c41a55",
- "color": "orange",
- "label": "Needs Action",
- "value": "NEEDS_ACTION",
- "position": 0
- },
- {
- "id": "81a5956c-b7d4-45a2-afde-0f956ce68aee",
- "color": "red",
- "label": "Declined",
- "value": "DECLINED",
- "position": 1
- },
- {
- "id": "4adf3c41-f7a4-4614-8226-0ce0918c0503",
- "color": "yellow",
- "label": "Tentative",
- "value": "TENTATIVE",
- "position": 2
- },
- {
- "id": "23c5a1c2-1d16-40ce-a747-660be35bd518",
- "color": "green",
- "label": "Accepted",
- "value": "ACCEPTED",
- "position": 3
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "da6e6808-841d-4079-b050-a2d59e7b1a37",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "bd330d82-e102-43ed-88fe-caf5abe486f4",
- "type": "TEXT",
- "name": "displayName",
- "label": "Display Name",
- "description": "Display Name",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6cf6873a-af1e-46ab-aacd-80b2254b0239",
- "type": "BOOLEAN",
- "name": "isOrganizer",
- "label": "Is Organizer",
- "description": "Is Organizer",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": false,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "61840181-5ec1-4e0f-a133-b705d19a38ff",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "9ae2ccf9-1390-4861-a771-324ab4310f33",
- "type": "RELATION",
- "name": "calendarEvent",
- "label": "Event ID",
- "description": "Event ID",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "28688620-c3df-463d-a655-ad6435f6215b",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "2128a43e-af47-44bf-b7e9-5d00ddd27a99",
- "nameSingular": "calendarEventParticipant",
- "namePlural": "calendarEventParticipants"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "9ae2ccf9-1390-4861-a771-324ab4310f33",
- "name": "calendarEvent"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "37d40c3f-e106-4348-af22-201659bbd8a6",
- "nameSingular": "calendarEvent",
- "namePlural": "calendarEvents"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "c9a2189f-abb1-4166-9d1d-f870f0e32b3e",
- "name": "calendarEventParticipants"
- }
- }
- },
- {
- "__typename": "field",
- "id": "a7eb211d-4481-4269-99d7-cf2183b45598",
- "type": "RELATION",
- "name": "person",
- "label": "Person",
- "description": "Person",
- "icon": "IconUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "20d67b64-4e67-44a1-81c7-116c0c8c6368",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "2128a43e-af47-44bf-b7e9-5d00ddd27a99",
- "nameSingular": "calendarEventParticipant",
- "namePlural": "calendarEventParticipants"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "a7eb211d-4481-4269-99d7-cf2183b45598",
- "name": "person"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "ff2881da-89f6-4f15-8f0a-e3f355ea3b94",
- "nameSingular": "person",
- "namePlural": "people"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "d44bf743-b557-47d4-9341-04114fd05d52",
- "name": "calendarEventParticipants"
- }
- }
- },
- {
- "__typename": "field",
- "id": "eb0946e3-084e-477f-8aba-3c88ed29cf3b",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers",
- "labelSingular": "Workspace Member",
- "labelPlural": "Workspace Members",
- "description": "A workspace member",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "db603745-ca4c-4a32-bb0d-d475216111d9",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "b97b813e-dc34-4c16-b7d3-7dee169c3f11",
- "type": "UUID",
- "name": "userId",
- "label": "User Id",
- "description": "Associated User Id",
- "icon": "IconCircleUsers",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "12d19915-891e-4a4e-8c42-49a12639264f",
- "type": "RELATION",
- "name": "authoredComments",
- "label": "Authored comments",
- "description": "Authored comments",
- "icon": "IconComment",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "4917f689-5cc2-4716-b4ab-6906aef009b3",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "12d19915-891e-4a4e-8c42-49a12639264f",
- "name": "authoredComments"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "3af96291-b873-402f-bd90-f4731984c8dd",
- "nameSingular": "comment",
- "namePlural": "comments"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "1a7fec45-dd33-43a0-9302-5b0b9052d2f0",
- "name": "author"
- }
- }
- },
- {
- "__typename": "field",
- "id": "5e889b07-de1e-47f0-aeb9-301a684bd6a4",
- "type": "RELATION",
- "name": "authoredActivities",
- "label": "Authored activities",
- "description": "Activities created by the workspace member",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "6d4e8025-7ee9-4079-ae80-b18de7b5ff4e",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "5e889b07-de1e-47f0-aeb9-301a684bd6a4",
- "name": "authoredActivities"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "cf6f8138-3445-4a36-b137-41ebb8f2e3dc",
- "nameSingular": "activity",
- "namePlural": "activities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "beac3449-af10-43a2-9abb-276a798df3de",
- "name": "author"
- }
- }
- },
- {
- "__typename": "field",
- "id": "dd7ee456-52bf-4335-bee9-7ba18a1e9a09",
- "type": "RELATION",
- "name": "messageParticipants",
- "label": "Message Participants",
- "description": "Message Participants",
- "icon": "IconUserCircle",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "94c22c13-b00a-4f60-b2d2-f34b9efe6aa2",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "dd7ee456-52bf-4335-bee9-7ba18a1e9a09",
- "name": "messageParticipants"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "b889efa2-e58a-471c-b258-3c5ef2fa09e9",
- "nameSingular": "messageParticipant",
- "namePlural": "messageParticipants"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "a7036ff9-a86d-4290-9f2a-cc360c86fe1e",
- "name": "workspaceMember"
- }
- }
- },
- {
- "__typename": "field",
- "id": "de44f939-76d9-4c1a-96aa-7c5a646f2045",
- "type": "RELATION",
- "name": "accountOwnerForCompanies",
- "label": "Account Owner For Companies",
- "description": "Account owner for companies",
- "icon": "IconBriefcase",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "0896a728-e2cf-4032-9af2-a471645e9697",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "de44f939-76d9-4c1a-96aa-7c5a646f2045",
- "name": "accountOwnerForCompanies"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "f1231579-8e7d-4b84-9a60-41844902f2c4",
- "nameSingular": "company",
- "namePlural": "companies"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "3ece1b4d-c052-4b32-bd2a-ba0f8c8b6f3e",
- "name": "accountOwner"
- }
- }
- },
- {
- "__typename": "field",
- "id": "45b45740-d6cd-476c-af07-f6ed323953b6",
- "type": "RELATION",
- "name": "auditLogs",
- "label": "Audit Logs",
- "description": "Audit Logs linked to the workspace member",
- "icon": "IconTimelineEvent",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "025cb05b-3bdb-4418-8a07-8b7a8c22dbc1",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "45b45740-d6cd-476c-af07-f6ed323953b6",
- "name": "auditLogs"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "189129d8-8037-4edf-9c91-63001ab52370",
- "nameSingular": "auditLog",
- "namePlural": "auditLogs"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "0e09a491-d3bd-4a23-9c50-cda32acbc7ef",
- "name": "workspaceMember"
- }
- }
- },
- {
- "__typename": "field",
- "id": "956a552e-b573-4d31-afd4-b65cb8f2b4b8",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "1b2d1e2c-290d-4a0e-adf9-192e5fac103c",
- "type": "RELATION",
- "name": "authoredAttachments",
- "label": "Authored attachments",
- "description": "Attachments created by the workspace member",
- "icon": "IconFileImport",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "c86299f2-7210-4c89-a2ab-29e17f21edc8",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "1b2d1e2c-290d-4a0e-adf9-192e5fac103c",
- "name": "authoredAttachments"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "9a53b4e1-bce2-4160-8ce3-028e14b2abb7",
- "nameSingular": "attachment",
- "namePlural": "attachments"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "3d2bbb4e-e908-4bc5-97d7-a152dd7652bf",
- "name": "author"
- }
- }
- },
- {
- "__typename": "field",
- "id": "89b50259-5ed6-4504-9c89-3f4457dc43a6",
- "type": "RELATION",
- "name": "blocklist",
- "label": "Blocklist",
- "description": "Blocklisted handles",
- "icon": "IconForbid2",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "d9eb657a-f97b-4cec-af79-0e113d47279b",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "89b50259-5ed6-4504-9c89-3f4457dc43a6",
- "name": "blocklist"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "033ae6fd-c59e-475e-ba93-bbc1b2b185a5",
- "nameSingular": "blocklist",
- "namePlural": "blocklists"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "597169c3-ad77-4a48-8a2a-94b7cc155e25",
- "name": "workspaceMember"
- }
- }
- },
- {
- "__typename": "field",
- "id": "aa2d23d6-1303-4347-b252-48dd9f9bd52b",
- "type": "SELECT",
- "name": "dateFormat",
- "label": "Date format",
- "description": "User's preferred date format",
- "icon": "IconCalendarEvent",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'SYSTEM'",
- "options": [
- {
- "id": "6a0b0a55-082b-4d1e-ac29-2d423a05744c",
- "color": "turquoise",
- "label": "System",
- "value": "SYSTEM",
- "position": 0
- },
- {
- "id": "eee2180b-4f0e-41ef-9a6a-2e2938322270",
- "color": "red",
- "label": "Month First",
- "value": "MONTH_FIRST",
- "position": 1
- },
- {
- "id": "4cbf15d8-a63c-4615-ad5d-74e798199ffd",
- "color": "purple",
- "label": "Day First",
- "value": "DAY_FIRST",
- "position": 2
- },
- {
- "id": "c391f77e-7728-4369-ad35-60a1d84ee49e",
- "color": "sky",
- "label": "Year First",
- "value": "YEAR_FIRST",
- "position": 3
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "95db483c-ff8c-430f-a995-de4f96fff94b",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "ddadaf73-086d-4453-b631-5e16afce87b5",
- "type": "TEXT",
- "name": "locale",
- "label": "Language",
- "description": "Preferred language",
- "icon": "IconLanguage",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'en'",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6623a9d7-e137-4709-a592-02ae76e5bfd7",
- "type": "RELATION",
- "name": "calendarEventParticipants",
- "label": "Calendar Event Participants",
- "description": "Calendar Event Participants",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "67aaa999-8332-43ba-8830-76bf48d53cf2",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "6623a9d7-e137-4709-a592-02ae76e5bfd7",
- "name": "calendarEventParticipants"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "2128a43e-af47-44bf-b7e9-5d00ddd27a99",
- "nameSingular": "calendarEventParticipant",
- "namePlural": "calendarEventParticipants"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "b2982cd8-c796-4718-b74b-298b46d19841",
- "name": "workspaceMember"
- }
- }
- },
- {
- "__typename": "field",
- "id": "7b895d3d-e6df-4b0e-8497-28d91431de59",
- "type": "TEXT",
- "name": "avatarUrl",
- "label": "Avatar Url",
- "description": "Workspace member avatar",
- "icon": "IconFileUpload",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "4d977e6a-4d0e-4bca-b743-9bc3df1744d6",
- "type": "RELATION",
- "name": "connectedAccounts",
- "label": "Connected accounts",
- "description": "Connected accounts",
- "icon": "IconAt",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "9a65de46-ef09-429f-b7ba-31cb8a8c7038",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "4d977e6a-4d0e-4bca-b743-9bc3df1744d6",
- "name": "connectedAccounts"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "90e63030-f26d-46c8-b27a-13686b717538",
- "nameSingular": "connectedAccount",
- "namePlural": "connectedAccounts"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "8c36e0eb-108e-4797-97a1-b9b5ea096180",
- "name": "accountOwner"
- }
- }
- },
- {
- "__typename": "field",
- "id": "156aa42f-667a-46aa-9aea-ff8472f28509",
- "type": "TEXT",
- "name": "timeZone",
- "label": "Time zone",
- "description": "User time zone",
- "icon": "IconTimezone",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'system'",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "fefca31b-ba53-4860-b04e-5b9944587693",
- "type": "RELATION",
- "name": "assignedTasks",
- "label": "Assigned tasks",
- "description": "Tasks assigned to the workspace member",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "5527b9f6-55ec-4efd-b244-03e91b01e91b",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "fefca31b-ba53-4860-b04e-5b9944587693",
- "name": "assignedTasks"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "99f8caa6-263c-4690-8dc0-eb7645304cf5",
- "nameSingular": "task",
- "namePlural": "tasks"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "53347f0d-658a-45b0-91b5-2088adbeaaf0",
- "name": "assignee"
- }
- }
- },
- {
- "__typename": "field",
- "id": "db603745-ca4c-4a32-bb0d-d475216111d9",
- "type": "FULL_NAME",
- "name": "name",
- "label": "Name",
- "description": "Workspace member name",
- "icon": "IconCircleUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": {
- "lastName": "''",
- "firstName": "''"
- },
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "83def86f-9dbd-4606-a7a1-844c1d0f3080",
- "type": "TEXT",
- "name": "userEmail",
- "label": "User Email",
- "description": "Related user email address",
- "icon": "IconMail",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "a147a0df-eb28-4259-a304-0460f92adf30",
- "type": "RELATION",
- "name": "assignedActivities",
- "label": "Assigned activities",
- "description": "Activities assigned to the workspace member",
- "icon": "IconCheckbox",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "cf9ac76a-9f22-4252-a00a-63cc45fcabc4",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "a147a0df-eb28-4259-a304-0460f92adf30",
- "name": "assignedActivities"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "cf6f8138-3445-4a36-b137-41ebb8f2e3dc",
- "nameSingular": "activity",
- "namePlural": "activities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "ea9aa19c-22d8-4b72-83ff-78d9653c27c4",
- "name": "assignee"
- }
- }
- },
- {
- "__typename": "field",
- "id": "56975f55-db1f-464f-b03e-2ecadb8b59cd",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "f537669a-4524-4dfc-91d3-79438e2a481e",
- "type": "RELATION",
- "name": "favorites",
- "label": "Favorites",
- "description": "Favorites linked to the workspace member",
- "icon": "IconHeart",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "b0f40da3-1fda-4803-be21-14a2755bc834",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "f537669a-4524-4dfc-91d3-79438e2a481e",
- "name": "favorites"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "d19be8c8-2cf4-4c29-80ae-0d1841dc11c1",
- "nameSingular": "favorite",
- "namePlural": "favorites"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "407a2cbc-6c15-41dd-942c-5322d273bec3",
- "name": "workspaceMember"
- }
- }
- },
- {
- "__typename": "field",
- "id": "f1374fe7-1b98-4868-96b0-63d64996e397",
- "type": "SELECT",
- "name": "timeFormat",
- "label": "Time format",
- "description": "User's preferred time format",
- "icon": "IconClock2",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'SYSTEM'",
- "options": [
- {
- "id": "91233e08-341a-4dfd-bb89-450a4f40c579",
- "color": "sky",
- "label": "System",
- "value": "SYSTEM",
- "position": 0
- },
- {
- "id": "9e680299-7bee-432a-9e65-dfa9ad270769",
- "color": "red",
- "label": "24HRS",
- "value": "HOUR_24",
- "position": 1
- },
- {
- "id": "c1d9ba3d-291b-4636-9909-14e41a5812db",
- "color": "purple",
- "label": "12HRS",
- "value": "HOUR_12",
- "position": 2
- }
- ],
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "6c5481e3-b9a4-4298-b011-14dfc7ed3be4",
- "type": "TEXT",
- "name": "colorScheme",
- "label": "Color Scheme",
- "description": "Preferred color scheme",
- "icon": "IconColorSwatch",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'Light'",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "4ae17923-dd16-45c7-9df3-8cee92584a52",
- "type": "RELATION",
- "name": "timelineActivities",
- "label": "Events",
- "description": "Events linked to the workspace member",
- "icon": "IconTimelineEvent",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "170c6f88-63b3-41ff-9e5d-044968a062a4",
- "direction": "ONE_TO_MANY",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "4ae17923-dd16-45c7-9df3-8cee92584a52",
- "name": "timelineActivities"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "94ef21ab-5eca-4c80-b378-2a207dcca2e4",
- "nameSingular": "timelineActivity",
- "namePlural": "timelineActivities"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "dba195e2-63d6-42ca-94aa-42c87b4306ea",
- "name": "workspaceMember"
- }
- }
- }
- ]
- },
- {
- "__typename": "object",
- "id": "1b5e63b9-9fc3-485d-86ff-de70ff17a665",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "viewSort",
- "namePlural": "viewSorts",
- "labelSingular": "View Sort",
- "labelPlural": "View Sorts",
- "description": "(System) View Sorts",
- "icon": "IconArrowsSort",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "35329333-5b6c-4160-8a2a-48ff1f40c500",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "14b9ac38-97c5-44f9-b4f5-a6bbc18dd87c",
- "type": "TEXT",
- "name": "direction",
- "label": "Direction",
- "description": "View Sort direction",
- "icon": null,
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "'asc'",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "673fb6fb-5123-4336-9b4b-e4b268c1cffe",
- "type": "RELATION",
- "name": "view",
- "label": "View",
- "description": "View Sort related view",
- "icon": "IconLayoutCollage",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "53abf7c2-810d-478b-bb2d-689f31322d67",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "1b5e63b9-9fc3-485d-86ff-de70ff17a665",
- "nameSingular": "viewSort",
- "namePlural": "viewSorts"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "673fb6fb-5123-4336-9b4b-e4b268c1cffe",
- "name": "view"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "90df20e5-c655-474f-bb98-b423652e36df",
- "nameSingular": "view",
- "namePlural": "views"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "4abadd14-56cd-48e4-8013-7b46de4ffe22",
- "name": "viewSorts"
- }
- }
- },
- {
- "__typename": "field",
- "id": "75ec0934-d5bf-4a0a-9b18-cadb0a56e489",
- "type": "UUID",
- "name": "fieldMetadataId",
- "label": "Field Metadata Id",
- "description": "View Sort target field",
- "icon": "IconTag",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "35329333-5b6c-4160-8a2a-48ff1f40c500",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "a5baa6c5-3cf2-4f2d-a7ff-b5d7176a1498",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "bdfdc845-c48e-4671-b07b-579ad800408f",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "e9572e7f-c327-4da6-93c0-64bf5a465de4",
- "type": "UUID",
- "name": "viewId",
- "label": "View id (foreign key)",
- "description": "View Sort related view id foreign key",
- "icon": "IconLayoutCollage",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "189129d8-8037-4edf-9c91-63001ab52370",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "auditLog",
- "namePlural": "auditLogs",
- "labelSingular": "Audit Log",
- "labelPlural": "Audit Logs",
- "description": "An audit log of actions performed in the system",
- "icon": "IconIconTimelineEvent",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "8407e296-b80d-4bcb-9e33-8bf9bf942625",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "3cc5ffd0-17da-42f6-87bb-2021b3ad41e3",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "78632f28-cdfa-4f91-a019-de3d7b711d4d",
- "type": "RAW_JSON",
- "name": "context",
- "label": "Event context",
- "description": "Json object to provide context (user, device, workspace, etc.)",
- "icon": "IconListDetails",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "b706c04a-686d-45a4-b2a0-f28fb8e743fa",
- "type": "TEXT",
- "name": "objectMetadataId",
- "label": "Object metadata id",
- "description": "Object metadata id",
- "icon": "IconAbc",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "fadfc339-188a-4563-a502-478e72ce09c3",
- "type": "TEXT",
- "name": "objectName",
- "label": "Object name",
- "description": "Object name",
- "icon": "IconAbc",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "f90ab65b-1171-4c1e-9603-7b744058c317",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "5e4525b9-5a43-414e-ad35-f1eb19858a27",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "522226c1-3446-423c-b6a6-44776f59b076",
- "type": "RAW_JSON",
- "name": "properties",
- "label": "Event details",
- "description": "Json value for event details",
- "icon": "IconListDetails",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "0e09a491-d3bd-4a23-9c50-cda32acbc7ef",
- "type": "RELATION",
- "name": "workspaceMember",
- "label": "Workspace Member",
- "description": "Event workspace member",
- "icon": "IconCircleUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "025cb05b-3bdb-4418-8a07-8b7a8c22dbc1",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "189129d8-8037-4edf-9c91-63001ab52370",
- "nameSingular": "auditLog",
- "namePlural": "auditLogs"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "0e09a491-d3bd-4a23-9c50-cda32acbc7ef",
- "name": "workspaceMember"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "45b45740-d6cd-476c-af07-f6ed323953b6",
- "name": "auditLogs"
- }
- }
- },
- {
- "__typename": "field",
- "id": "8407e296-b80d-4bcb-9e33-8bf9bf942625",
- "type": "TEXT",
- "name": "name",
- "label": "Event name",
- "description": "Event name/type",
- "icon": "IconAbc",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "9d2e7f7f-d1a9-4f42-bfe9-437fe0e72088",
- "type": "UUID",
- "name": "recordId",
- "label": "Record id",
- "description": "Record id",
- "icon": "IconAbc",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "7d8d0023-c979-4c93-850e-7fce90b500ae",
- "type": "UUID",
- "name": "workspaceMemberId",
- "label": "Workspace Member id (foreign key)",
- "description": "Event workspace member id foreign key",
- "icon": "IconCircleUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- }
- ]
- },
- {
- "__typename": "object",
- "id": "033ae6fd-c59e-475e-ba93-bbc1b2b185a5",
- "dataSourceId": "9af88cea-baa2-4c00-bc22-c55cfbcd7e3c",
- "nameSingular": "blocklist",
- "namePlural": "blocklists",
- "labelSingular": "Blocklist",
- "labelPlural": "Blocklists",
- "description": "Blocklist",
- "icon": "IconForbid2",
- "isCustom": false,
- "isRemote": false,
- "isActive": true,
- "isSystem": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "labelIdentifierFieldMetadataId": "231e4111-5613-4925-97e4-6c84bcee60b7",
- "imageIdentifierFieldMetadataId": null,
- "fields": [
- {
- "__typename": "field",
- "id": "2b4e97a1-b598-47f4-83ab-4ec184dac6ed",
- "type": "DATE_TIME",
- "name": "createdAt",
- "label": "Creation date",
- "description": "Creation date",
- "icon": "IconCalendar",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "54603149-fda9-4d0b-87eb-0c093c297599",
- "type": "UUID",
- "name": "workspaceMemberId",
- "label": "WorkspaceMember id (foreign key)",
- "description": "WorkspaceMember id foreign key",
- "icon": "IconCircleUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "597169c3-ad77-4a48-8a2a-94b7cc155e25",
- "type": "RELATION",
- "name": "workspaceMember",
- "label": "WorkspaceMember",
- "description": "WorkspaceMember",
- "icon": "IconCircleUser",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": true,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": null,
- "options": null,
- "relationDefinition": {
- "__typename": "RelationDefinition",
- "relationId": "d9eb657a-f97b-4cec-af79-0e113d47279b",
- "direction": "MANY_TO_ONE",
- "sourceObjectMetadata": {
- "__typename": "object",
- "id": "033ae6fd-c59e-475e-ba93-bbc1b2b185a5",
- "nameSingular": "blocklist",
- "namePlural": "blocklists"
- },
- "sourceFieldMetadata": {
- "__typename": "field",
- "id": "597169c3-ad77-4a48-8a2a-94b7cc155e25",
- "name": "workspaceMember"
- },
- "targetObjectMetadata": {
- "__typename": "object",
- "id": "1e9ad365-ccb9-4dec-b42f-13b6e86477e3",
- "nameSingular": "workspaceMember",
- "namePlural": "workspaceMembers"
- },
- "targetFieldMetadata": {
- "__typename": "field",
- "id": "89b50259-5ed6-4504-9c89-3f4457dc43a6",
- "name": "blocklist"
- }
- }
- },
- {
- "__typename": "field",
- "id": "231e4111-5613-4925-97e4-6c84bcee60b7",
- "type": "TEXT",
- "name": "handle",
- "label": "Handle",
- "description": "Handle",
- "icon": "IconAt",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "''",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "88c47801-89ed-43ee-8b0d-172eccef5445",
- "type": "DATE_TIME",
- "name": "updatedAt",
- "label": "Last update",
- "description": "Last time the record was changed",
- "icon": "IconCalendarClock",
- "isCustom": false,
- "isActive": true,
- "isSystem": false,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "now",
- "options": null,
- "relationDefinition": null
- },
- {
- "__typename": "field",
- "id": "c1f89a93-80b6-4601-a330-8d9f7d5ef894",
- "type": "UUID",
- "name": "id",
- "label": "Id",
- "description": "Id",
- "icon": "Icon123",
- "isCustom": false,
- "isActive": true,
- "isSystem": true,
- "isNullable": false,
- "createdAt": "2024-08-05T16:38:57.285Z",
- "updatedAt": "2024-08-05T16:38:57.285Z",
- "defaultValue": "uuid",
- "options": null,
- "relationDefinition": null
- }
- ]
- }
- ];
-
- // Todo fix typing here (the backend is not in sync with the frontend)
- return mockArray as ObjectMetadataItem[];
-};
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/isObjectMetadataReadOnly.ts b/packages/twenty-front/src/modules/object-metadata/utils/isObjectMetadataReadOnly.ts
new file mode 100644
index 000000000000..c6455e009c9d
--- /dev/null
+++ b/packages/twenty-front/src/modules/object-metadata/utils/isObjectMetadataReadOnly.ts
@@ -0,0 +1,8 @@
+import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
+import { isWorkflowSubObjectMetadata } from '@/object-metadata/utils/isWorkflowSubObjectMetadata';
+
+export const isObjectMetadataReadOnly = (
+ objectMetadataItem: Pick,
+) =>
+ objectMetadataItem.isRemote ||
+ isWorkflowSubObjectMetadata(objectMetadataItem.nameSingular);
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/isWorkflowSubObjectMetadata.ts b/packages/twenty-front/src/modules/object-metadata/utils/isWorkflowSubObjectMetadata.ts
new file mode 100644
index 000000000000..1ad6c0cbb290
--- /dev/null
+++ b/packages/twenty-front/src/modules/object-metadata/utils/isWorkflowSubObjectMetadata.ts
@@ -0,0 +1,7 @@
+import { CoreObjectNameSingular } from '@/object-metadata/types/CoreObjectNameSingular';
+
+export const isWorkflowSubObjectMetadata = (
+ objectMetadataNameSingular?: string,
+) =>
+ objectMetadataNameSingular === CoreObjectNameSingular.WorkflowVersion ||
+ objectMetadataNameSingular === CoreObjectNameSingular.WorkflowRun;
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/mapFieldMetadataToGraphQLQuery.ts b/packages/twenty-front/src/modules/object-metadata/utils/mapFieldMetadataToGraphQLQuery.ts
index d379313a0496..bf29d99ee1f9 100644
--- a/packages/twenty-front/src/modules/object-metadata/utils/mapFieldMetadataToGraphQLQuery.ts
+++ b/packages/twenty-front/src/modules/object-metadata/utils/mapFieldMetadataToGraphQLQuery.ts
@@ -26,10 +26,8 @@ export const mapFieldMetadataToGraphQLQuery = ({
const fieldIsSimpleValue = [
FieldMetadataType.Uuid,
FieldMetadataType.Text,
- FieldMetadataType.Phone,
FieldMetadataType.DateTime,
FieldMetadataType.Date,
- FieldMetadataType.Email,
FieldMetadataType.Number,
FieldMetadataType.Boolean,
FieldMetadataType.Rating,
@@ -97,14 +95,6 @@ ${mapObjectMetadataToGraphQLQuery({
}`;
}
- if (fieldType === FieldMetadataType.Link) {
- return `${field.name}
-{
- label
- url
-}`;
- }
-
if (fieldType === FieldMetadataType.Links) {
return `${field.name}
{
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/mapObjectMetadataToGraphQLQuery.ts b/packages/twenty-front/src/modules/object-metadata/utils/mapObjectMetadataToGraphQLQuery.ts
index f9e248815d99..9e705d428ced 100644
--- a/packages/twenty-front/src/modules/object-metadata/utils/mapObjectMetadataToGraphQLQuery.ts
+++ b/packages/twenty-front/src/modules/object-metadata/utils/mapObjectMetadataToGraphQLQuery.ts
@@ -18,6 +18,7 @@ export const mapObjectMetadataToGraphQLQuery = ({
const fieldsThatShouldBeQueried =
objectMetadataItem?.fields
.filter((field) => field.isActive)
+ .sort((fieldA, fieldB) => fieldA.name.localeCompare(fieldB.name))
.filter((field) =>
shouldFieldBeQueried({
field,
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/mapPaginatedObjectMetadataItemsToObjectMetadataItems.ts b/packages/twenty-front/src/modules/object-metadata/utils/mapPaginatedObjectMetadataItemsToObjectMetadataItems.ts
index 9c714cb95a92..db3506c2d12c 100644
--- a/packages/twenty-front/src/modules/object-metadata/utils/mapPaginatedObjectMetadataItemsToObjectMetadataItems.ts
+++ b/packages/twenty-front/src/modules/object-metadata/utils/mapPaginatedObjectMetadataItemsToObjectMetadataItems.ts
@@ -11,6 +11,12 @@ export const mapPaginatedObjectMetadataItemsToObjectMetadataItems = ({
pagedObjectMetadataItems?.objects.edges.map((object) => ({
...object.node,
fields: object.node.fields.edges.map((field) => field.node),
+ indexMetadatas: object.node.indexMetadatas.edges.map((index) => ({
+ ...index.node,
+ indexFieldMetadatas: index.node.indexFieldMetadatas?.edges.map(
+ (indexField) => indexField.node,
+ ),
+ })),
})) ?? [];
return formattedObjects;
diff --git a/packages/twenty-front/src/modules/object-metadata/utils/mapSoftDeleteFieldsToGraphQLQuery.ts b/packages/twenty-front/src/modules/object-metadata/utils/mapSoftDeleteFieldsToGraphQLQuery.ts
new file mode 100644
index 000000000000..701e524b56ab
--- /dev/null
+++ b/packages/twenty-front/src/modules/object-metadata/utils/mapSoftDeleteFieldsToGraphQLQuery.ts
@@ -0,0 +1,16 @@
+import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
+
+export const mapSoftDeleteFieldsToGraphQLQuery = (
+ objectMetadataItem: Pick,
+): string => {
+ const softDeleteFields = ['id', 'deletedAt'];
+
+ const fieldsThatShouldBeQueried = objectMetadataItem.fields.filter(
+ (field) => field.isActive && softDeleteFields.includes(field.name),
+ );
+
+ return `{
+ __typename
+ ${fieldsThatShouldBeQueried.map((field) => field.name).join('\n')}
+ }`;
+};
diff --git a/packages/twenty-front/src/modules/object-metadata/validation-schemas/__tests__/objectMetadataItemSchema.test.ts b/packages/twenty-front/src/modules/object-metadata/validation-schemas/__tests__/objectMetadataItemSchema.test.ts
index 0e8d60c66fb9..cbb1b2c46b3d 100644
--- a/packages/twenty-front/src/modules/object-metadata/validation-schemas/__tests__/objectMetadataItemSchema.test.ts
+++ b/packages/twenty-front/src/modules/object-metadata/validation-schemas/__tests__/objectMetadataItemSchema.test.ts
@@ -1,11 +1,12 @@
-import { mockedCompanyObjectMetadataItem } from '~/testing/mock-data/metadata';
-
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
import { objectMetadataItemSchema } from '../objectMetadataItemSchema';
describe('objectMetadataItemSchema', () => {
it('validates a valid object metadata item', () => {
// Given
- const validObjectMetadataItem = mockedCompanyObjectMetadataItem;
+ const validObjectMetadataItem = generatedMockObjectMetadataItems.find(
+ (item) => item.nameSingular === 'company',
+ );
// When
const result = objectMetadataItemSchema.parse(validObjectMetadataItem);
diff --git a/packages/twenty-front/src/modules/object-metadata/validation-schemas/fieldMetadataItemSchema.ts b/packages/twenty-front/src/modules/object-metadata/validation-schemas/fieldMetadataItemSchema.ts
index 42a976b5d2e1..5d4ddc67cbb2 100644
--- a/packages/twenty-front/src/modules/object-metadata/validation-schemas/fieldMetadataItemSchema.ts
+++ b/packages/twenty-front/src/modules/object-metadata/validation-schemas/fieldMetadataItemSchema.ts
@@ -20,6 +20,7 @@ export const fieldMetadataItemSchema = (existingLabels?: string[]) => {
isActive: z.boolean(),
isCustom: z.boolean(),
isNullable: z.boolean(),
+ isUnique: z.boolean(),
isSystem: z.boolean(),
label: metadataLabelSchema(existingLabels),
name: camelCaseStringSchema,
@@ -35,6 +36,7 @@ export const fieldMetadataItemSchema = (existingLabels?: string[]) => {
)
.nullable()
.optional(),
+ settings: z.any().optional(),
relationDefinition: z
.object({
__typename: z.literal('RelationDefinition').optional(),
diff --git a/packages/twenty-front/src/modules/object-metadata/validation-schemas/indexFieldMetadataItemSchema.ts b/packages/twenty-front/src/modules/object-metadata/validation-schemas/indexFieldMetadataItemSchema.ts
new file mode 100644
index 000000000000..a88fe26ecde5
--- /dev/null
+++ b/packages/twenty-front/src/modules/object-metadata/validation-schemas/indexFieldMetadataItemSchema.ts
@@ -0,0 +1,12 @@
+import { z } from 'zod';
+
+import { IndexFieldMetadataItem } from '@/object-metadata/types/IndexFieldMetadataItem';
+
+export const indexFieldMetadataItemSchema = z.object({
+ __typename: z.literal('indexField'),
+ fieldMetadataId: z.string().uuid(),
+ id: z.string(),
+ createdAt: z.string(),
+ updatedAt: z.string(),
+ order: z.number(),
+}) satisfies z.ZodType;
diff --git a/packages/twenty-front/src/modules/object-metadata/validation-schemas/indexMetadataItemSchema.ts b/packages/twenty-front/src/modules/object-metadata/validation-schemas/indexMetadataItemSchema.ts
new file mode 100644
index 000000000000..50d80da705ec
--- /dev/null
+++ b/packages/twenty-front/src/modules/object-metadata/validation-schemas/indexMetadataItemSchema.ts
@@ -0,0 +1,18 @@
+import { z } from 'zod';
+
+import { IndexMetadataItem } from '@/object-metadata/types/IndexMetadataItem';
+import { indexFieldMetadataItemSchema } from '@/object-metadata/validation-schemas/indexFieldMetadataItemSchema';
+import { IndexType } from '~/generated-metadata/graphql';
+
+export const indexMetadataItemSchema = z.object({
+ __typename: z.literal('index'),
+ id: z.string().uuid(),
+ name: z.string(),
+ indexFieldMetadatas: z.array(indexFieldMetadataItemSchema),
+ createdAt: z.string(),
+ updatedAt: z.string(),
+ indexType: z.nativeEnum(IndexType),
+ indexWhereClause: z.string().nullable(),
+ isUnique: z.boolean(),
+ objectMetadata: z.any(),
+}) satisfies z.ZodType;
diff --git a/packages/twenty-front/src/modules/object-metadata/validation-schemas/objectMetadataItemSchema.ts b/packages/twenty-front/src/modules/object-metadata/validation-schemas/objectMetadataItemSchema.ts
index 145d9f68091e..a12b072ebc35 100644
--- a/packages/twenty-front/src/modules/object-metadata/validation-schemas/objectMetadataItemSchema.ts
+++ b/packages/twenty-front/src/modules/object-metadata/validation-schemas/objectMetadataItemSchema.ts
@@ -2,6 +2,7 @@ import { z } from 'zod';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { fieldMetadataItemSchema } from '@/object-metadata/validation-schemas/fieldMetadataItemSchema';
+import { indexMetadataItemSchema } from '@/object-metadata/validation-schemas/indexMetadataItemSchema';
import { metadataLabelSchema } from '@/object-metadata/validation-schemas/metadataLabelSchema';
import { camelCaseStringSchema } from '~/utils/validation-schemas/camelCaseStringSchema';
@@ -11,6 +12,7 @@ export const objectMetadataItemSchema = z.object({
dataSourceId: z.string().uuid(),
description: z.string().trim().nullable().optional(),
fields: z.array(fieldMetadataItemSchema()),
+ indexMetadatas: z.array(indexMetadataItemSchema),
icon: z.string().startsWith('Icon').trim(),
id: z.string().uuid(),
imageIdentifierFieldMetadataId: z.string().uuid().nullable(),
diff --git a/packages/twenty-front/src/modules/object-record/cache/hooks/useDeleteRecordFromCache.ts b/packages/twenty-front/src/modules/object-record/cache/hooks/useDeleteRecordFromCache.ts
index 693236975e51..90105c700526 100644
--- a/packages/twenty-front/src/modules/object-record/cache/hooks/useDeleteRecordFromCache.ts
+++ b/packages/twenty-front/src/modules/object-record/cache/hooks/useDeleteRecordFromCache.ts
@@ -18,11 +18,11 @@ export const useDeleteRecordFromCache = ({
const { objectMetadataItems } = useObjectMetadataItems();
- return (recordToDelete: ObjectRecord) => {
+ return (recordToDestroy: ObjectRecord) => {
deleteRecordFromCache({
objectMetadataItem,
objectMetadataItems,
- recordToDelete,
+ recordToDestroy,
cache: apolloClient.cache,
});
};
diff --git a/packages/twenty-front/src/modules/object-record/cache/utils/__tests__/getRecordNodeFromRecord.test.ts b/packages/twenty-front/src/modules/object-record/cache/utils/__tests__/getRecordNodeFromRecord.test.ts
index 219d05f854e5..4641974a0632 100644
--- a/packages/twenty-front/src/modules/object-record/cache/utils/__tests__/getRecordNodeFromRecord.test.ts
+++ b/packages/twenty-front/src/modules/object-record/cache/utils/__tests__/getRecordNodeFromRecord.test.ts
@@ -1,10 +1,8 @@
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
-import {
- mockedObjectMetadataItems,
- mockedPersonObjectMetadataItem,
-} from '~/testing/mock-data/metadata';
+
import { getPeopleMock } from '~/testing/mock-data/people';
+import { generatedMockObjectMetadataItems } from '~/testing/mock-data/generatedMockObjectMetadataItems';
import { getRecordNodeFromRecord } from '../getRecordNodeFromRecord';
const peopleMock = getPeopleMock();
@@ -12,11 +10,18 @@ const peopleMock = getPeopleMock();
describe('getRecordNodeFromRecord', () => {
it('computes relation records cache references by default', () => {
// Given
- const objectMetadataItems: ObjectMetadataItem[] = mockedObjectMetadataItems;
- const objectMetadataItem: Pick<
- ObjectMetadataItem,
- 'fields' | 'namePlural' | 'nameSingular'
- > = mockedPersonObjectMetadataItem;
+ const objectMetadataItems: ObjectMetadataItem[] =
+ generatedMockObjectMetadataItems;
+ const objectMetadataItem:
+ | Pick
+ | undefined = generatedMockObjectMetadataItems.find(
+ (item) => item.nameSingular === 'person',
+ );
+
+ if (!objectMetadataItem) {
+ throw new Error('Object metadata item not found');
+ }
+
const recordGqlFields = {
name: true,
company: true,
@@ -47,11 +52,18 @@ describe('getRecordNodeFromRecord', () => {
it('does not compute relation records cache references when `computeReferences` is false', () => {
// Given
- const objectMetadataItems: ObjectMetadataItem[] = mockedObjectMetadataItems;
- const objectMetadataItem: Pick<
- ObjectMetadataItem,
- 'fields' | 'namePlural' | 'nameSingular'
- > = mockedPersonObjectMetadataItem;
+ const objectMetadataItems: ObjectMetadataItem[] =
+ generatedMockObjectMetadataItems;
+ const objectMetadataItem:
+ | Pick
+ | undefined = generatedMockObjectMetadataItems.find(
+ (item) => item.nameSingular === 'person',
+ );
+
+ if (!objectMetadataItem) {
+ throw new Error('Object metadata item not found');
+ }
+
const recordGqlFields = {
name: true,
company: true,
diff --git a/packages/twenty-front/src/modules/object-record/cache/utils/deleteRecordFromCache.ts b/packages/twenty-front/src/modules/object-record/cache/utils/deleteRecordFromCache.ts
index ec9ec8b3a4a3..10bc657ca3d7 100644
--- a/packages/twenty-front/src/modules/object-record/cache/utils/deleteRecordFromCache.ts
+++ b/packages/twenty-front/src/modules/object-record/cache/utils/deleteRecordFromCache.ts
@@ -1,6 +1,6 @@
import { ApolloCache } from '@apollo/client';
-import { triggerDeleteRecordsOptimisticEffect } from '@/apollo/optimistic-effect/utils/triggerDeleteRecordsOptimisticEffect';
+import { triggerDestroyRecordsOptimisticEffect } from '@/apollo/optimistic-effect/utils/triggerDestroyRecordsOptimisticEffect';
import { ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
import { getObjectTypename } from '@/object-record/cache/utils/getObjectTypename';
import { ObjectRecord } from '@/object-record/types/ObjectRecord';
@@ -8,21 +8,21 @@ import { ObjectRecord } from '@/object-record/types/ObjectRecord';
export const deleteRecordFromCache = ({
objectMetadataItem,
objectMetadataItems,
- recordToDelete,
+ recordToDestroy,
cache,
}: {
objectMetadataItem: ObjectMetadataItem;
objectMetadataItems: ObjectMetadataItem[];
- recordToDelete: ObjectRecord;
+ recordToDestroy: ObjectRecord;
cache: ApolloCache