Commit Graph
7373 Commits
Author SHA1 Message Date
Paul RastoinandGitHub c1bf0a1fbf Object metadata API create one using workspace migration v2 (#13420)
# Introduction
In this PR we create basic transpilation methods and utils to handle
input to flat, entity to flat, object maps to flat. In order to
transpile everything into a common validation that will be implemented
in another PR

## FieldMetadataEntity typing
Added `never | null` to fields that should never be in order to ease
general abstracted method to pass null, as anw it's what is in the
database

## Todo
- ~~Create a feature flag~~
- Integration test for object creation through metadata api + pg col
introspection and snapshoting
2025-07-29 17:47:28 +02:00
Thomas TrompetteandGitHub 600df4fd90 Reset relation id to null rather than empty string (#13488)
Empty string rases an error "invalid uuid".
When resetting a relation field - no value or deleting variable - we
should set null rather than an empty string. Otherwise the user that set
a relation field once in a workflow step has to always keep a value set.
2025-07-29 17:38:10 +02:00
Antoine MoreauxandGitHub 40f529f1ac feat(ai): add markdown in ai chat (#13402) 2025-07-29 15:13:00 +00:00
Thomas TrompetteandGitHub cbf731dba7 Filter batch fixes (#13486)
- handle multiselect and select

Before
<img width="200" height="200" alt="Capture d’écran 2025-07-29 à 13 47
36"
src="https://github.com/user-attachments/assets/02fd2085-f2a5-405e-adb4-a53457b43d95"
/>

After
<img width="200" height="200" alt="Capture d’écran 2025-07-29 à 13 44
09"
src="https://github.com/user-attachments/assets/b85dde54-0284-4f4f-b19d-b86516afdf81"
/>

- Fix node display in run

Before
<img width="200" height="200" alt="Capture d’écran 2025-07-29 à 13 47
13"
src="https://github.com/user-attachments/assets/c32dedaf-0c37-4300-9693-27a790a4d727"
/>

After
<img width="200" height="200" alt="Capture d’écran 2025-07-29 à 13 44
58"
src="https://github.com/user-attachments/assets/ab4449d0-933d-49f4-8572-75e484401c2c"
/>

- Remove assert to fix discard draft
- handle label for readonly
2025-07-29 16:19:22 +02:00
Lucas BordeauandGitHub d61eb1a951 Remove all legacy state management (#13476)
This PR removes every legacy state management logic left in the code
base, we only keep our last component state management logic.

Removed : 
- Scoped states logic
- Dropdown scope logic
- Scope id naming
- Component state v1
- Component state v2_alpha


# QA

| Component | Comments |
| --- | --- |
| AttachementDropdown | Ok |
| ObjectTasks | Ok |
| ActivityRichTextEditor | Ok |
| App | Ok dialogs work |
| AppRouterProviders | Ok dialogs work |
| RecordBoardScrollToFocusedCardEffect | Ok |
| RecordBoard | Ok |
| RecordBoardCard | OK |
| useSelectAllCards | Ok |
| RecordInlineCell | Ok |
| useInlineCell | Ok |
| RecordDetailRelationRecordsListItem | Ok |
| RecordDetailRelationSectionDropdownToMany | Ok |
| RecordDetailRelationSectionDropdownToOne | Ok |
| useHandleContainerMouseEnter | Ok |
| useResetTableRowSelection | Ok |
| useSelectAllRows | Ok |
| useSetRecordTableData | Ok |
| useRecordTable | Ok |
| useRecordTableMoveFocusedCell | Ok |
| useRecordTableMoveFocusedRow | Ok |
| useMoveHoverToCurrentCell | OK |
| useTriggerActionMenuDropdown | Ok |
| RecordTableBodyDragDropContextProvider | Ok |
| RecordTableHeaderCell | Ok |
| useSetCurrentRowSelected | Ok |
| useRecordTitleCell | Ok |
| SettingsObjectFieldActiveActionDropdown | Ok |
| SettingsObjectFieldInactiveActionDropdown | Ok |
| SettingsObjectFieldItemTableRow | Ok |
| SettingsObjectInactiveMenuDropDown | Ok |
| SettingsRoleEditEffect | Ok |
| SettingsRolesQueryEffect | Ok |
| Dropdown | Ok |
| useSelectableList | Ok |
| useSelectableListHotKeys | Ok |
| useSelectableListListenToEnterHotkeyOnItem | Ok |
| useNavigationSection | Ok |
| useCreateViewFromCurrentState | Ok |
| useDeleteViewFromCurrentState | Ok |
| useUpdateViewFromCurrentState | Ok |
| ViewPickerFavoriteFoldersDropdown | Ok |
| useCreateViewFromCurrentView | Ok |
| ViewBarDetails | Ok |
| WorkflowRunVisualizer | Ok |
| useHandleWorkflowRunDiagramCanvasInit | Ok |
| WorkflowDiagramCanvasBase | Ok |
| WorkflowRunVisualizerEffect | Ok |
| useRemoveStepFilter | Ok |
| useRemoveStepFilterGroup | Ok |
| useUpsertStepFilterSettings | Ok |
| WorkflowFindRecordsFilters | Ok |
| SettingsObjects | Ok |
2025-07-29 09:52:24 +00:00
Vicky WangandGitHub bf8beb5735 Permissions V1 Documentation (#13473)
## PR Summary
- Add new setting page to Twenty user-guide
- Added V1 Permissions documentation + cover
2025-07-29 11:15:00 +02:00
Félix MalfaitandGitHub 7f67fc8257 Fix Website deploy (#13482)
Fix broken website deploy due to absolute path
2025-07-29 11:03:10 +02:00
a47a5683fd i18n - translations (#13483)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2025-07-29 10:51:55 +02:00
Thomas TrompetteandGitHub 8513d14157 Filter action fixes on select field (#13477)
<img width="475" height="322" alt="Capture d’écran 2025-07-28 à 18 45
51"
src="https://github.com/user-attachments/assets/922201d0-0a80-4ceb-848f-9a391e3337a4"
/>

<img width="491" height="72" alt="Capture d’écran 2025-07-28 à 18 46
11"
src="https://github.com/user-attachments/assets/9d6674ad-9b8c-422a-a6ac-5ec91deac62b"
/>
2025-07-29 10:46:34 +02:00
Balaji KrishnamurthyandGitHub ca3e315e0c move APIs and Webhooks section out of advanced mode (#13481)
Closes #13468

The `isAdvanced` parameter for `Developers`, `APIs` and `Webhooks` were
set to `true` previously. Now they are set to `false`. The `Functions`
section still appears under `Advanced Mode` as the issue did not specify
whether it had to be moved as well.

Attaching a loom recording of before and after for verification:

[Before](https://www.loom.com/share/a06f7aea758649cc952db617074d1361?sid=8564da09-e44b-4b64-8dab-ea3f9adf7423)

[After](https://www.loom.com/share/b631397d5f7d476293e6771f6804e965?sid=f7154952-ea6b-4561-8532-5794b8960cd4)
2025-07-29 10:00:06 +02:00
4eba13e9fb feat: add Google Place Autocomplete for address fields (#13450)
resolve #13253
This PR enables the use of Google Place Autocomplete and Place Details
APIs in the backend. It allows users to automatically fill in address
fields by typing into the address1 input. The input is debounced, then
the Autocomplete API is called. Once the user selects an address, the
Place Details API is used to parse and fill in the individual address
fields.


https://github.com/user-attachments/assets/e04b8474-25b8-48f5-83d0-2074f8d5fc94

---------

Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
Co-authored-by: Félix Malfait <felix@twenty.com>
2025-07-29 09:56:08 +02:00
EtienneandGitHub c186b78f67 Connect/Disconnect in .save (#13444) 2025-07-28 20:28:41 +02:00
EtienneandGitHub 2a82a33fff remove gql connect input for morph field - temporary (#13475)
related to https://github.com/twentyhq/core-team-issues/issues/1278
2025-07-28 18:43:27 +02:00
MarieandGitHub 16ba72edab [permissions] Adapt FE to non-readable fields (#13440)
Fixes https://github.com/twentyhq/core-team-issues/issues/1261 and
https://github.com/twentyhq/core-team-issues/issues/1153

In this PR we
- remove fields user do not have read access on from queries (findMany,
findDuplicates, returned fields from create or update etc.)
- remove fields user do not have read access on from views 

This is behind a feature flag
2025-07-28 16:24:08 +00:00
Raphaël BosiandGitHub 4131be2a68 Improve core view migration (#13474)
- Improve migration script to make it idempotent
- Fix update on view and view filters (`displayValue` exists on
workspace view filter but not on core view filter,
`kanbanFieldMetadataId` exists on workspace view but not on core view)
2025-07-28 15:52:57 +00:00
GuillimandGitHub 9c82121b87 fixing issue with QueryFailed on message import (#13471)
Failure was due to a deletion of a workspace while a cron job "message
import" had already started
2025-07-28 17:05:36 +02:00
34d126f727 add command to destroy workspaces (#13447)
Dev tool to enable workspace destroy - two guards added (destroy only
billing inactive workspace + soft deleted)

closes : https://github.com/twentyhq/core-team-issues/issues/1238

---------

Co-authored-by: Guillim <guillim@users.noreply.github.com>
2025-07-28 16:51:02 +02:00
Lucas BordeauandGitHub a818a70e40 Cleanup remaining old component states (#13435)
This PR cleans up the remaining legacy component states.

Everything that is on the v1 of component states, scoped states,
dropdown scope, scoped id, etc.
2025-07-28 14:35:36 +00:00
EtienneandGitHub 569e1e03af Cleaning command - add log (#13464) 2025-07-28 14:53:19 +02:00
Raphaël BosiandGitHub 7cf778b579 Synchronization between Core Views and Workspace Views (#13461)
Closes https://github.com/twentyhq/core-team-issues/issues/1248

- Create listeners on each CRUD operation for all view related objects
and update the core views accordingly

Some fields have to be parsed since we changed the data model a little
bit when switching to core views.
2025-07-28 14:41:27 +02:00
GuillimandGitHub 400dd6d969 bug fix (#13466)
We should not enqueue jobs "unmatch participants" with empty email.

This was done because of deleting persons while persons may have empty
emails

Fixes https://github.com/twentyhq/twenty/issues/13462
2025-07-28 13:56:20 +02:00
Raphaël BosiandGitHub ae47157818 Fix empty emails critical bug (#13465)
Fixes https://github.com/twentyhq/twenty/issues/13398

This bug was introduced by https://github.com/twentyhq/twenty/pull/13215

The emails were empty in scenarios where the user wasn't authenticated
(reset passwords for instance) because in `hydrateGraphqlRequest` the
information about the locale was added only if the user was
authenticated `!this.isTokenPresent(request)`. So the locale was
undefined making ` i18n.activate(undefined) ` fail silently resulting in
an empty email.
2025-07-28 12:56:29 +02:00
martmullandGitHub c59eb20886 Fix metadata playground not accessible (#13446)
as title


## Issue
<img width="982" height="487" alt="image"
src="https://github.com/user-attachments/assets/536567a3-ec36-45ed-b928-5ba4fd98ea70"
/>
v1.2.0
2025-07-25 17:26:29 +02:00
GuillimandGitHub 8ea816b7ef morph relation : renaming an object (#13404)
# Why
If we have a Morph Relation, like :
Opportunity <-> Company & People

Let's say it's a MANY_TO_ONE on Opportunity side

Then we have two joinColumnNames looking like
- ownerPersonId
- ownerCompanyId

Let's say someone renames the obejct Person (assume we can even though
standard obejcts cannot be renames per say at the moment in the API)

We need to update the joinColumnName and create the associated
migrations
2025-07-25 16:40:51 +02:00
martmullandGitHub 9380a1386a Fix missing components.schema for webhooks (#13433)
Webhooks are still documented in core playground to detail Webhooks of
core objects.
We moved webhooks to metadata playground and forgot to keep computation
of WebhookForResponse

This PR adds it back
2025-07-25 16:36:11 +02:00
WeikoandGitHub d1b11bafe6 remove search any field feature flag (#13442)
<img width="1189" height="368" alt="Screenshot 2025-07-25 at 15 18 39"
src="https://github.com/user-attachments/assets/22879517-60bc-4884-8386-35a0b06a6636"
/>
2025-07-25 15:32:24 +02:00
WeikoandGitHub 523d0ac17c Revert "Added public lab feature flag for search any field" (#13441)
Reverts twentyhq/twenty#13430

We will release this in the 1.2
2025-07-25 15:10:58 +02:00
EtienneandGitHub 13bed8e4d2 fix createMany resolver when updating softdeleted record (#13425)
Context: updateOne/Many works on soft deleted records but the update of
the upsertMany throws error

fixes https://github.com/twentyhq/twenty/issues/13195
2025-07-25 14:35:04 +02:00
EtienneandGitHub e386303fd3 Disconnect - fix disconnect false (#13439)
Context: {disconnect: false} disconnects relation > fix in this PR + add
integration test
2025-07-25 14:26:05 +02:00
Thomas des FrancsandGitHub fecac68760 1.2 changelog (#13438) 2025-07-25 14:24:50 +02:00
ab054d51f2 i18n - translations (#13437)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2025-07-25 13:33:08 +02:00
d4ca63dbb7 Update Connected Accounts Design (#13332)
/closes #13328

---------

Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
Co-authored-by: Félix Malfait <felix@twenty.com>
2025-07-25 13:18:02 +02:00
martmullandGitHub 79992b53d1 Fix insert step button not displayed (#13432)
as title
2025-07-25 09:35:48 +00:00
Lucas BordeauandGitHub d767a1ca47 Added public lab feature flag for search any field (#13430)
This PR adds a public feature flag for search any field.

This feature flag default value has been set to false also to avoid
breaking the frontend, we'll wait for a sync metadata in the next
release on all workspace to remove this feature flag.
2025-07-25 09:26:53 +00:00
Thomas TrompetteandGitHub ae13d08017 Improve auth google error msg (#13431)
As title
2025-07-25 11:14:27 +02:00
Thomas TrompetteandGitHub 041d55b605 Fix to gmail / ms auth (#13429)
Use user principal for MS + add verif true for google
2025-07-25 11:10:38 +02:00
3fc795f450 i18n - translations (#13426)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2025-07-25 10:01:20 +02:00
EtienneandGitHub 741924751b Connect - Import Relation (#13419)
re-opened https://github.com/twentyhq/twenty/pull/13213
2025-07-25 09:48:17 +02:00
ca27995ca6 i18n - translations (#13424)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2025-07-25 08:22:14 +02:00
4b95de6775 Add Import CSV and Export CSV Permissions (#13421)
Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
Co-authored-by: Félix Malfait <felix@twenty.com>
2025-07-25 08:07:38 +02:00
Thomas TrompetteandGitHub f411bd1b0e Add upgrade enqueue enum V2 command (#13422)
Duplicated the existing command `AddEnqueuedStatusToWorkflowRunCommand`.
Adding two steps:
- fetch the `workflowRun` object of the selected workspace
- using that object metadata id in the status field selection
2025-07-24 19:14:03 +02:00
Thomas TrompetteandGitHub 191d3531bf Manage composite fields in step filters (#13407)
- add to step output schema the information that field is a composite
sub field
- from output schema, when selecting the variable, copy all info
required to stepFilter
- from stepFilter, when selecting a value, display a special component
for composites
2025-07-24 17:50:07 +02:00
WeikoandGitHub 3aba04abcd Fix date field creation with disabled save button (#13416)
Fixes https://github.com/twentyhq/twenty/issues/13297

See SettingsDataModelFieldDateForm form validation which expects a
settings field to be present with a default display format. This PR adds
the missing initial value.
2025-07-24 17:19:40 +02:00
EtienneandGitHub 88a6913217 Connect/Disconnect - Add Disconnect logic + Migration to query builders (insert/update) (#13271)
Context : 
Large PR with 600+ test files. Enable connect and disconnect logic in
createMany (upsert true) / updateOne / updateMany resolvers

- Add disconnect logic
- Gather disconnect and connect logic -> called relation nested queries
- Move logic to query builder (insert and update one) with a preparation
step in .set/.values and an execution step in .execute
- Add integration tests

Test : 
- Test API call on updateMany, updateOne, createMany (upsert:true) with
connect/disconnect
2025-07-24 17:04:38 +02:00
Paul RastoinandGitHub 7bfa003682 Workspace migration v2 Metadadata runner object and field (#13377)
# Introduction
Created the runner metadata for the field and object
We should keep in mind that any runner handler will only iterate over an
atomic instance of entity ( object field index etc )
Never triggerring any side effect or whats over

In this way we will need to implement a deferred transaction, as for
when we create a relation we will inject to the first created field of
both the `relationTargetFieldMetadataId` deterministically computed
before its own creation
This would result in pg constraint brokage if not deferred

## Updates
- We decided gather create_fields under the create_object as they will
be building within the same sql query. This will ease both generation
and computation and avoid disassembling to reassemble afterwards
- Refactored FlatFieldMetadata to handle relation typing with flat
occurences
```ts
  runCreateFieldSchemaMigration = async ({
    action,
    queryRunner,
  }: WorkspaceMigrationActionRunnerArgs<CreateFieldAction>) => {
    if (isFlatFieldMetadataEntityOfType(action.flatFieldMetadata, FieldMetadataType.RELATION)) {
      action.flatFieldMetadata.flatRelationTargetObjectMetadata
    }else {
      action.flatFieldMetadata.flatRelationTargetObjectMetadata // tsc-error never
    }
    return;
  };
```

## TODO
- ~~Discuss action signature with @Weiko in order to anticipate `schema`
runner needed grain~~
- ~~Refactor the object actions to contain picked `flatObjectMetadata`~~
- Implem index service
2025-07-24 17:04:01 +02:00
martmullandGitHub 099694411c Add nextStepIds to trigger (#13413)
We will have floating steps in our workflow with the branch design.
Currently, a step without parent is considered linked to the trigger. We
need to distinguish the 2 cases. Thus this PR:
- add `nextStepIds` to workflowVersion.trigger
- create a command to migrate existing triggers
2025-07-24 16:31:10 +02:00
WeikoandGitHub 7ee250efe7 Fix rest filter parsing (#13414)
Should now properly match logical expressions like and(...), or(...)
instead of and/or without parenthesis, this should fix the issue with
fields that start with or/and
2025-07-24 16:06:06 +02:00
EtienneandGitHub 5c15a5954b Workspace Folder Deletion Error - add logs for investigation (#13385)
https://twenty-v7.sentry.io/issues/6565008010/events/latest/?environment=prod&project=4507072499810304&referrer=latest-event&sort=date

related to https://github.com/twentyhq/twenty/issues/12299
2025-07-24 13:34:41 +00:00
Félix MalfaitandGitHub 16fcaacbdb Translation cleanup (#13411)
Remove dead translations
2025-07-24 15:33:24 +02:00
Félix MalfaitandGitHub ca1e79b9a7 Small translation fix (#13410) 2025-07-24 15:10:15 +02:00