Commit Graph
69 Commits
Author SHA1 Message Date
Thomas TrompetteandThomas Trompette a5a9e0e238 Remove isMultiSelect feature flag (#5280)
As title

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-05-03 16:30:58 +02:00
Thomas TrompetteandThomas Trompette 5285a428d1 Fix export with relations (#5279)
As title. Only relations are exported right now

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-05-03 16:14:37 +02:00
Thomas TrompetteandThomas Trompette f9c19c839b Build stripe integration on backend side (#5246)
Adding stripe integration by making the server logic independent of the
input fields:
- query factories (remote server, foreign data wrapper, foreign table)
to loop on fields and values without hardcoding the names of the fields
- adding stripe input and type
- add the logic to handle static schema. Simply creating a big object to
store into the server

Additional work:
- rename username field to user. This is the input intended for postgres
user mapping and we now need a matching by name

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-05-02 17:13:15 +02:00
Thomas TrompetteandThomas Trompette 3a61c922f1 Import full distant schema and store in remote server (#5211)
We should not depend on the foreign data wrapper type to manage distant
table. The remote server should be enough to handle the table creation.

Here is the new flow to fetch available tables:
- check if the remote server have available tables already stored
- if not, import full schema in a temporary schema
- copy the tables into the available tables field 
- delete the schema

Left todo:
- update remote server input for postgres so we receive the schema

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-04-30 14:18:33 +02:00
224c8d361b Setup relations for remote objects (#5149)
New strategy:
- add settings field on FieldMetadata. Contains a boolean isIdField and
for numbers, a precision
- if idField, the graphql scalar returned will be a GraphQL id. This
will allow the app to work even for ids that are not uuid
- remove globals dateScalar and numberScalar modes. These were not used
- set limit as Integer
- check manually in query runner mutations that we send a valid id

Todo left:
- remove WorkspaceBuildSchemaOptions since this is not used anymore.
Will do in another PR

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
Co-authored-by: Weiko <corentin@twenty.com>
2024-04-26 14:37:34 +02:00
Thomas TrompetteandThomas Trompette b08e95494c Move id column check before foreign table creation (#5029)
When distant table does not have an id column, syncing does not work.
Today the check is only made after creating the foreign table locally.
We should do it first, so we avoid having a foreign table created and
failing right after.

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-04-18 11:34:21 +02:00
Thomas TrompetteandThomas Trompette 6cf3ade300 Make id available in remote table output (#5003)
Wrongly use `PrimaryGeneratedColumn` typeOrm decorator instead of the
nest query one.

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-04-17 17:05:47 +02:00
Thomas TrompetteandThomas Trompette 6fa2aee624 Introduce remote table entity (#4994)
We will require remote table entity to map distant table name and local
foreign table name.
Introducing the entity:
- new source of truth to know if a table is sync or not
- created synchronously at the same time as metadata and foreign table

Adding a few more changes:
- exception rather than errors so the user can see these
- `pluralize` library that will allow to stop adding `Remote` suffix on
names

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-04-17 10:52:10 +02:00
Thomas TrompetteandThomas Trompette 756de8a31b Add connection failed status (#4939)
1/ When the user inputs wrong connection informations, we do not inform
him. He will only see that no tables are available.
We will display a connection failed status if an error is raised testing
the connection

2/ If the connection fails, it should still be possible to delete the
server. Today, since we try first to delete the tables, the connection
failure throws an error that will prevent server deletion. Using the
foreign tables instead of calling the distant DB.

3/ Redirect to connection show page instead of connection list after
creation

4/ Today, foreign tables are fetched without the server name. This is a
mistake because we need to know which foreign table is linked with which
server. Updating the associated query.

<img width="632" alt="Capture d’écran 2024-04-12 à 10 52 49"
src="https://github.com/twentyhq/twenty/assets/22936103/9e8406b8-75d0-494c-ac1f-5e9fa7100f5c">

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-04-15 14:09:01 +02:00
Thomas TrompetteandThomas Trompette f332213e0d Fix remote object read-only + remove relations (#4921)
- Set `readOnly` boolean in table row context. Preventing updates and
deletion
- Show page is null for remote objects. No need for complicated design
since this is temporary?
- Relation creations are now behind a feature flag for remote objects
- Refetch objects and views after syncing objects

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-04-11 17:58:02 +02:00
Thomas TrompetteandThomas Trompette aecf8783a0 Sync table from frontend (#4894)
This PR:
- separates the existing updateSyncStatus endpoint into 2 endpoints
- creates mutations and hooks that will call those endpoints
- trigger the hook on toggle
- removes form logic and add a separated component for toggling

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-04-11 11:51:49 +02:00
Thomas TrompetteandThomas Trompette 651af1c0e1 Use migrations for remote tables (#4877)
Foreign tables should be created using migrations, as we do for standard
tables.
Since those are not really generated from the object metadata but from
the remote table, those migrations won't live in the object metadata
service.

This PR:
- creates new types of migration : create_foreign_table and
drop_foreign_table
- triggers those migrations rather than raw queries directly
- moves the logic to fetch current foreign tables into the remote table
service since this is not directly linked to postgres data wrapper
- adds logic to unsync all tables before deleting

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-04-08 18:21:29 +02:00
Thomas TrompetteandThomas Trompette d4a9a26069 Delete connection from frontend (#4880)
This PR:
- creates the query to delete a connection
- creates the hook that triggers the query
- triggers the hook function when clicking on remove + get back to
connection page

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-04-08 17:27:14 +02:00
Thomas TrompetteandThomas Trompette 2890a7a44a Fix get available tables (#4873)
Endpoint is broken since we now use `Remote` as a suffix for remote
table names.

This PR:
- creates a common function to calculate the name of the remote table
- use it in the `findAvailableRemotePostgresTables` to know if a table
has been synced or not

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-04-08 11:11:24 +02:00
Thomas TrompetteandThomas Trompette 4b34e7bf1e Add new database connection (#4837)
Closes https://github.com/twentyhq/twenty/issues/4555

<img width="593" alt="Capture d’écran 2024-04-05 à 11 54 28"
src="https://github.com/twentyhq/twenty/assets/22936103/e6021417-bc78-460b-adf6-834330bbd894">

Connect the existing for with the backend so we can now create database
connections.

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-04-05 15:36:57 +02:00
Thomas TrompetteandThomas Trompette 2e419091cc Prevent remote object updates (#4804)
Backend: Adding a new util function that throw an error if the
objectMetadata is remote

Frontend: hiding the save button when remote

Also renaming `useObjectMetadataItemForSettings` since this hook is used
in other places than settings and is not in the settings repo. Name can
definitely be challenged!

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-04-04 15:47:08 +02:00
Thomas TrompetteandThomas Trompette 41960f3593 Remote objects: Fix comment override - id typing - label (#4784)
Several fixes for remote objects:
- labels are now displayed in title case. Added an util for this.
- Ids are often integers but the foreign keys on the relations were
uuid. Sending the id type to the object metadata service so it can
creates the foreign key accordingly
- Graphql comments are override when several remote objects are
imported. Building a function that fetch the existing comment and update
it

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-04-04 15:35:49 +02:00
Thomas TrompetteandThomas Trompette 1c6f0eb577 Integrate relations for remote objects (#4754)
Foreign table id cannot be a foreign key of a base table. But the
current code use foreign keys to link object metadata with activities,
events... So we will:
- create a column without creating a foreign key
- add a comment on the table schema so pg_graphql sees it as a foreign
key

This PR:
- refactor a bit object metadata service so the mutation creation is
separated into an util
- adds the mutation creation for remote object relations
- add a new type of mutation to create a comment

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-04-03 14:56:51 +02:00
Thomas TrompetteandThomas Trompette 1d351a29b8 Sync remote object (#4713)
* Sync objects

* Generate data for isRemote

* Add cache version update

* Add label identifier + fix field metadata input

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-03-29 18:23:58 +01:00
Thomas TrompetteandThomas Trompette f08dfec00a Fix encryption logic (#4672)
Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-03-26 17:43:32 +01:00
Thomas TrompetteandThomas Trompette d4eb75abff Add isRemote field on object metadata (#4668)
Add isRemote field

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-03-26 16:49:18 +01:00
Thomas TrompetteandThomas Trompette 279d99487c Fetch available remote tables (#4665)
* Build remote table module

* Use transactions

* Export url builder in util

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-03-26 15:50:41 +01:00
Thomas TrompetteandThomas Trompette 9e70f5b650 Add endpoints to create and delete remote server (#4606)
* Build remote server

* Add getters

* Migrate to json inputs

* Use extendable type

* Use regex validation

* Remove acronymes

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-03-25 15:21:23 +01:00
Thomas TrompetteandThomas Trompette e579554d47 Add getters factory for attachements (#4567)
* Add getter factory for attachements

* Override guard in test

* Add secret in env variables

* Return custom message on expiration

* Rename to signPayload

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-03-19 16:39:53 +01:00
Thomas TrompetteandThomas Trompette 411aac5efc Remove demo guard for mail api (#4527)
Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-03-18 14:05:35 +01:00
Thomas TrompetteandThomas Trompette 8980cc576c Prevent file upload in demo workspaces (#4503)
* Build demo env guard

* Put guard for auth

* Add todo

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-03-15 19:15:22 +01:00
Thomas TrompetteandThomas Trompette 21cd38d6fb Add command to stop demo seed cron (#4480)
Rename start cron + add stop cron

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-03-15 15:23:07 +01:00
Thomas TrompetteandThomas Trompette 04efe5c455 Update demo link (#4483)
* Update demo link

* Update doc

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-03-14 17:51:27 +01:00
Thomas TrompetteandThomas Trompette a02e11f81a Use prepared statements + add tests for record position (#4451)
Use prepared statements + add tests

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-03-13 14:47:54 +01:00
Thomas TrompetteandThomas Trompette 7b63cf14bc Build listener to backfill position (#4432)
* Build listener to backfill position

* Fix tests

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-03-13 10:27:34 +01:00
Thomas TrompetteandThomas Trompette 91f4e1a853 Fix activity creation (#4426)
* Fix activity creation

* Fix tests

* Remove recursive logic + fix test

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-03-12 17:01:24 +01:00
Thomas TrompetteandThomas Trompette c82c60b448 Build arg setter for position (#4396)
* Build arg setter for position

* Build separated query factory + rename existing

* Sort record by position in front

* Add tests

* Set first for type board

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-03-11 16:18:15 +01:00
Thomas TrompetteandThomas Trompette 019c630686 Use new type position for standard objects and newly created objects (#4349)
Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-03-06 18:34:10 +01:00
Thomas TrompetteandThomas Trompette 60239353a9 Create new type position (#4336)
* Create new type position

* Remove position filter type

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-03-06 14:41:51 +01:00
4a0f2e8c24 Add Azure cloud provider option (#4296)
* docs: added self-host azure container apps option

* syntax fix

* typo

* Rename file to cloud providers

* Add info section

---------

Co-authored-by: Thomas Hillesøy <thomas.hillesoy@gmail.com>
Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-03-04 16:13:33 +01:00
Thomas TrompetteandThomas Trompette 11434fc1c6 Handle multiple orderBy sorting (#4246)
Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-02-29 17:36:22 +01:00
Thomas TrompetteandThomas Trompette 25a2cea55d Fix password too short issue (#4200)
Add dependencies to hotscope key

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-02-27 10:37:11 +01:00
Thomas TrompetteandThomas Trompette b1eb0577bc Build cron for data seed demo (#4142)
* Migrate command to cron

* Put back command using job as well

* Build service and module + move into folder

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-02-24 12:30:12 +01:00
Thomas TrompetteandThomas Trompette 67e27a69ff Handle relations between same objects (#4137)
* Handle relations between same objects

* Simplify conditions

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-02-23 09:51:42 +01:00
Thomas TrompetteandThomas Trompette 161d02620a Fix developers url and remove webhook url error (#4120)
Fix developers url + remove webhook url error

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-02-21 16:25:35 +01:00
9ceff84bbf Set opportunity stage as editable (#3838)
* Set opportunity stage as editable

* Fix comments

* Add command for migration

* Fixes

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
2024-02-09 14:44:11 +01:00
719da29795 Store compact view status (#3850)
* Store compact view status

* Rename to isCompact

* Fixes

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
2024-02-08 16:33:52 +01:00
Thomas TrompetteandThomas Trompette 6ee179442a Add one to many relation between opportunity and attachment (#3866)
* Add one to many relation between opportunity and attachment

* Fix opportunity type

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-02-08 15:22:52 +01:00
9f59ddc059 Rename recordPosition into position (#3864)
* Rename recordPosition into position

* Fix according to review

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
2024-02-07 09:40:35 +01:00
Thomas TrompetteandThomas Trompette 8816b7fb31 Fetch viewable thread from apollo cache (#3783)
Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-02-02 14:41:00 +01:00
Thomas TrompetteandThomas Trompette c6c50180b7 Add animation during email message opening (#3774)
* Add animation while message opening

* Set isDisplayed as always true

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-02-02 14:37:46 +01:00
Thomas TrompetteandThomas Trompette 7b2b70e479 Create record position field (#3739)
* Create record field on non syst standard objects + on custom objects

* Create workspace migration

* Fix naming and add seed

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-02-01 16:56:38 +01:00
389c263e2e Design fixes + hide email tab if not a company or a person (#3720)
Design fixes + hide email tab

Co-authored-by: Thomas Trompette <thomast@twenty.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
2024-01-31 16:55:04 +01:00
Thomas TrompetteandThomas Trompette 9597b1ae41 Avoid fetching more emails when first query loading (#3709)
Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-01-31 10:25:22 +01:00
Thomas TrompetteandThomas Trompette 1838d8e6fb Use scoped recoil state for email thread page (#3699)
Use scoped recoild state for email thread page

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-01-30 17:08:34 +01:00
Thomas TrompetteandThomas Trompette 511627ccb8 Fix count avatar color + align thread preview items (#3695)
Fix count avatar and align items

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-01-30 15:01:12 +01:00
Thomas TrompetteandThomas Trompette 84b6bea2b9 Split back fetch more loader for record table and emails (#3693)
* Split back fetch more loader

* Rename loader

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-01-30 14:50:33 +01:00
Thomas TrompetteandThomas Trompette 96bcddc056 Add participant avatars + remove tbody from fetchMore loader (#3679)
* Add participant avatars + remove tbody from fetchMore loader

* Update sender names

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-01-30 10:47:15 +01:00
Thomas TrompetteandThomas Trompette 64d0e15ada Put back timeline thread page size const (#3676)
Put timeline thread page size const

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-01-29 15:43:48 +01:00
Thomas TrompetteandThomas Trompette 9da9d1e3bd Build infinite scroll for email threads (#3666)
* Use recoil state for page info

* Remove memoization

* Remove right drawer fetch more loader

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-01-29 15:28:28 +01:00
Thomas TrompetteandThomas Trompette 43b10cb00c Add record chip for sender and add receivers (#3629)
* Add record chip for sender and add receivers

* Build enum for roles

* Rename var and use string literal

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-01-25 18:34:19 +01:00
Thomas TrompetteandThomas Trompette f099ff90c1 Add fetch more loader for email messages (#3618)
Add fetch more loader

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-01-25 14:44:54 +01:00
Thomas TrompetteandThomas Trompette 7845e04f6b Fetch messages with hard coded thread id (#3613)
* Fetch messages with hard coded thread id

* Fix test

* Use first workspace member or person names

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-01-25 11:13:32 +01:00
Thomas TrompetteandThomas Trompette e85f65a195 Build message threads (#3593)
* Adding message thread component

* Add state and mocks

* Rename components and use local state for messages

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-01-24 14:32:57 +01:00
Thomas TrompetteandThomas Trompette 004c23768c Build message thread empty right drawer (#3585)
* Trigger message thread top bar

* Rename message thread to thread

* Move all components in a directory

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-01-23 10:56:31 +01:00
f1b3d1537a Load views on user load and read in cache (#3552)
* WIP

* Poc

* Use cached root query + remove proloaded views state

* Fix storybook test + fix codegen

* Return default schema if token is absent, unauthenticated if token is invalid

* Use enum instead of bool

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
2024-01-22 16:00:16 +01:00
Thomas TrompetteandThomas Trompette e6f985c681 Update company board card link to opportunity show page (#3557)
Update board link to opportunity show page

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-01-19 17:01:24 +01:00
c868347552 Show page - disable click for workspace member relation (#3464)
* [Draft] Add disable logic + failing test

* Fix test

* Remove hook

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
2024-01-18 18:22:26 +01:00
Thomas TrompetteandThomas Trompette 4e36c6d584 Update recoil v4 states to getters (#3451)
Update v4 states to getters

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-01-15 18:18:55 +01:00
c53abf2f5a Fix chromatic tests + re-enable (#3414)
* Fix chromatic tests + re-enable

* Try to run command manually

* Fix

* Fix

* Fix

* Fix

* Fix

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
2024-01-12 18:32:00 +01:00
Thomas TrompetteandThomas Trompette 52e0e385a4 Pass object name plural in props + remove unused state (#3401)
* Pass object name plural in props + remove unused state

* Fix test

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-01-12 14:30:36 +01:00
6bae6fcdce Migrate record table to scope map (#3363)
* Migrate record table to scope map

* Update record scope id to record id

* Remove todos and fix edit mode

* Fix perf

* Fix tests

* Fix tests

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
2024-01-11 17:44:40 +01:00
2713285a0f Migrate dropdown to scope map (#3338)
* Migrate dropdown to scope map

* Run lintr

* Move Dropdown Scope internally

* Fix

* Fix lint

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
2024-01-10 15:46:37 +01:00
Thomas TrompetteandThomas Trompette ebf7688e3d Migrate tab list to scope map (#3333)
* Migrate tab list to scope map

* Return state to hook and let client subscribe to state

* Run prettier

---------

Co-authored-by: Thomas Trompette <thomast@twenty.com>
2024-01-09 17:01:27 +01:00