Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Collapsible menu #5846

Merged
merged 7 commits into from
Jun 14, 2024
Merged

Collapsible menu #5846

merged 7 commits into from
Jun 14, 2024

Conversation

FelixMalfait
Copy link
Member

@FelixMalfait FelixMalfait commented Jun 12, 2024

A mini PR to discuss with @Bonapara tomorrow

Separating remote objects from others and making the menu collapsible (style to be changed)
Screenshot 2024-06-12 at 23 25 59

Biggest issue is we don't use local storage today so the collapsed state gets lost.
I see we have localStorageEffect with recoil. Maybe store it there? Seems easy but don't want to introduce a bad pattern.

Todo:

  • style update
  • collapsible favorites
  • persistent storage

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Summary

  • Introduced collapsible sections in the navigation menu and favorites using Recoil state.
  • Separated remote objects from others in the navigation drawer.
  • Added useNavigationSection hook for managing collapsible state.
  • Implemented persistent state management using localStorageEffect.
  • Updated NavigationDrawerSectionTitle to support collapsible sections with an onClick prop.

Copy link
Contributor

@lucasbordeau lucasbordeau left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Fix vertical center of menu
  • Fix border radius on hover

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR Summary

(updates since last review)

  • Added click functionality to NavigationDrawerSectionTitle
  • Updated styling: center alignment, border radius, padding, height
  • Conditional hover effect based on onClick handler
  • Discuss persistent storage for collapsed state
  • Plan for style updates and collapsible favorites

@FelixMalfait FelixMalfait merged commit a2e89af into main Jun 14, 2024
8 checks passed
@FelixMalfait FelixMalfait deleted the collapse-menu branch June 14, 2024 10:35
srp-pawar added a commit to synapsenet-arena/lead360 that referenced this pull request Jun 21, 2024
commit 96da777107cd366fd0d43054c301fa606f214746
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Wed Jun 19 11:54:11 2024 +0200

    Handle no concurrency option (#5952)

    Fix error in local `teamConcurrency must be an integer between 1 and
    1000`

commit d045bcbb94a5027f8e4cafc129056653670a4b16
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Wed Jun 19 10:39:09 2024 +0200

    Add http status to graphql errors (#5896)

    Graphql errors are not properly filtered by our handler. We still
    receive errors like `NOT_FOUND` in sentry while they should be filtered.
    Example
    [here](https://twenty-v7.sentry.io/issues/5490383016/?environment=prod&project=4507072499810304&query=is%3Aunresolved+issue.priority%3A%5Bhigh%2C+medium%5D&referrer=issue-stream&statsPeriod=7d&stream_index=6).

    We associate statuses with errors in our map
    `graphQLPredefinedExceptions` but we cannot retrieve the status from the
    error.

    This PR lists the codes that should be filtered.

    To test:
    - call `findDuplicates` with an invalid id
    - before, server would breaks
    - now the error is simply returned

commit 6fd8dab55243cda291fa45f896caaa9d5e5160b8
Author: martmull <martmull@hotmail.fr>
Date:   Tue Jun 18 18:55:13 2024 +0200

    5582 get httpsapitwentycomrestmetadata objects filters dont work (#5906)

    - Remove filters from metadata rest api
    - add limite before and after parameters for metadata
    - remove update from metadata relations
    - fix typing issue
    - fix naming
    - fix before parameter

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit dbaa787d191f08cd0ff27989e506ee6d636cb9af
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Tue Jun 18 18:40:19 2024 +0200

    website / Fix broken links, slow loading, and prod errors (#5932)

    The code is in a bad state, this is just fixing it but not improving the
    structure

commit 6b1548ebbe0ca51d756704da6c6005c2448046db
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Tue Jun 18 18:38:14 2024 +0200

    Add loader and transition for details page tabs (#5935)

    Closes https://github.com/twentyhq/twenty/issues/5656

    https://github.com/twentyhq/twenty/assets/22936103/3e4beea2-9aa9-4015-bb99-ee22adb53b63

commit cff85615975fcafec26af3e424d6435b9f5d4128
Author: martmull <martmull@hotmail.fr>
Date:   Tue Jun 18 17:34:16 2024 +0200

    Upgrade pg graphql version to 1.5.6 (#5937)

    - update `pg_graphql` version doc
    - update `pg_graphql` version to 1.5.6

commit 38537a39671abd23e12a4fce3ce1759e8f9f9f20
Author: Hanch Han <51526347+hanchchch@users.noreply.github.com>
Date:   Tue Jun 18 18:14:31 2024 +0900

    Add South Korean won to currency codes (#5914)

    Greetings from Seoul! I found this amazing project a few days ago, and
    trying to introduce it to my team. However there is a tiny but
    significant problem, that South Korean won is not available in twenty.

    So I added `KRW` to the enum `CurrencyCode` and the constant
    `SETTINGS_FIELD_CURRENCY_CODES`. I tested it locally and apparently
    works fine.

commit 14abd99bb774171ec1bba56d4c584482858b4f9d
Author: Aditya Pimpalkar <adipimpalkar@gmail.com>
Date:   Tue Jun 18 09:49:33 2024 +0100

    add multiple filters of same FieldMetadataType (#5892)

    fixes: #5378

commit de2b0527a3fc64f9c651a0cd11c718687c3b2c07
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Mon Jun 17 18:09:46 2024 +0200

    Fix secondaryLinks field input (#5911)

    PR https://github.com/twentyhq/twenty/pull/5785/files broke links
    update.

    Also, dropdown "Add link" will be displayed only if a link is already
    added. Otherwise, it should be a normal input.

commit e1bd3a4c5a38f93bebc9f934f0d7180091c35df4
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Mon Jun 17 17:27:19 2024 +0200

    Added and optimized missing RatingFieldDisplay component (#5904)

    The display for Rating field type was missing, I just added it based on
    RatingInput in readonly mode and optimized a bit for performance also.

    Fixes https://github.com/twentyhq/twenty/issues/5900

commit dba0b28eae9063437ebff7ad695e78635378cd1d
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Mon Jun 17 11:54:04 2024 +0200

    Fix verticale line timeline activity (#5894)

    Before

    <img width="400" alt="Capture d’écran 2024-06-17 à 10 23 17"
    src="https://github.com/twentyhq/twenty/assets/22936103/01408d7b-9a6c-4a21-9f08-c8cf304e2ea0">

    After

    <img width="400" alt="Capture d’écran 2024-06-17 à 10 05 39"
    src="https://github.com/twentyhq/twenty/assets/22936103/df384726-bbf9-4828-ad47-d1c91724947d">

commit 1ba7037fdc06941009167b33ffeafe5dac51b808
Author: martmull <martmull@hotmail.fr>
Date:   Mon Jun 17 10:59:29 2024 +0200

    5581 get httpsapitwentycomrestmetadata relations not working (#5867)

    Filtering relations is not allowed
    (see`packages/twenty-server/src/engine/metadata-modules/relation-metadata/dtos/relation-metadata.dto.ts`)
    so we remove filtering for find many relation

    we also fixed some bug in result structure and metadata open-api schema

commit d8034b1f40aebc6eafab9cec6132aa6cb97d1d02
Author: martmull <martmull@hotmail.fr>
Date:   Mon Jun 17 10:17:31 2024 +0200

    5236 expandable list leave options when editing (#5890)

    Fixes https://github.com/twentyhq/twenty/issues/5236

    ![image](https://github.com/twentyhq/twenty/assets/29927851/5f0f910c-11b0-40ce-9c59-34e7ce0c2741)

commit d99b9d1d6b11f7961fb4131ba66aa94447779530
Author: Jérémy M <jeremy.magrin@gmail.com>
Date:   Mon Jun 17 09:49:37 2024 +0200

    feat: Enhancements to MessageQueue Module with Decorators (#5657)

    This PR introduces significant enhancements to the MessageQueue module
    by integrating `@Processor`, `@Process`, and `@InjectMessageQueue`
    decorators. These changes streamline the process of defining and
    managing queue processors and job handlers, and also allow for
    request-scoped handlers, improving compatibility with services that rely
    on scoped providers like TwentyORM repositories.

    1. **Decorator-based Job Handling**: Use `@Processor` and `@Process`
    decorators to define job handlers declaratively.
    2. **Request Scope Support**: Job handlers can be scoped per request,
    enhancing integration with request-scoped services.

    The `@Processor` decorator is used to define a class that processes jobs
    for a specific queue. The `@Process` decorator is applied to methods
    within this class to define specific job handlers.

    ```typescript
    import { Processor, Process, InjectMessageQueue } from 'src/engine/integrations/message-queue';

    @Processor('taskQueue')
    export class TaskProcessor {

      @Process('taskA')
      async handleTaskA(job: { id: string, data: any }) {
        console.log(`Handling task A with data:`, job.data);
        // Logic for task A
      }

      @Process('taskB')
      async handleTaskB(job: { id: string, data: any }) {
        console.log(`Handling task B with data:`, job.data);
        // Logic for task B
      }
    }
    ```

    In the example above, `TaskProcessor` is responsible for processing jobs
    in the `taskQueue`. The `handleTaskA` method will only be called for
    jobs with the name `taskA`, while `handleTaskB` will be called for
    `taskB` jobs.

    ```typescript
    import { Processor, Process, InjectMessageQueue } from 'src/engine/integrations/message-queue';

    @Processor('generalQueue')
    export class GeneralProcessor {

      @Process()
      async handleAnyJob(job: { id: string, name: string, data: any }) {
        console.log(`Handling job ${job.name} with data:`, job.data);
        // Logic for any job
      }
    }
    ```

    In this example, `GeneralProcessor` handles all jobs in the
    `generalQueue`, regardless of the job name. The `handleAnyJob` method
    will be invoked for every job added to the `generalQueue`.

    You can use the `@InjectMessageQueue` decorator to inject a queue into a
    service and add jobs to it.

    ```typescript
    import { Injectable } from '@nestjs/common';
    import { InjectMessageQueue, MessageQueue } from 'src/engine/integrations/message-queue';

    @Injectable()
    export class TaskService {
      constructor(
        @InjectMessageQueue('taskQueue') private readonly taskQueue: MessageQueue,
      ) {}

      async addTaskA(data: any) {
        await this.taskQueue.add('taskA', data);
      }

      async addTaskB(data: any) {
        await this.taskQueue.add('taskB', data);
      }
    }
    ```

    In this example, `TaskService` adds jobs to the `taskQueue`. The
    `addTaskA` and `addTaskB` methods add jobs named `taskA` and `taskB`,
    respectively, to the queue.

    To utilize request-scoped job handlers, specify the scope in the
    `@Processor` decorator. This is particularly useful for services that
    use scoped repositories like those in TwentyORM.

    ```typescript
    import { Processor, Process, InjectMessageQueue, Scope } from 'src/engine/integrations/message-queue';

    @Processor({ name: 'scopedQueue', scope: Scope.REQUEST })
    export class ScopedTaskProcessor {

      @Process('scopedTask')
      async handleScopedTask(job: { id: string, data: any }) {
        console.log(`Handling scoped task with data:`, job.data);
        // Logic for scoped task, which might use request-scoped services
      }
    }
    ```

    Here, the `ScopedTaskProcessor` is associated with `scopedQueue` and
    operates with request scope. This setup is essential when the job
    handler relies on services that need to be instantiated per request,
    such as scoped repositories.

    - **Decorators**: Refactor job handlers to use `@Processor` and
    `@Process` decorators.
    - **Request Scope**: Utilize the scope option in `@Processor` if your
    job handlers depend on request-scoped services.

    Fix #5628

    ---------

    Co-authored-by: Weiko <corentin@twenty.com>

commit 605945bd427e033d5c715b907ed1516d82a625d9
Author: Ymir <36711026+Ymirke@users.noreply.github.com>
Date:   Sun Jun 16 09:39:16 2024 +0200

    Added Thai Baht support (#5881)

    Hey, saw Thai Baht support was
    [requested](https://github.com/twentyhq/twenty/issues/5876) and thought
    it was a cool first issue to get to know the project a little bit.

commit 99f4a75b5844a1af03b3dc50d0ffd9d7c901207b
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Fri Jun 14 19:05:48 2024 +0200

    Fix website docs (#5873)

    There was a 500 on the playground and the switch between core and
    metadata

commit 9c8407c197f842c0c03b058a42028c99498b974b
Author: Thomas des Francs <tdesfrancs@gmail.com>
Date:   Fri Jun 14 16:59:42 2024 +0200

    Wrote 0.20 changelog (#5870)

    Created the changelog for 0.2

commit 3d3cef079742e447d2595e2a15e3436f209ea0e3
Author: Michael Gold <goldmichael@gmail.com>
Date:   Fri Jun 14 10:48:29 2024 -0400

    fix: 404 generate API key link (#5871)

    - update api key link in the docs

commit dd2db083ce4d4d5ad7113ac74da8466818dc990f
Author: RobertoSimonini1 <roberto.simonini@endor.studio>
Date:   Fri Jun 14 16:27:16 2024 +0200

    Record horizontal scrolling mobile (#5843)

    I have fixed the scrolling the record container page on mobile making it
    hidden.
    This PR aims to fix #5745

    ---------

    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit eaa2f83eb1e01a90495c3da375983bbc3d3f3544
Author: martmull <martmull@hotmail.fr>
Date:   Fri Jun 14 13:11:15 2024 +0200

    Fix overflow on notes (#5853)

    ![image](https://github.com/twentyhq/twenty/assets/29927851/c1784340-0741-4701-b11f-d2cf50fab9fb)

    ![image](https://github.com/twentyhq/twenty/assets/29927851/c095eaf1-15c4-4e68-8cff-c175f99856d0)

commit be18ee4d7d4e0056429b573d2564be76b3496553
Author: martmull <martmull@hotmail.fr>
Date:   Fri Jun 14 12:41:55 2024 +0200

    Fix sentry error (#5848)

    Fixes
    https://twenty-v7.sentry.io/issues/5363536663/?environment=prod&project=4507072499810304&query=is%3Aunresolved+issue.priority%3A%5Bhigh%2C+medium%5D&referrer=issue-stream&statsPeriod=7d&stream_index=0

    - handle error properly in twenty-server
    - display backend error message

commit 82741d3b046f9cf0a6715e58064815d118bdb286
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Fri Jun 14 12:38:35 2024 +0200

    Fix error log on message import (#5866)

    Modify #5863 to log the connected account id rather than the message
    channel id to be consistent with the other logs and stringify the error.

commit 28202cc9e051b9fb09e685473841f107bdea38dd
Author: martmull <martmull@hotmail.fr>
Date:   Fri Jun 14 12:36:24 2024 +0200

    Fix workspaceLogo in invite-email (#5865)

    ![image](https://github.com/twentyhq/twenty/assets/29927851/5fb1524b-874d-4723-8450-0284382bbeb3)
    - duplicates and adapt `getImageAbsoluteURIOrBase64` from `twenty-front`
    in `twenty-email`
    - send `SERVER_URL` to email builder

commit a2e89af6b26aa115760d96fd90b6b54e9646f7ab
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Fri Jun 14 12:35:23 2024 +0200

    Collapsible menu (#5846)

    A mini PR to discuss with @Bonapara tomorrow

    Separating remote objects from others and making the menu collapsible
    (style to be changed)
    <img width="225" alt="Screenshot 2024-06-12 at 23 25 59"
    src="https://github.com/twentyhq/twenty/assets/6399865/b4b69d36-6770-43a2-a5e8-bfcdf0a629ea">

    Biggest issue is we don't use local storage today so the collapsed state
    gets lost.
    I see we have localStorageEffect with recoil. Maybe store it there?
    Seems easy but don't want to introduce a bad pattern.

    Todo:
    - style update
    - collapsible favorites
    - persistent storage

commit 8d8bf1c1282cdbf748e8a854c925df58815a9cda
Author: Siddhant Rai <47355538+siiddhantt@users.noreply.github.com>
Date:   Fri Jun 14 15:11:49 2024 +0530

    fix: text field overflow beyond cell limits (#5834)

    - fixes #5775

    https://github.com/twentyhq/twenty/assets/47355538/9e440018-ec1e-4faa-a9f3-7131615cf9f1

    ---------

    Co-authored-by: Charles Bochet <charles@twenty.com>
    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit 4603999d1c0e968ed6c4f583d5ccc6d834970744
Author: Aditya Pimpalkar <adipimpalkar@gmail.com>
Date:   Fri Jun 14 10:23:37 2024 +0100

    Support orderBy as array (#5681)

    closes: #4301

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 85fd801480ecceb44429139585d0e10c0e70d909
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Fri Jun 14 09:36:39 2024 +0200

    Add log for errors on message import (#5863)

    As per title :)

commit 39af374de00dfc0f4d27ec8cfb8736c4a3471c8e
Author: Weiko <corentin@twenty.com>
Date:   Thu Jun 13 19:04:53 2024 +0200

    fix timeline activity pagination overflow (#5861)
    <img width="250" alt="Screenshot 2024-06-13 at 18 51 56"
    src="https://github.com/twentyhq/twenty/assets/1834158/d6c7f5fa-3cc7-48bc-a711-29345e93af92">
    <img width="284" alt="Screenshot 2024-06-13 at 18 51 41"
    src="https://github.com/twentyhq/twenty/assets/1834158/25029e0a-c1b0-4458-b715-dbab217eeee0">

commit 00d22947284bcda2f1efb5ad1e8f70fddf1feb33
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Thu Jun 13 18:56:55 2024 +0200

    Add label to mocked connections (#5858)

    <img width="865" alt="Capture d’écran 2024-06-13 à 17 48 03"
    src="https://github.com/twentyhq/twenty/assets/22936103/2d313448-fbd5-4ff1-a65b-afd4df86117a">

commit 65fc83a763516e66ba2820723636241c9cfbaa5c
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Thu Jun 13 18:28:02 2024 +0200

    Added a fallback default record chip generator (#5860)

    The record chip generator context was missing a edge were a new field of
    type relation is created and not yet in the metadata so no chip
    generator function can be precomputed.

    For now I added a fallback default chip generator, to prevent any bug,
    but we might want to add a new chip generator function while creating
    the new field ?

commit 582653f9df59446d98199ad6dc893d41a89379b2
Author: Marie <51697796+ijreilly@users.noreply.github.com>
Date:   Thu Jun 13 17:39:46 2024 +0200

    Bump to version 0.20.0 (#5857)

commit 93c17a8a5bb3cea5d7ed8582bf04f44b2f3b57f1
Author: Weiko <corentin@twenty.com>
Date:   Thu Jun 13 17:39:31 2024 +0200

    Remove timelineActivity featureFlag (#5856)

commit 21dbd6441a4b2b1f7c2209fc59633905b9eaa8e5
Author: kikoleitao <92337535+kikoleitao@users.noreply.github.com>
Date:   Thu Jun 13 16:22:51 2024 +0100

    feat: implement row re-ordering via drag and drop (#4846) (#5580)

    Currently, the Twenty platform incorporates "positions" for rows on the
    backend, which are functional within the Kanban view. However, this
    advantageous feature has yet to be leveraged within list views.

    - This PR addresses the implementation of row reordering via
    Drag-and-Drop on frontend. The objective is to enrich the list view
    functionality by introducing a grip that dynamically appears upon
    hovering over the left space preceding the checkbox container. This grip
    empowers users to effortlessly reposition rows within the list.

    - **Enhanced User Interaction**: Introduce a draggable grip to
    facilitate intuitive row reordering, enhancing user experience and
    productivity.
    - **Preservation of Design Aesthetics**: By excluding the grip from the
    first row and maintaining the left gap, we uphold design integrity while
    providing enhanced functionality.
    - **Consistency with Existing Features**: Align with existing
    drag-and-drop functionalities within the platform, such as Favorites
    re-ordering or Fields re-ordering in table options, ensuring a seamless
    user experience.

    - Add an extra column to the table (header + body) to accommodate the
    grip cell, which displays the IconListViewGrip when its container is
    hovered over.
    - Ensure the preceding left-space is maintained by setting the
    corresponding width for this column and removing padding from the table
    container (while maintaining padding in other page elements and the
    Kanban view for coherence).

    - Implement row drag-and-drop functionality using draggableList and
    draggableItem, based on the existing logic in the KanbanView for row
    repositioning.
    - Create a draggableTableBody and apply it to the current
    RecordTableBody (including modal open triggering - if dragging while
    sorting exists).
    - Apply the draggableItem logic to RecordTableRow.

    - Reuse the ConfirmationModel for the removeSortingModal.
    - Create a new state to address the modal.
    - Implement sorting removal logic in the corresponding modal file.

    - The left-side margin is preserved.
    - The grip appears upon hovering.
    - Dragging a row gives it and maintains an aesthetic appearance.
    - Dropping a row updates its position, and the table gets a new
    configuration.
    - If sorting is present, dropping a row activates a modal. Clicking on
    the "Remove Sorting" button will deactivate any sorting (clicking on
    "Cancel" will close the modal), and the table will revert to its default
    configuration by position, allowing manual row reordering. Row
    repositioning will not occur if sorting is not removed.
    - The record table maintains its overall consistency.
    - There are no conflicts with DragSelect functionality.

    https://github.com/twentyhq/twenty/assets/92337535/73de96cc-4aac-41a9-b4ec-2b8d1c928d04

    ---------

    Co-authored-by: Vasco Paisana <vasco.paisana@tecnico.ulisboa.pt>
    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 81c4939812f86df3aa2f0cef3a046b5d7fc386d1
Author: Weiko <corentin@twenty.com>
Date:   Thu Jun 13 15:22:15 2024 +0200

    Fix timeline activity missing updated fields (#5854)
    <img width="883" alt="Screenshot 2024-06-13 at 14 48 05"
    src="https://github.com/twentyhq/twenty/assets/1834158/0e72ead1-2d59-4ee3-af3b-dfdd593b7f2e">
    <img width="908" alt="Screenshot 2024-06-13 at 14 48 14"
    src="https://github.com/twentyhq/twenty/assets/1834158/00e32ddf-e40d-4cc9-a80a-9f5b76bd377a">

commit e0722545551ee44e98a7db8eb47086d3d71445e1
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Thu Jun 13 14:18:10 2024 +0200

    Fixed new date time formatting util (#5852)

    The new date time formatting util made for performance optimization
    missed two things :
    - Padding 0 for hours and minutes with 1 digit only.
    - Correctly parsing the day of the month (now uses JS Date native
    getDate() instead of slicing the ISO String)

commit 6f65fa295b8006267b6421e36ecc3478c0024361
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Thu Jun 13 12:43:13 2024 +0200

    Added RecordValue use-context-selector to settings field's logic (#5851)

    In the settings part of the app, where display fields are used as in
    table cell and board cards, we didn't have the new context selector
    logic implemented, due to the recent performance optimization.

commit b26fd00a4086ac03761fe47decd899a040cd0c47
Author: martmull <martmull@hotmail.fr>
Date:   Thu Jun 13 11:47:00 2024 +0200

    5663 i should be able to accept an invite even if i have an inactive workspace (#5839)

    - make invitation and reset password available on every page
    - add a sleep after setKeyPair as tokens are sometimes not updated when
    redirecting to Index
    - refactor sleep

commit d93c2d64088e59928994e68ffc6177d288b2f063
Author: Jovan <71730487+jovanmedford@users.noreply.github.com>
Date:   Thu Jun 13 05:30:13 2024 -0400

    Issue: #5761

    Changes:
    - Use `useFindManyRecords` in `RecordTableWithWrappers.tsx` to determine
    if any records exist for that object
    - Add `hasUnfilteredRecords` prop to `RecordTableEmptyState.tsx`.

    This changes to empty state title, but I'm guessing that we'll need to
    change the button text and subheading as well you guys can let me know
    what you think. If this works I can go on to do those next, thanks!

    ---------

    Co-authored-by: Thomas Trompette <thomas.trompette@sfr.fr>

commit 7c1d9aebb963d8afe5aca20b09ac362b0a3fe138
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Thu Jun 13 11:17:17 2024 +0200

    Removed unnecessary on mouse enter for soft focus (#5850)

    In RecordTableCellContainer, I just removed onMouseEnter event handler
    that was being triggered when we used keyboard soft focus move.

    It's not necessary to have it because we already listen on mouse move
    which is matching our use case where we only want soft focus to move
    when mouse move and not when the cursor stays on top of a cell.

commit f825bea07117f4aa10e44fe176d853e9b11a5127
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Thu Jun 13 07:53:28 2024 +0200

    5629 update blocklist for messaging v2 (#5756)

    Closes #5629

    - Add subdomain support in blocklist (if @example.com is blocked, every
    subdomain will be blocked)

commit 374237a9888a35206b40aa9a998c3873e39f5dd8
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Wed Jun 12 21:54:33 2024 +0200

    Refacto rest api, fix graphl playground, improve analytics (#5844)

    - Improve the rest api by introducing startingAfter/endingBefore (we
    previously had lastCursor), and moving pageInfo/totalCount outside of
    the data object.
    - Fix broken GraphQL playground on website
    - Improve analytics by sending server url

commit 04edf2bf7b22e06a67d042c039f8440b6cdacf9f
Author: Jérémy M <jeremy.magrin@gmail.com>
Date:   Wed Jun 12 21:17:31 2024 +0200

    feat: add resolve absolute path util (#5836)

    Add a new util called `resolveAbsolutePath` to allow providing absolute
    path for environment variable like `STORAGE_LOCAL_PATH`.
    If the path in the env start with `/` we'll not prefix it with
    `process.cwd()`.

    Also we're using a static path for the old `db_initialized` file now
    named `db_status` and stop using the env variable for this file as this
    one shouldn't ne stored in the `STORAGE_LOCAL_PATH`.

    Fix #4794

    ---------

    Co-authored-by: Quentin Galliano <qgalliano@gmail.com>

commit 3986824017767a09e38b12fee138dd497a240a9a
Author: martmull <martmull@hotmail.fr>
Date:   Wed Jun 12 21:13:18 2024 +0200

    5623 add an inviteteam onboarding step (#5769)
    - add a new invite Team onboarding step
    - update currentUser.state to currentUser.onboardingStep
    We will never display invite team onboarding step
    - if number of workspaceMember > 1
    - if a workspaceMember as been deleted
    Update typeorm package version to 0.3.20 because we needed a fix on
    `indexPredicates` pushed in 0.3.20 version
    (https://github.com/typeorm/typeorm/issues/10191)
    <img width="844" alt="image"
    src="https://github.com/twentyhq/twenty/assets/29927851/0dab54cf-7c66-4c64-b0c9-b0973889a148">

    https://github.com/twentyhq/twenty/assets/29927851/13268d0a-cfa7-42a4-84c6-9e1fbbe48912

commit 2fdd2f4949cddec3b88d91b491f20a5f64dc6c05
Author: Quentin G <qgalliano@gmail.com>
Date:   Wed Jun 12 21:11:58 2024 +0200

    Fix/release workflow (#5802)

    Here is a fix for https://github.com/twentyhq/twenty/issues/5163

    I tested it on another repo and should work as intended this time
    arround.

    I've created two workflows
    - One that creates a PR
    - The second that watch PR merge with specific labels
    - I also check the author of the PR to make sure it was created by a bot

    You can now disable the creation of the a draft release

    ---------

    Co-authored-by: Charles Bochet <charles@twenty.com>

commit 4a7a8c72ef2030bad0163bcd1bd42e5daf1b6b4f
Author: Charles Bochet <charles@twenty.com>
Date:   Wed Jun 12 20:38:44 2024 +0200

    Fix typing on main

commit 03b3c8a67ac24fd660876929637b59265dfa76b7
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Wed Jun 12 18:36:25 2024 +0200

    Refactored all FieldDisplay types for performance optimization (#5768)

    This PR is the second part of
    https://github.com/twentyhq/twenty/pull/5693.

    It optimizes all remaining field types.

    The observed improvements are :
    - x2 loading time improvement on table rows
    - more consistent render time

    Here's a summary of measured improvements, what's given here is the
    average of hundreds of renders with a React Profiler component. (in our
    Storybook performance stories)

    | Component | Before (µs) | After (µs) |
    | ----- | ------------- | --- |
    | TextFieldDisplay | 127 | 83 |
    | EmailFieldDisplay | 117 | 83 |
    | NumberFieldDisplay | 97 | 56 |
    | DateFieldDisplay | 240 | 52 |
    | CurrencyFieldDisplay | 236 | 110 |
    | FullNameFieldDisplay | 131 | 85 |
    | AddressFieldDisplay | 118 | 81 |
    | BooleanFieldDisplay | 130 | 100 |
    | JSONFieldDisplay | 248 | 49 |
    | LinksFieldDisplay | 1180 | 140 |
    | LinkFieldDisplay | 140 | 78 |
    | MultiSelectFieldDisplay | 770 | 130 |
    | SelectFieldDisplay | 230 | 87 |

commit 007e0e8b0ebe7f7e8f72d0abaf6154216035fa40
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Wed Jun 12 17:30:59 2024 +0200

    Fix event value elipsis (#5840)

    <img width="400" alt="Capture d’écran 2024-06-12 à 14 41 08"
    src="https://github.com/twentyhq/twenty/assets/22936103/12d333a9-16ce-45f3-a1eb-060bf77bae96">
    <img width="400" alt="Capture d’écran 2024-06-12 à 16 47 53"
    src="https://github.com/twentyhq/twenty/assets/22936103/6e154936-82d6-4e19-af4c-e6036b01dd04">
    <img width="400" alt="Capture d’écran 2024-06-12 à 16 52 48"
    src="https://github.com/twentyhq/twenty/assets/22936103/6440af6b-ea40-4321-942a-a6e728a78104">

commit 732e8912da32b6a18c0392df760240cebd4990fe
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Wed Jun 12 16:31:07 2024 +0200

    Added Linaria for performance optimization (#5693)

    - Added Linaria to have compiled CSS on our optimized field displays
    - Refactored mocks for performance stories on fields
    - Refactored generateRecordChipData into a global context, computed only
    when we fetch object metadata items.
    - Refactored ChipFieldDisplay
    - Refactored PhoneFieldDisplay

commit 30d3ebc68a3dac225fb1cb41d3af31f562798745
Author: martmull <martmull@hotmail.fr>
Date:   Wed Jun 12 16:25:04 2024 +0200

    Fix missing cursor on rest api (#5841)

    ![image](https://github.com/twentyhq/twenty/assets/29927851/fc3bad2d-5238-4afa-b528-409fbff3902c)

    ![image](https://github.com/twentyhq/twenty/assets/29927851/418174c1-aafb-4ea2-a936-50c03ea17764)

    ![image](https://github.com/twentyhq/twenty/assets/29927851/03439033-db6b-44b0-9613-f766babc1d2d)

    ![image](https://github.com/twentyhq/twenty/assets/29927851/f0e5e998-3c61-437d-863f-7289609d0d30)

commit ad6547948bba2c1140fc6f9d1c076319aa7523db
Author: Weiko <corentin@twenty.com>
Date:   Wed Jun 12 16:21:30 2024 +0200

    Activity timeline refactoring followup (#5835)

    Following https://github.com/twentyhq/twenty/pull/5697, addressing
    review

commit bd22bfce2ed3f80914e86e2a996bbb44391b0f5b
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Wed Jun 12 12:35:46 2024 +0200

    Push event for user signup (#5837)

    Need to setup Twenty as a CRM for Twenty the Twenty team

commit 5fe2fc2778b30b8db18c47faa646d6d1386b76b4
Author: Juan Martín Miñarro <80736129+Juojo@users.noreply.github.com>
Date:   Wed Jun 12 05:24:38 2024 -0300

    Add 8px margin to the left of the Tasks' tab list (#5833)

    I implemented the margin requested on #5827

    ---------

    Co-authored-by: Thomas Trompette <thomas.trompette@sfr.fr>

commit 5ec98b5ac34c67af0ad9bd8a0d9239e2440e2a14
Author: Charles Bochet <charles@twenty.com>
Date:   Wed Jun 12 08:21:35 2024 +0200

    Fix not possible to read message from other workspaceMember

commit a0d9fdb3de824eece3ca1e6fe96c2035b388033e
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Wed Jun 12 08:11:48 2024 +0200

    Fix bugs and telemetry (#5832)

    Bugfix 1:
    <img width="491" alt="Screenshot 2024-06-12 at 07 19 42"
    src="https://github.com/twentyhq/twenty/assets/6399865/e3ad2771-4edd-453d-9d85-f429177dfd15">

    Bugfix 2:
    <img width="259" alt="Screenshot 2024-06-12 at 07 47 02"
    src="https://github.com/twentyhq/twenty/assets/6399865/2f82c90e-2180-4290-b12e-e72910fb108c">

    Change 3:
    I remove the "telemetry anonymization enabled" parameter as it was
    misleading, we were anonymization ids but still forwarding the workspace
    name which is imo more sensitive than an ID

commit 7d068095cdb9c3d3012c8281b49cf4d99a55344e
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Tue Jun 11 22:30:38 2024 +0200

    Fix of board request fix PR (#5829)

    Fix again board requests as first merged PR appears to have missing
    commits / code. https://github.com/twentyhq/twenty/pull/5819

commit a57e2512085522eef3862813add5914e65fb321b
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Tue Jun 11 19:06:37 2024 +0200

    Fix docs build in CI (#5826)

commit be96c68416cee67cfb342a561eae62751eeefd66
Author: Weiko <corentin@twenty.com>
Date:   Tue Jun 11 18:53:28 2024 +0200

    POC timeline activity (#5697)

    TODO:
    - remove WorkspaceIsNotAuditLogged decorators on activity/activityTarget
    to log task/note creations
    - handle attachments
    -  fix css and remove unnecessary styled components or duplicates

commit 64b8e4ec4d344d5704f803b6aa9cdd67c5bbb7d4
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Tue Jun 11 18:52:38 2024 +0200

    Fix access token refresh (#5825)

    In `messaging-gmail-messages-import.service`, we were refreshing the
    access token before each query but we were passing the old access token
    to `fetchAllMessages`.
    I modified the function to query the updated connectedAccount with the
    new access token.
    This will solve the 401 errors we were getting in production.

commit 3328666308d1138a96cf66508583b49a1feef432
Author: RobertoSimonini1 <roberto.simonini@endor.studio>
Date:   Tue Jun 11 18:39:24 2024 +0200

    Increased inline relation field hover surface (#5809)

    I increased the inline relation of the relations fields, now the edit
    pen is visible when hovering the icon and not only the label.
    this aims to fix: #5662

commit 6d7782eb5a7d8ba421a207a82148b623430c396e
Author: marteenaf <120792086+marteenaf@users.noreply.github.com>
Date:   Tue Jun 11 17:24:40 2024 +0100

    Align field values with fixed width for field key.  (#5821)

    Made the alignment consistent with the field panel. This uses 90px as
    the key label width.

    **Issue:** #5730

    **Changes:**
    - Add a label width of 90 to FieldContext Provider in useFieldContext
    function
    - Add a label width of 90 to ActivityTargetsInlineCell component

    **Screen recording form local testing:**

    https://github.com/twentyhq/twenty/assets/120792086/e150530b-4163-4a69-9bd5-119a2f202d4f

    ---------

    Co-authored-by: Thomas Trompette <thomas.trompette@sfr.fr>

commit 3440889ad0f712883c94d3dd7b9c9316881ad7fd
Author: RobertoSimonini1 <roberto.simonini@endor.studio>
Date:   Tue Jun 11 17:39:51 2024 +0200

    made sidebar always visible on settings page (#5823)

    I made the sidebar/menu always visible on settings page even if the
    navigationDrawerOpen is false
    This aims to fix #5811

commit b84042ddbb1b744d4b8647702d877ba99ee94d80
Author: Marie <51697796+ijreilly@users.noreply.github.com>
Date:   Tue Jun 11 15:53:17 2024 +0200

    Display and update fields from fromManyObjects relations in Show card (#5801)

    In this PR, we implement the display and update of fields from
    fromManyObjects (e.g update Employees for a Company).

    Product requirement
    - update should be triggered at each box check/uncheck, not at lose of
    focus

    Left to do in upcoming PRs
    - add the column in the table views (e.g. column "Employees" on
    "Companies" table view)
    - add "Add new" possibility when there is no records (as is currently
    exists for "one" side of relations:)
    <img width="374" alt="Capture d’écran 2024-06-10 à 17 38 02"
    src="https://github.com/twentyhq/twenty/assets/51697796/6f0cc494-e44f-4620-a762-d7b438951eec">

    - update cache after an update affecting other records (e.g "Listings"
    have one "Person"; if listing A belonged to Person A but then we
    attribute listing A to Person B, Person A is no longer owner of Listing
    A. For the moment that would not be reflected immediatly leading, to
    potential false information if information is accessed from cache)
    - try to get rid of the glitch - we also have it on the task page
    example. (probably) due to the fact that we are using a recoil state to
    read, update then re-read

    https://github.com/twentyhq/twenty/assets/51697796/54f71674-237a-4946-866e-b8d96353c458

commit 4994a9c3a9ec581c5af803a8646af6c3bd54f031
Author: brendanlaschke <brendan.laschke@googlemail.com>
Date:   Tue Jun 11 15:31:48 2024 +0200

    Api docs remove Relations from Post & Patch (#5817)

    * Remove relations where they cannot be used
    * Removed duplicated schema for findMany
    * Reuse schema for Relation variant to reduce size of sent json object

    closes #5778

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
    Co-authored-by: martmull <martmull@hotmail.fr>

commit 58fb86f2c337775f8e4b3c47622a7313ad7ef08a
Author: Kyriaki Darivaki <115654088+kiridarivaki@users.noreply.github.com>
Date:   Tue Jun 11 16:24:34 2024 +0300

    Added support for Links filtering (#5785)

    References #5741

    ---------

    Co-authored-by: kiridarivaki <k.darivaki03@gmail.com>

commit 63578e6480eefb3af444ca41404a6a850921f882
Author: Siddhant Rai <47355538+siiddhantt@users.noreply.github.com>
Date:   Tue Jun 11 18:54:23 2024 +0530

    fix: calendar tile fonts underlined (#5820)

    - fixes #5797

commit 5c15fcd249bc298b79a55eaa296528d0bcc6b8ea
Author: martmull <martmull@hotmail.fr>
Date:   Tue Jun 11 14:54:02 2024 +0200

    5805 typing issue in rest api (#5818)

    Fixed types for:
    - uuid
    - email
    - datetime
    - date
    - number
    - currency.amountMicros
    - select
    - multiSelect

    ![image](https://github.com/twentyhq/twenty/assets/29927851/4bfa3a6d-a26f-47e4-a46f-7a5582825482)

    ![image](https://github.com/twentyhq/twenty/assets/29927851/0bbab32f-4172-4525-91d1-76c37f299ac0)

commit 710291238ead27953992e4f92bc8b73cebba6776
Author: TheUnspokenFifth <124464818+TheUnspokenFifth@users.noreply.github.com>
Date:   Tue Jun 11 04:54:19 2024 -0700

    Inline link chips cropped (#5810)

    Issue: [#5654](https://github.com/twentyhq/twenty/issues/5654)

    Changed chip vertical padding from 3px to 1px. This resulted in vertical
    size changing from 24px to 20px.

    ![image](https://github.com/twentyhq/twenty/assets/124464818/aaed1e57-91e3-4d98-91b5-5dd10b857c9f)

    ![image](https://github.com/twentyhq/twenty/assets/124464818/c16223b5-35f4-40b0-b0ad-828973bb47a2)

    ---------

    Co-authored-by: ktang520 <ktang520@gmail.com>
    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
    Co-authored-by: Sage Bain <47053579+Shyesta@users.noreply.github.com>
    Co-authored-by: Shyesta <mrsixpaths@aol.com>

commit 07d07ff8764257355db5421b52bcff07f686e8bf
Author: Shashank Vishwakarma <shashank000s4@gmail.com>
Date:   Tue Jun 11 16:29:31 2024 +0530

    Fixed: Select fields now selects on pressing the enter key (#5576)

    Now while pressing the `Enter` button, the select field selects the
    relevant option.

    - Added a `handleKeyDown` function to set the `persistField` with the
    selected option.
    - Added an `onKeyDown` event on `DropdownMenuSearchInput` component, to
    trigger `handleKeyDown` when `Enter` is pressed.
    - Fixes: #5556

    ---------

    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit 8a88bf41dd1a8332eaea8b526ecba08ac713c901
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Tue Jun 11 12:31:50 2024 +0200

    Fixed soft focus stuck (#5639)

    Soft focus could be stuck when exiting edit mode, in some cases it would
    prevent to have soft focus if just moving the mouse into a cell.

commit 25a38dc6936b85a02d5c33af5c3e6fb9837e1ee8
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Tue Jun 11 12:29:33 2024 +0200

    Added one request per column on board. (#5819)

    - Changed to one find many request per column on board.

commit 9307d206c5af33cac92858ed977e58bb0b7577b1
Author: martmull <martmull@hotmail.fr>
Date:   Tue Jun 11 12:08:21 2024 +0200

    Add authentication optional api url parameter (#5803)

commit af8c6373552fd64a93c3750722589e94048c6321
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Tue Jun 11 10:18:08 2024 +0200

    Temporary fix README (#5814)

    Emergency fix for broken readme images

commit ff1bca1816c8ce678846393c27a0c8a53a987cd0
Author: Ady Beraud <102751374+ady-beraud@users.noreply.github.com>
Date:   Tue Jun 11 10:45:17 2024 +0300

    Docs modifications (#5804)

    - Fixes #5504
    - Fixes #5503
    - Return 404 when the page does not exist
    - Modified the footer in order to align it properly
    - Removed "noticed something to change" in each table of content
    - Fixed the URLs of the edit module
    - Added the edit module to Developers
    - Fixed header style on the REST API page.
    - Edited the README to point to Developers
    - Fixed selected state when clicking on sidebar elements

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 3c5a4ba692ae0dfb595887bb74b3b836f52a8cd2
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Sun Jun 9 22:46:11 2024 +0200

    Handle Network errors in messaging sync (#5795)

    In this PR, I'm doing 2 things:
    - refresh connectedAccount token on message-list-fetch. It's currently
    only refresh while doing the messages-import. However messages-import
    stage are only triggered if new messages are detected (which could take
    days or week depending of the messageChannel activity). We should also
    refresh it while trying to fetch the list
    - handle Unhandled Gmail error code 500 with reason "backendError".
    These can occur on gmail side. In this case, we just retry later.

commit 01c0378b7a91c374af2d3ff2a7ae065d479092a1
Author: Charles Bochet <charles@twenty.com>
Date:   Sun Jun 9 09:59:55 2024 +0200

    Handle Network errors in messaging sync

commit e4a4499b7994841f25458aa513066dc416a5b206
Author: Charles Bochet <charles@twenty.com>
Date:   Sun Jun 9 01:27:43 2024 +0200

    Fix messaging sharing inconsitency

commit 9ebf7a61ab4e2436bb287e0e51a57f8d658bc44d
Author: Charles Bochet <charles@twenty.com>
Date:   Sun Jun 9 00:56:59 2024 +0200

    Remove threadId defined assertion as it could not be in messaging sync

commit f2cd65557ebd2c4f2a80364ab2fbbfa1605a38bd
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Sun Jun 9 00:15:12 2024 +0200

    Remove messageId defined assertion as it could not be in messaging sync (#5784)

    Instead, we will log but ignore the message

commit d4610774fa7d60ff19ac671d317233fba5ccae43
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Sun Jun 9 00:10:18 2024 +0200

    Fix unclosable cell (#5776)

    In some cases we couldn't open a table cell if the soft focus was still
    on another.

commit 32804ec2965859073a92aa71a22d347cebf5352e
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Sun Jun 9 00:06:44 2024 +0200

    Disable prefetching on contributors page (website) (#5783)

    Disable prefetching on contributors list as it spams the server

commit d7ce42cff75c15da1ce9d1f2096bce923bc08cc2
Author: Charles Bochet <charles@twenty.com>
Date:   Sat Jun 8 23:46:52 2024 +0200

    Throw exception when error code is not defined in messaging import

commit a79b25640901071d822dd06cbe35898f52480b1a
Author: Charles Bochet <charles@twenty.com>
Date:   Sat Jun 8 23:18:17 2024 +0200

    Throw exception when error code is not defined in messaging import

commit afac4de67997a91ea8057261074670f461f22402
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Sat Jun 8 22:59:59 2024 +0200

    Throw exception when an unknown error is caught on messaging sync (#5782)

    As per title for this one ;)

commit 7f9fdf3ff68529cdc1ef2c6213f06b19300f0145
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Sat Jun 8 11:07:36 2024 +0200

    Fix performance issue mail (#5780)

    In this PR, I'm mainly doing two things:
    - uniformizing messaging-messages-import and
    messaging-message-list-fetch behaviors (cron.job and job)
    - improving performances of these cron.jobs by not triggering the jobs
    if the stage is not relevant
    - making sure these jobs have same signature (workspaceId +
    messageChannelId)

commit 520a883c7379d76dce9ed6620b7db2647dc91b16
Author: Pacifique LINJANJA <pacilinja2@gmail.com>
Date:   Fri Jun 7 17:23:32 2024 +0200

    Fix the "Delete" action on the Kaban view (#5646)

    - Fixes #5520
    - Created a shared confirmation modal component for the `ContextMenu`
    and the `ActionBar` components to avoid code repetition - with its
    storybook file

    Looking forward to getting feedback @charlesBochet

commit e9cf4497067ee66d5f74c13cab4b8db0a1ada3cd
Author: RobertoSimonini1 <roberto.simonini@endor.studio>
Date:   Fri Jun 7 17:09:09 2024 +0200

    Search dialog fullscreen on mobile (#5765)

    I changed the visibility of the search dialog to make it full screen on
    mobile, this should already be ok but I couldn't try it on mobile, so I
    just used devtools, if I need to do something else on this PR just tell
    me :)
    This PR aims to fix: #5746

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 908990315d0056f0b67778971d17e32d0b137667
Author: brendanlaschke <brendan.laschke@googlemail.com>
Date:   Fri Jun 7 14:53:12 2024 +0200

    Datamodel overview improvements (#5771)

    closes #5586
    <img width="707" alt="Bildschirmfoto 2024-06-07 um 14 05 39"
    src="https://github.com/twentyhq/twenty/assets/48770548/af5fa200-d71b-41ed-9478-35becfc306a3">

commit 1208fed7b30eb9dd97e5d044b9d8943964da65cd
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Fri Jun 7 14:45:24 2024 +0200

    Add endpoint to create postgres credentials (#5767)

    First step for creating credentials for database proxy.

    In next PRs:
    - When calling endpoint, create database Postgres on proxy server
    - Setup user on database using postgresCredentials
    - Build remote server on DB to access workspace data

commit e478c68734ccc15569bd129469752c1d5944334f
Author: RobertoSimonini1 <roberto.simonini@endor.studio>
Date:   Fri Jun 7 11:23:33 2024 +0200

    Switched current Sort Button with same used for filters and options ones (#5764)

    I changed the Sort button used in the Header using
    StyledHeaderDropdownButton component (the same used for Filter and
    Options') instead of LightButton.
    This PR aims to fix the issue: #5743

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit c76bc4729d2ec29dcb5b07c43b0e333cc2ab4467
Author: Hinson Chan <yhc3141@gmail.com>
Date:   Thu Jun 6 07:41:22 2024 -0700

    [4725] Inverted Variants of buttons (#5671)

    Resolves #4725

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 9567103d5fb0c263564d78e3a1c101e455b8b7b6
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Thu Jun 6 11:00:46 2024 +0200

    Remove check unique position (#5760)

    Currently position can be the same for records displayed in a board
    view.
    Removing unicity check until we find a new startegy.

commit 9f6a6c3282c158cbfecf1f63df97c2bbdb715bf8
Author: martmull <martmull@hotmail.fr>
Date:   Wed Jun 5 18:16:53 2024 +0200

    5622 add a syncemail onboarding step (#5689)

    - add sync email onboarding step
    - refactor calendar and email visibility enums
    - add a new table `keyValuePair` in `core` schema
    - add a new resolved boolean field `skipSyncEmail` in current user

    https://github.com/twentyhq/twenty/assets/29927851/de791475-5bfe-47f9-8e90-76c349fba56f

commit fda0d2a1708a3b3f48b795bd2f3e64f928a37cb1
Author: Weiko <corentin@twenty.com>
Date:   Wed Jun 5 18:14:09 2024 +0200

    Fix edit button missing in activity editor (#5757)
    Fixing `setIsFocused is not a function` and the fact that edit buttons
    were not showing up anymore.
    A new FieldFocusContextProvider has been introduced and added to
    RecordInlineCell but not ActivityTargetsInlineCell. This should fix the
    issue.

    <img width="523" alt="Screenshot 2024-06-05 at 17 42 07"
    src="https://github.com/twentyhq/twenty/assets/1834158/1c1f919e-3829-4e40-b573-3b1b75b7c16f">

commit 89f914ebf846b995733abc30dee4973905e3134e
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Wed Jun 5 17:01:13 2024 +0200

    Improve csv import (#5753)

    This is a small PR to improve the design of our CSV import.

    I noticed the back button that was implemented in a recent PR #5625 was
    broken and would need to be fixed (e.g. try to come back to the very
    first upload step from the sheet selection step). cc @shashankvish0010
    if you want to give a stab at fixing your PR that'd be amazing, thanks!

commit e9d3ed99ca30dab4808eddc0e87e364eba018ba0
Author: martmull <martmull@hotmail.fr>
Date:   Wed Jun 5 16:35:14 2024 +0200

    5078 ability to invite team members (#5750)
    - update team member setting page
    - add a section to send invitation by email
    - add a new invitation email
    - update email font to 'Trebuchet MS' as Google Inter font is not
    working, we need to use a web safe font
    https://templates.mailchimp.com/design/typography/

    https://github.com/twentyhq/twenty/assets/29927851/c731d883-1599-4281-87e3-0671f36994ae

    ![image](https://github.com/twentyhq/twenty/assets/29927851/d569fc64-fa0c-4769-a3dd-1193a12b495c)

commit 3c4b497846a1f85a3d24f70e1d94b1e171267ceb
Author: Leo157 <76474110+wcgzorro@users.noreply.github.com>
Date:   Wed Jun 5 22:15:00 2024 +0800

    fix:person head photo (#5749)

    before:

    https://github.com/twentyhq/twenty/assets/76474110/2d9d3e60-886e-4ad3-a1a3-b9484e49791c

    after:

    https://github.com/twentyhq/twenty/assets/76474110/877a15e6-ca72-450a-b25c-b4b323656d7f

commit 126d9ef2e6b5eaed65cdf000dbb0d13c6d84d412
Author: Weiko <corentin@twenty.com>
Date:   Wed Jun 5 15:26:27 2024 +0200

    Bump versions to 0.12.2 (#5751)

commit 5164c7fd3c502bc9cb22ec9d1b6fd27e699a21b4
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Wed Jun 5 11:07:48 2024 +0200

    Update icon and fix relation creation (#5742)

    A minor fix (update icon and fix relation creation when creating a
    relation in right drawer)

commit 6d869297b558b55a0a7077ac7280ef9f0acfdd2c
Author: Marie <51697796+ijreilly@users.noreply.github.com>
Date:   Wed Jun 5 11:06:22 2024 +0200

    Fix select field options update (#5736)

    Update of select fields options was failing if we deleted an option that
    was used for at least one row: former code would not update the value to
    null but leave it to the no-longer-allowed value.

commit 1bbfc0b715cc75dcd48dc2b1d688033a602ce95c
Author: Marie <51697796+ijreilly@users.noreply.github.com>
Date:   Tue Jun 4 22:27:27 2024 +0200

    Add unicity constraint between object nameSingular and namePlural (#5737)

commit bb7d94a455e2b1a0ddf9fd129c57c15693a72570
Author: gitstart-twenty <140154534+gitstart-twenty@users.noreply.github.com>
Date:   Tue Jun 4 11:04:57 2024 -0400

    Create ESLint rule to discourage usage of navigate() and prefer Link (#5642)
    Create ESLint rule to discourage usage of navigate() and prefer Link

    ![Capture-2024-05-29-112852](https://github.com/twentyhq/twenty/assets/140154534/28378c09-86bb-49d3-9e9a-49aa1c07ad11)

    ![Capture-2024-05-29-112843](https://github.com/twentyhq/twenty/assets/140154534/2c05ea92-e19b-49ae-acb9-07f6ec9182ab)

    Fixes #5468

    ---------

    Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
    Co-authored-by: v1b3m <vibenjamin6@gmail.com>
    Co-authored-by: Matheus <matheus_benini@hotmail.com>
    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 234e0622327eb977bc8d694101418feecbcd3ae6
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Tue Jun 4 16:52:57 2024 +0200

    Refactor sync sub status and throttle (#5734)

    - Rename syncSubStatus to syncStage
    - Rename ongoingSyncStartedAt to syncStageStartedAt
    - Remove throttlePauseUntil from db and compute it with
    syncStageStartedAt and throttleFailureCount

commit ce1469cf0cbefc12e2106983b531b6dfa046502e
Author: Anand Krishnan M J <87609792+Anand-Krishnan-M-J@users.noreply.github.com>
Date:   Tue Jun 4 19:25:02 2024 +0530

    [ Fix ] [ Issue - 5701 ] Mouse down and drag is selecting records, while file import modal is open (#5716)

    - Prevent mouse event propagation outside modal
    - Prevent text selection inside the modal during drag event

    https://github.com/twentyhq/twenty/issues/5701

    https://github.com/twentyhq/twenty/assets/87609792/c15c2a1d-5e3b-4fc5-a98a-638615e8d7b9

    Actual drag operation is done, but not visible in the video

    https://github.com/twentyhq/twenty/assets/87609792/f2e68e67-1eb1-4a15-83c8-8cb4313bcaa1

    ---------

    Co-authored-by: Thomas Trompette <thomas.trompette@sfr.fr>

commit fa70f9cfc7cf8b2889015e3f3cfd03c2a527b233
Author: Jeet Desai <52026385+jeet1desai@users.noreply.github.com>
Date:   Tue Jun 4 18:47:46 2024 +0530

    Fix: Reduce spacing gap between Task title and subtitle (#5711)

    Fixes: #5669

    ---------

    Co-authored-by: Thomas Trompette <thomas.trompette@sfr.fr>

commit 5e32cb215e9174e63e9e50c41b6fcdaa26bfc4b1
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Tue Jun 4 15:10:56 2024 +0200

    Fix 5598 - View field creation (#5732)

    - Fix duplicate view field creation
    - Fix redirect to proper settings data model page
    - Refetch view fields after field creation (temporary solution)

    Fixes  https://github.com/twentyhq/twenty/issues/5598

commit c5d5d183476c09a8a6bb4c45f49a711636c7e53d
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Tue Jun 4 15:02:19 2024 +0200

    Remove checkbox padding (#5733)

    Regression has been introduced by this PR
    https://github.com/twentyhq/twenty/pull/4883

    Production

    <img width="885" alt="Capture d’écran 2024-06-04 à 14 51 19"
    src="https://github.com/twentyhq/twenty/assets/22936103/ad6d8490-815c-485a-b9c0-945aa7fba45c">

    After fix

    <img width="885" alt="Capture d’écran 2024-06-04 à 14 51 41"
    src="https://github.com/twentyhq/twenty/assets/22936103/72fd6094-21c2-4737-bd20-0faf9adceb38">

commit 25f4e44aec8b630501d7aecae6f7773c0b235db3
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Tue Jun 4 14:10:58 2024 +0200

    Add backfill position job by workspace (#5725)

    - Removing existing listener that was backfilling created records
    without position
    - Switch to a job that backfill all objects within workspace
    - Adapting `FIND_BY_POSITION` so it can fetch objects without position.
    Currently we needed to input a number

commit b1f12d72570621693a984a55d2f4f9134dc8abae
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Tue Jun 4 13:26:40 2024 +0200

    Fix input position backfill (#5731)

    Some objects do not have position field so they should not be backfilled

commit a4e5e486f58beab63e38eea7d15203f8413649a8
Author: Marie <51697796+ijreilly@users.noreply.github.com>
Date:   Tue Jun 4 13:02:38 2024 +0200

    Fix boolean field in table view (#5728)

    Boolean field was not working in display (unfocused) mode.

    Before fix
    <img width="269" alt="Capture d’écran 2024-06-04 à 11 50 55"
    src="https://github.com/twentyhq/twenty/assets/51697796/9140f71c-41e4-44b4-9514-933edab33dd6">

    https://github.com/twentyhq/twenty/assets/51697796/831c34a7-b91c-4df9-81d8-ced01cc7b9b6

    After fix
    <img width="284" alt="Capture d’écran 2024-06-04 à 11 51 01"
    src="https://github.com/twentyhq/twenty/assets/51697796/7e4a089d-0c55-4624-a5d3-44c00681c6ca">

    https://github.com/twentyhq/twenty/assets/51697796/b5103f39-64c1-4ace-ab32-353aba364471

commit 719cce1ea2b3b05aab1f2033d8cae6e9d8d81f3c
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Tue Jun 4 12:16:47 2024 +0200

    Improve design of fields menu (#5729)

    Improve design of field options menu and redirect to the right object
    edit page

    <img width="215" alt="Screenshot 2024-06-04 at 12 15 43"
    src="https://github.com/twentyhq/twenty/assets/6399865/a8da18a1-49d4-40e3-b2cd-3a1a384366b2">

commit d964f656f99f8659e46ac6a46528f77563acdb35
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Tue Jun 4 11:44:54 2024 +0200

    Fix field input offset (#5726)

    Fix issue introduced in https://github.com/twentyhq/twenty/pull/5426

    It's not a beautiful solution. Maybe one day we should have a dedicated
    component for title but it also comes with downsides (lot of code to
    copy paste, such as "esc" to leave field, copy button, etc.). This one
    doesn't create less debt in my opinion. Once we have the layout/widget
    system we might have a dedicated widget type and the right abstraction
    layers

commit cd9ac529a573dd1fe9be84b84f309233f5fcb036
Author: gitstart-twenty <140154534+gitstart-twenty@users.noreply.github.com>
Date:   Tue Jun 4 04:51:33 2024 -0400

    Add storybook tests for User & Metadata loading (#5650)
    Add storybook tests for User & Metadata loading

    https://github.com/twentyhq/twenty/assets/140154534/2434fc50-8d95-420b-9f62-6fbdf43ce9e5

    Fixes #5590

    ---------

    Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
    Co-authored-by: v1b3m <vibenjamin6@gmail.com>
    Co-authored-by: Thiago Nascimbeni <tnascimbeni@gmail.com>

commit 3f9f2c3ba611b082f0b4f230283eeef937fbd729
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Tue Jun 4 10:29:05 2024 +0200

    5620 implement throttle logic for message and calendar sync (#5718)

    Closes #5620 and improve messages filters

commit 32d4b37d372eaa8bf13e397e1b359fb9ee383d34
Author: Indrakant D <60315832+its-id@users.noreply.github.com>
Date:   Tue Jun 4 13:33:07 2024 +0530

    Change Navigation Font Weight (#5704)

    fixes [#5665](https://github.com/twentyhq/twenty/issues/5665).

    | Before | After |
    | --- | --- |
    | <img width="257" alt="Screenshot 2024-06-02 at 1 22 09 AM"
    src="https://github.com/twentyhq/twenty/assets/60315832/b78da8fa-cea8-45af-b32c-864d6bce050a">
    | <img width="248" alt="Screenshot 2024-06-02 at 1 21 01 AM"
    src="https://github.com/twentyhq/twenty/assets/60315832/793c3d16-3ed7-408f-acdd-6f7f4ec92ca2">
    |

commit 59c7bcd7050b53774899b162a235501fd99d9366
Author: Kyriaki Darivaki <115654088+kiridarivaki@users.noreply.github.com>
Date:   Mon Jun 3 23:17:37 2024 +0300

    Fix 4363 modify kanban menu (#5337)

    **Changes:**

    - Changed -/+ to eye and eye off icons
    - Changed menu width to 200px
    - Created separate menu for hidden fields
    - Added Edit Fields option to hidden fields menu
    - Added test file MenuItemSelectTag (wasn't included in the issue)

    As this is my first pr, feedback is very welcome!
    **Note:**
    These changes cover most of #4363 . I left out the implementation of the
    RightIcon in the "Hidden Fields" menu item.

    ---------

    Co-authored-by: kiridarivaki <k.darivaki03@gmail.com>
    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit dcd769f20f3fa667db82ac60bea438bfbb6ca6c0
Author: rostaklein <r.klein@make.com>
Date:   Mon Jun 3 21:26:08 2024 +0200

    spreadsheet import utf8 emoji support (#5720)

    fixes https://github.com/twentyhq/twenty/issues/5476

    took some time to find the right spot, but ChatGPT was helpful enough in
    this case 😄

    <img width="311" alt="Screenshot 2024-06-03 at 20 24 26"
    src="https://github.com/twentyhq/twenty/assets/19856731/4ea0188b-bee5-4a4f-a8af-2630e3b1c373">

commit 671de4170f615972ca6eb82755f10767af1176bf
Author: Ady Beraud <102751374+ady-beraud@users.noreply.github.com>
Date:   Mon Jun 3 19:52:43 2024 +0300

    Migrated Developer Docs (#5683)

    - Migrated developer docs to Twenty website

    - Modified User Guide and Docs layout to include sections and
    subsections

    **Section Example:**
    <img width="549" alt="Screenshot 2024-05-30 at 15 44 42"
    src="https://github.com/twentyhq/twenty/assets/102751374/41bd4037-4b76-48e6-bc79-48d3d6be9ab8">

    **Subsection Example:**
    <img width="557" alt="Screenshot 2024-05-30 at 15 44 55"
    src="https://github.com/twentyhq/twenty/assets/102751374/f14c65a9-ab0c-4530-b624-5b20fc00511a">

    - Created different components (Tabs, Tables, Editors etc.) for the mdx
    files

    **Tabs & Editor**

    <img width="665" alt="Screenshot 2024-05-30 at 15 47 39"
    src="https://github.com/twentyhq/twenty/assets/102751374/5166b5c7-b6cf-417d-9f29-b1f674c1c531">

    **Tables**

    <img width="698" alt="Screenshot 2024-05-30 at 15 57 39"
    src="https://github.com/twentyhq/twenty/assets/102751374/2bbfe937-ec19-4004-ab00-f7a56e96db4a">

    <img width="661" alt="Screenshot 2024-05-30 at 16 03 32"
    src="https://github.com/twentyhq/twenty/assets/102751374/ae95b47c-dd92-44f9-b535-ccdc953f71ff">

    - Created a crawler for Twenty Developers (now that it will be on the
    twenty website). Once this PR is merged and the website is re-deployed,
    we need to start crawling and make sure the index name is
    ‘twenty-developer’
    - Added a dropdown menu in the header to access User Guide and
    Developers + added Developers to footer

    https://github.com/twentyhq/twenty/assets/102751374/1bd1fbbd-1e65-4461-b18b-84d4ddbb8ea1

    - Made new layout responsive

    Please fill in the information for each mdx file so that it can appear
    on its card, as well as in the ‘In this article’ section. Example with
    ‘Getting Started’ in the User Guide:

    <img width="786" alt="Screenshot 2024-05-30 at 16 29 39"
    src="https://github.com/twentyhq/twenty/assets/102751374/2714b01d-a664-4ddc-9291-528632ee12ea">

    Example with info and sectionInfo filled in for 'Getting Started':

    <img width="620" alt="Screenshot 2024-05-30 at 16 33 57"
    src="https://github.com/twentyhq/twenty/assets/102751374/bc69e880-da6a-4b7e-bace-1effea866c11">

    Please keep in mind that the images that are being used for Developers
    are the same as those found in User Guide and may not match the article.

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit f7cdd14c756d21590c9541b8db4d41ceaee0ea34
Author: Marie <51697796+ijreilly@users.noreply.github.com>
Date:   Mon Jun 3 17:17:25 2024 +0200

    Use same overlay background for field inputs (#5719)

    Fixes #5593

commit 09bfb617b2944ed6be28ff7c3971ad99eb8693b2
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Mon Jun 3 17:15:05 2024 +0200

    Right drawer to edit records (#5551)

    This PR introduces a new side panel to edit records and the ability to
    minimize the side panel.

    The goal is leverage this sidepanel to be able to create records while
    being in another show page.

    I'm opening the PR for feedback since it involved refactoring and
    therefore already touches a lot of files, even though it was quick to
    implement.

    <img width="1503" alt="Screenshot 2024-05-23 at 17 41 37"
    src="https://github.com/twentyhq/twenty/assets/6399865/6f17e7a8-f4e9-4eb4-b392-c756db7198ac">

commit 8e8078d596fcf845700bb1979e4c3ea2098f68a8
Author: JustGJ <78202522+JustGJ@users.noreply.github.com>
Date:   Mon Jun 3 16:09:27 2024 +0200

    fix remove favorite on opportunity delete (#5686)

    - fix : #5521

    When we deleted an opportunity that had been added to the favorites
    list, the opportunity was removed correctly, but it still remained in
    the favorites list. The issue was due to not accounting for the removal
    of the opportunity from the favorites during the deletion process.

    This problem has now been fixed :

    https://github.com/twentyhq/twenty/assets/78202522/3d3cb689-3228-43fc-bf50-e824370582a7

    Co-authored-by: Jeff Gasparini <jeff@Jeff.local>

commit 04dcbffe75260f12dfee6b24fc999fd665f3d11e
Author: Shashank Vishwakarma <shashank000s4@gmail.com>
Date:   Mon Jun 3 19:28:58 2024 +0530

    Fixed: Inconsistent Field Label Display on Task Side Panel (#5687)

    Now all the required fields are displayed with the respective labels.

    - Added a `FieldContextProvider` for the field `Reminder` in the
    `ActivityEditorFields`.
    - Fixed the missing label values, by adding a missed optional
    `showLabel` within the `fieldDefinition` in the `useFieldContext`.

    fixes: #5667

    ![Screenshot
    (342)](https://github.com/twentyhq/twenty/assets/140178357/adf9563a-6cab-4809-8616-1c256abab717)

commit 2886664b62d14afc7ba6a531afc0f07187641379
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Mon Jun 3 15:18:01 2024 +0200

    Backfill position when not input (#5696)

    - refactor record position factory and record position query factory
    - override position if not present during createMany

    To avoid overriding the same positions for all data in createMany, the
    logic is:
    - if inserted last, use last position + arg index + 1
    - if inserted first, use first position - arg index - 1

commit a6b8beed68573f3cd3cb9724b71654869454233d
Author: Shashank Vishwakarma <shashank000s4@gmail.com>
Date:   Mon Jun 3 18:45:32 2024 +0530

    Fixed: Fields Disappear on Drag and Drop (#5703)

    Now the fields don't disappear on drag and drop.

    - After reviewing the codebase, I checked that when `inView` is true the
    `RecordInlineCell` is rendered otherwise the
    `StyledRecordInlineCellPlaceholder` will render which causes the fields
    get disappear.
    - So, I added the condition to check if `isDragSelectionStartEnabled` is
    false then `StyledRecordInlineCellPlaceholder` will be rendered
    otherwise `RecordInlineCell`.

    fixes: #5651

    https://github.com/twentyhq/twenty/assets/140178357/022195ca-fec2-43a7-8808-f4974dbe66cf

    ---------

    Co-authored-by: martmull <martmull@hotmail.fr>

commit e49db63f30d4a766c848a14c52bbad99c8dd21f4
Author: rostaklein <r.klein@make.com>
Date:   Mon Jun 3 15:14:08 2024 +0200

    accounts page loader as skeleton (#5702)

    fixes https://github.com/twentyhq/twenty/issues/5659

    https://github.com/twentyhq/twenty/assets/19856731/aeae6f08-bc6e-4d71-9067-39b6382ebf15

commit 24941c66b75d963cd21131caca3ea1835df10bad
Author: spiderman3000 <wand.bursae.0c@icloud.com>
Date:   Mon Jun 3 18:19:57 2024 +0530

    [Improvement] LeftPanel skeleton loader (#5705)

    This change solves #5664
    This modifies the left-side panel skeleton loader in accordance with the
    default v…
srp-pawar added a commit to synapsenet-arena/lead360 that referenced this pull request Jun 21, 2024
commit 9228667a57b93843df5cbe0bcccffc6facf1ab90
Author: Pacifique LINJANJA <pacilinja2@gmail.com>
Date:   Thu Jun 20 18:18:12 2024 +0200

    Add the support of Empty and Non-Empty filter (#5773)

commit 9e08445bff7a6ae2bf0dd0b229615141de782c11
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Thu Jun 20 17:13:30 2024 +0200

    Fix date picker wrong on certain timezones (#5972)

    Timezone with a negative offset weren't working good with date pickers.

    I split the logic for display and parsing between date only and
    datetime.

    Date time is sending and displaying using timezone, and date only is
    sending and displaying by forcing the date to take its UTC day and month
    and 00:00:00 time.

    This way its consistent across all timezones.

commit 8c6e96c41b7542770f77108bbfe9810d5d9a1001
Author: Aditya Pimpalkar <adipimpalkar@gmail.com>
Date:   Thu Jun 20 15:44:28 2024 +0100

    fix: Column header menu Filter button (#5973)

    fixes: #5957

    https://github.com/twentyhq/twenty/assets/13139771/51d42aa5-c774-4cbe-adca-b95ea6e17bbd

commit 59b9ce689ded48b6d92cf94ec965d2721b5d6b34
Author: Aditya Pimpalkar <adipimpalkar@gmail.com>
Date:   Thu Jun 20 15:42:33 2024 +0100

    add object id column to csv export (#5971)

    closes: #5893

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit bc8c895b0ebe0c29f3f81884db988875102f4bd4
Author: Rushikesh Tarapure <61598260+t007rushi@users.noreply.github.com>
Date:   Wed Jun 19 20:07:44 2024 +0530

    Feat : Introduced Delay Options for Tooltip (#5766)

    Fixes https://github.com/twentyhq/twenty/issues/5727

    ---------

    Co-authored-by: Rushikesh Tarapure <rushikeshtarapure@gofynd.com>
    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit 86f95c087018890d1be561e090ac66db4b41327d
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Wed Jun 19 16:04:01 2024 +0200

    5898 Create a cron to monitor messageChannelSyncStatus (#5933)

    Closes #5898

commit 016132ecf6238ad710b60948949cfbb093f3dfd2
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Wed Jun 19 16:00:39 2024 +0200

    Fix reconnect google account bug (#5905)

    Update syncStage to FULL_MESSAGE_LIST_FETCH_PENDING when reconnecting
    the account to trigger a full sync on the next cron iteration.

commit d6fcb9cae88f3a04236f38d3536f2cf20827cdc2
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Wed Jun 19 15:41:57 2024 +0200

    5934 create alert banner component (#5950)

    Closes #5934

    ---------

    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit 701059007b562a611c90ad5d62df585c50b1e008
Author: gitstart-twenty <140154534+gitstart-twenty@users.noreply.github.com>
Date:   Wed Jun 19 09:25:20 2024 -0400

    Data Skeleton Loading on Indexes (#5828)

    ### Description
    Data Skeleton Loading on Indexes

    ### Refs
    #4459

    ### Demo

    https://github.com/twentyhq/twenty/assets/140154534/d9c9b0fa-2d8c-4b0d-8d48-cae09530622a

    Fixes #4459

    ---------

    Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
    Co-authored-by: v1b3m <vibenjamin6@gmail.com>
    Co-authored-by: Matheus <matheus_benini@hotmail.com>
    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit ff21396bc699916897b86ef7af8927ca987d8f06
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Wed Jun 19 14:48:09 2024 +0200

    [Bug] Put back subject is email right drawer  (#5955)

    Fix https://github.com/twentyhq/twenty/issues/5903

commit 60b60bd4b34a54eadfacbcf05b1fc7218431ead1
Author: Joshua Zacek <personal.joshuazacek@gmail.com>
Date:   Wed Jun 19 13:46:47 2024 +0100

    (5943) Match country selector button's background to phone number input's background (#5956)

    Fixes #5943

    ### Before
    Light
    <img width="218" alt="Screenshot 2024-06-19 at 12 37 22 PM"
    src="https://github.com/twentyhq/twenty/assets/57673080/981d1877-be4e-4071-9a8d-9d0ed7e933ab">
    Dark
    <img width="223" alt="Screenshot 2024-06-19 at 12 39 42 PM"
    src="https://github.com/twentyhq/twenty/assets/57673080/a3730ef5-21ba-4d90-998d-d330aec350ad">

    ### After
    Light
    <img width="216" alt="Screenshot 2024-06-19 at 12 39 00 PM"
    src="https://github.com/twentyhq/twenty/assets/57673080/eef3b743-1b28-43a5-8c1c-bd944a4915c7">
    Dark
    <img width="228" alt="Screenshot 2024-06-19 at 12 39 29 PM"
    src="https://github.com/twentyhq/twenty/assets/57673080/5bf10e51-5a07-4d55-99f1-734517b22781">

commit 1c685e8a31d4df57439bb73fb9414de216acaee9
Author: Atchyut Preetham Pulavarthi <pulavarthi.preetham@gmail.com>
Date:   Wed Jun 19 18:08:30 2024 +0530

    fix(twenty-front): update DateTimeInput styles to apply top border radius to date picker (#5946)

    update DateTimeInput styled components to prevent the StyledInput from
    overflowing out of it's parent container

    <img width="860" alt="Screenshot 2024-06-19 at 9 55 04 AM"
    src="https://github.com/twentyhq/twenty/assets/19223383/8c5daf6a-9eb6-4ecd-a2e9-aa2ba8db3874">

    Fixes #5940

commit 76bcf313413648d14c5b57068ecf252a8df7ecdb
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Wed Jun 19 14:34:11 2024 +0200

    Added a mechanism to reset error boundary on page change. (#5913)

    Previously the error boundary component was re-rendering with the same
    state as long as we stayed in the same router, so for page change inside
    an index container, it would stay on error state.

    The fix is to memorize the location the error page is on during its
    first render, and then to reset the error boundary if it gets
    re-rendered with a different location even in the same index container.

    Fixes : #3592

commit c7e6d6959fbd5a8d94ef4e09539f15b684444582
Author: Ravan <69167444+RamK777-stack@users.noreply.github.com>
Date:   Wed Jun 19 18:00:26 2024 +0530

    Add a ⏎ shortcut on Select options (#5641)

    fixes #5540

    Added onkeyDown to
    1. Create new option and
    2. Move focus to it.

    [screen-capture
    (6).webm](https://github.com/twentyhq/twenty/assets/69167444/ede54ad8-22db-4b09-9617-4d999c6c08c7)

    ---------

    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit 64b456912acae0990dd442bb199fb06e3e29f400
Author: gitstart-twenty <140154534+gitstart-twenty@users.noreply.github.com>
Date:   Wed Jun 19 07:34:42 2024 -0400

    Favicons are being re-rendered on hover (#5849)

    ### Description

    Favicons are being re-rendered on hover

    ### Refs

    #3523

    ### Demo

    https://www.loom.com/share/e3944d940a014283af8c26baac1fed57?sid=e3e96a81-3a54-4969-8602-99c64bb3ffe7

    Fixes #3523

    ---------

    Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
    Co-authored-by: v1b3m <vibenjamin6@gmail.com>
    Co-authored-by: Thiago Nascimbeni <tnascimbeni@gmail.com>
    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit 96da777107cd366fd0d43054c301fa606f214746
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Wed Jun 19 11:54:11 2024 +0200

    Handle no concurrency option (#5952)

    Fix error in local `teamConcurrency must be an integer between 1 and
    1000`

commit d045bcbb94a5027f8e4cafc129056653670a4b16
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Wed Jun 19 10:39:09 2024 +0200

    Add http status to graphql errors (#5896)

    Graphql errors are not properly filtered by our handler. We still
    receive errors like `NOT_FOUND` in sentry while they should be filtered.
    Example
    [here](https://twenty-v7.sentry.io/issues/5490383016/?environment=prod&project=4507072499810304&query=is%3Aunresolved+issue.priority%3A%5Bhigh%2C+medium%5D&referrer=issue-stream&statsPeriod=7d&stream_index=6).

    We associate statuses with errors in our map
    `graphQLPredefinedExceptions` but we cannot retrieve the status from the
    error.

    This PR lists the codes that should be filtered.

    To test:
    - call `findDuplicates` with an invalid id
    - before, server would breaks
    - now the error is simply returned

commit 6fd8dab55243cda291fa45f896caaa9d5e5160b8
Author: martmull <martmull@hotmail.fr>
Date:   Tue Jun 18 18:55:13 2024 +0200

    5582 get httpsapitwentycomrestmetadata objects filters dont work (#5906)

    - Remove filters from metadata rest api
    - add limite before and after parameters for metadata
    - remove update from metadata relations
    - fix typing issue
    - fix naming
    - fix before parameter

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit dbaa787d191f08cd0ff27989e506ee6d636cb9af
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Tue Jun 18 18:40:19 2024 +0200

    website / Fix broken links, slow loading, and prod errors (#5932)

    The code is in a bad state, this is just fixing it but not improving the
    structure

commit 6b1548ebbe0ca51d756704da6c6005c2448046db
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Tue Jun 18 18:38:14 2024 +0200

    Add loader and transition for details page tabs (#5935)

    Closes https://github.com/twentyhq/twenty/issues/5656

    https://github.com/twentyhq/twenty/assets/22936103/3e4beea2-9aa9-4015-bb99-ee22adb53b63

commit cff85615975fcafec26af3e424d6435b9f5d4128
Author: martmull <martmull@hotmail.fr>
Date:   Tue Jun 18 17:34:16 2024 +0200

    Upgrade pg graphql version to 1.5.6 (#5937)

    - update `pg_graphql` version doc
    - update `pg_graphql` version to 1.5.6

commit 38537a39671abd23e12a4fce3ce1759e8f9f9f20
Author: Hanch Han <51526347+hanchchch@users.noreply.github.com>
Date:   Tue Jun 18 18:14:31 2024 +0900

    Add South Korean won to currency codes (#5914)

    Greetings from Seoul! I found this amazing project a few days ago, and
    trying to introduce it to my team. However there is a tiny but
    significant problem, that South Korean won is not available in twenty.

    So I added `KRW` to the enum `CurrencyCode` and the constant
    `SETTINGS_FIELD_CURRENCY_CODES`. I tested it locally and apparently
    works fine.

commit 14abd99bb774171ec1bba56d4c584482858b4f9d
Author: Aditya Pimpalkar <adipimpalkar@gmail.com>
Date:   Tue Jun 18 09:49:33 2024 +0100

    add multiple filters of same FieldMetadataType (#5892)

    fixes: #5378

commit de2b0527a3fc64f9c651a0cd11c718687c3b2c07
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Mon Jun 17 18:09:46 2024 +0200

    Fix secondaryLinks field input (#5911)

    PR https://github.com/twentyhq/twenty/pull/5785/files broke links
    update.

    Also, dropdown "Add link" will be displayed only if a link is already
    added. Otherwise, it should be a normal input.

commit e1bd3a4c5a38f93bebc9f934f0d7180091c35df4
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Mon Jun 17 17:27:19 2024 +0200

    Added and optimized missing RatingFieldDisplay component (#5904)

    The display for Rating field type was missing, I just added it based on
    RatingInput in readonly mode and optimized a bit for performance also.

    Fixes https://github.com/twentyhq/twenty/issues/5900

commit dba0b28eae9063437ebff7ad695e78635378cd1d
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Mon Jun 17 11:54:04 2024 +0200

    Fix verticale line timeline activity (#5894)

    Before

    <img width="400" alt="Capture d’écran 2024-06-17 à 10 23 17"
    src="https://github.com/twentyhq/twenty/assets/22936103/01408d7b-9a6c-4a21-9f08-c8cf304e2ea0">

    After

    <img width="400" alt="Capture d’écran 2024-06-17 à 10 05 39"
    src="https://github.com/twentyhq/twenty/assets/22936103/df384726-bbf9-4828-ad47-d1c91724947d">

commit 1ba7037fdc06941009167b33ffeafe5dac51b808
Author: martmull <martmull@hotmail.fr>
Date:   Mon Jun 17 10:59:29 2024 +0200

    5581 get httpsapitwentycomrestmetadata relations not working (#5867)

    Filtering relations is not allowed
    (see`packages/twenty-server/src/engine/metadata-modules/relation-metadata/dtos/relation-metadata.dto.ts`)
    so we remove filtering for find many relation

    we also fixed some bug in result structure and metadata open-api schema

commit d8034b1f40aebc6eafab9cec6132aa6cb97d1d02
Author: martmull <martmull@hotmail.fr>
Date:   Mon Jun 17 10:17:31 2024 +0200

    5236 expandable list leave options when editing (#5890)

    Fixes https://github.com/twentyhq/twenty/issues/5236
    ## After

    ![image](https://github.com/twentyhq/twenty/assets/29927851/5f0f910c-11b0-40ce-9c59-34e7ce0c2741)

commit d99b9d1d6b11f7961fb4131ba66aa94447779530
Author: Jérémy M <jeremy.magrin@gmail.com>
Date:   Mon Jun 17 09:49:37 2024 +0200

    feat: Enhancements to MessageQueue Module with Decorators (#5657)

    ### Overview

    This PR introduces significant enhancements to the MessageQueue module
    by integrating `@Processor`, `@Process`, and `@InjectMessageQueue`
    decorators. These changes streamline the process of defining and
    managing queue processors and job handlers, and also allow for
    request-scoped handlers, improving compatibility with services that rely
    on scoped providers like TwentyORM repositories.

    ### Key Features

    1. **Decorator-based Job Handling**: Use `@Processor` and `@Process`
    decorators to define job handlers declaratively.
    2. **Request Scope Support**: Job handlers can be scoped per request,
    enhancing integration with request-scoped services.

    ### Usage

    #### Defining Processors and Job Handlers

    The `@Processor` decorator is used to define a class that processes jobs
    for a specific queue. The `@Process` decorator is applied to methods
    within this class to define specific job handlers.

    ##### Example 1: Specific Job Handlers

    ```typescript
    import { Processor, Process, InjectMessageQueue } from 'src/engine/integrations/message-queue';

    @Processor('taskQueue')
    export class TaskProcessor {

      @Process('taskA')
      async handleTaskA(job: { id: string, data: any }) {
        console.log(`Handling task A with data:`, job.data);
        // Logic for task A
      }

      @Process('taskB')
      async handleTaskB(job: { id: string, data: any }) {
        console.log(`Handling task B with data:`, job.data);
        // Logic for task B
      }
    }
    ```

    In the example above, `TaskProcessor` is responsible for processing jobs
    in the `taskQueue`. The `handleTaskA` method will only be called for
    jobs with the name `taskA`, while `handleTaskB` will be called for
    `taskB` jobs.

    ##### Example 2: General Job Handler

    ```typescript
    import { Processor, Process, InjectMessageQueue } from 'src/engine/integrations/message-queue';

    @Processor('generalQueue')
    export class GeneralProcessor {

      @Process()
      async handleAnyJob(job: { id: string, name: string, data: any }) {
        console.log(`Handling job ${job.name} with data:`, job.data);
        // Logic for any job
      }
    }
    ```

    In this example, `GeneralProcessor` handles all jobs in the
    `generalQueue`, regardless of the job name. The `handleAnyJob` method
    will be invoked for every job added to the `generalQueue`.

    #### Adding Jobs to a Queue

    You can use the `@InjectMessageQueue` decorator to inject a queue into a
    service and add jobs to it.

    ##### Example:

    ```typescript
    import { Injectable } from '@nestjs/common';
    import { InjectMessageQueue, MessageQueue } from 'src/engine/integrations/message-queue';

    @Injectable()
    export class TaskService {
      constructor(
        @InjectMessageQueue('taskQueue') private readonly taskQueue: MessageQueue,
      ) {}

      async addTaskA(data: any) {
        await this.taskQueue.add('taskA', data);
      }

      async addTaskB(data: any) {
        await this.taskQueue.add('taskB', data);
      }
    }
    ```

    In this example, `TaskService` adds jobs to the `taskQueue`. The
    `addTaskA` and `addTaskB` methods add jobs named `taskA` and `taskB`,
    respectively, to the queue.

    #### Using Scoped Job Handlers

    To utilize request-scoped job handlers, specify the scope in the
    `@Processor` decorator. This is particularly useful for services that
    use scoped repositories like those in TwentyORM.

    ##### Example:

    ```typescript
    import { Processor, Process, InjectMessageQueue, Scope } from 'src/engine/integrations/message-queue';

    @Processor({ name: 'scopedQueue', scope: Scope.REQUEST })
    export class ScopedTaskProcessor {

      @Process('scopedTask')
      async handleScopedTask(job: { id: string, data: any }) {
        console.log(`Handling scoped task with data:`, job.data);
        // Logic for scoped task, which might use request-scoped services
      }
    }
    ```

    Here, the `ScopedTaskProcessor` is associated with `scopedQueue` and
    operates with request scope. This setup is essential when the job
    handler relies on services that need to be instantiated per request,
    such as scoped repositories.

    ### Migration Notes

    - **Decorators**: Refactor job handlers to use `@Processor` and
    `@Process` decorators.
    - **Request Scope**: Utilize the scope option in `@Processor` if your
    job handlers depend on request-scoped services.

    Fix #5628

    ---------

    Co-authored-by: Weiko <corentin@twenty.com>

commit 605945bd427e033d5c715b907ed1516d82a625d9
Author: Ymir <36711026+Ymirke@users.noreply.github.com>
Date:   Sun Jun 16 09:39:16 2024 +0200

    Added Thai Baht support (#5881)

    Hey, saw Thai Baht support was
    [requested](https://github.com/twentyhq/twenty/issues/5876) and thought
    it was a cool first issue to get to know the project a little bit.

commit 99f4a75b5844a1af03b3dc50d0ffd9d7c901207b
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Fri Jun 14 19:05:48 2024 +0200

    Fix website docs (#5873)

    There was a 500 on the playground and the switch between core and
    metadata

commit 9c8407c197f842c0c03b058a42028c99498b974b
Author: Thomas des Francs <tdesfrancs@gmail.com>
Date:   Fri Jun 14 16:59:42 2024 +0200

    Wrote 0.20 changelog (#5870)

    Created the changelog for 0.2

commit 3d3cef079742e447d2595e2a15e3436f209ea0e3
Author: Michael Gold <goldmichael@gmail.com>
Date:   Fri Jun 14 10:48:29 2024 -0400

    fix: 404 generate API key link (#5871)

    - update api key link in the docs

commit dd2db083ce4d4d5ad7113ac74da8466818dc990f
Author: RobertoSimonini1 <roberto.simonini@endor.studio>
Date:   Fri Jun 14 16:27:16 2024 +0200

    Record horizontal scrolling mobile (#5843)

    I have fixed the scrolling the record container page on mobile making it
    hidden.
    This PR aims to fix #5745

    ---------

    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit eaa2f83eb1e01a90495c3da375983bbc3d3f3544
Author: martmull <martmull@hotmail.fr>
Date:   Fri Jun 14 13:11:15 2024 +0200

    Fix overflow on notes (#5853)

    ##before

    ![image](https://github.com/twentyhq/twenty/assets/29927851/c1784340-0741-4701-b11f-d2cf50fab9fb)

    ##after

    ![image](https://github.com/twentyhq/twenty/assets/29927851/c095eaf1-15c4-4e68-8cff-c175f99856d0)

commit be18ee4d7d4e0056429b573d2564be76b3496553
Author: martmull <martmull@hotmail.fr>
Date:   Fri Jun 14 12:41:55 2024 +0200

    Fix sentry error (#5848)

    Fixes
    https://twenty-v7.sentry.io/issues/5363536663/?environment=prod&project=4507072499810304&query=is%3Aunresolved+issue.priority%3A%5Bhigh%2C+medium%5D&referrer=issue-stream&statsPeriod=7d&stream_index=0

    - handle error properly in twenty-server
    - display backend error message

commit 82741d3b046f9cf0a6715e58064815d118bdb286
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Fri Jun 14 12:38:35 2024 +0200

    Fix error log on message import (#5866)

    Modify #5863 to log the connected account id rather than the message
    channel id to be consistent with the other logs and stringify the error.

commit 28202cc9e051b9fb09e685473841f107bdea38dd
Author: martmull <martmull@hotmail.fr>
Date:   Fri Jun 14 12:36:24 2024 +0200

    Fix workspaceLogo in invite-email (#5865)

    ## Fixes wrong image url in email

    ![image](https://github.com/twentyhq/twenty/assets/29927851/5fb1524b-874d-4723-8450-0284382bbeb3)

    ## Done
    - duplicates and adapt `getImageAbsoluteURIOrBase64` from `twenty-front`
    in `twenty-email`
    - send `SERVER_URL` to email builder

commit a2e89af6b26aa115760d96fd90b6b54e9646f7ab
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Fri Jun 14 12:35:23 2024 +0200

    Collapsible menu (#5846)

    A mini PR to discuss with @Bonapara tomorrow

    Separating remote objects from others and making the menu collapsible
    (style to be changed)
    <img width="225" alt="Screenshot 2024-06-12 at 23 25 59"
    src="https://github.com/twentyhq/twenty/assets/6399865/b4b69d36-6770-43a2-a5e8-bfcdf0a629ea">

    Biggest issue is we don't use local storage today so the collapsed state
    gets lost.
    I see we have localStorageEffect with recoil. Maybe store it there?
    Seems easy but don't want to introduce a bad pattern.

    Todo:
    - style update
    - collapsible favorites
    - persistent storage

commit 8d8bf1c1282cdbf748e8a854c925df58815a9cda
Author: Siddhant Rai <47355538+siiddhantt@users.noreply.github.com>
Date:   Fri Jun 14 15:11:49 2024 +0530

    fix: text field overflow beyond cell limits (#5834)

    - fixes #5775

    https://github.com/twentyhq/twenty/assets/47355538/9e440018-ec1e-4faa-a9f3-7131615cf9f1

    ---------

    Co-authored-by: Charles Bochet <charles@twenty.com>
    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit 4603999d1c0e968ed6c4f583d5ccc6d834970744
Author: Aditya Pimpalkar <adipimpalkar@gmail.com>
Date:   Fri Jun 14 10:23:37 2024 +0100

    Support orderBy as array (#5681)

    closes: #4301

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 85fd801480ecceb44429139585d0e10c0e70d909
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Fri Jun 14 09:36:39 2024 +0200

    Add log for errors on message import (#5863)

    As per title :)

commit 39af374de00dfc0f4d27ec8cfb8736c4a3471c8e
Author: Weiko <corentin@twenty.com>
Date:   Thu Jun 13 19:04:53 2024 +0200

    fix timeline activity pagination overflow (#5861)

    ## Before
    <img width="250" alt="Screenshot 2024-06-13 at 18 51 56"
    src="https://github.com/twentyhq/twenty/assets/1834158/d6c7f5fa-3cc7-48bc-a711-29345e93af92">

    ## After
    <img width="284" alt="Screenshot 2024-06-13 at 18 51 41"
    src="https://github.com/twentyhq/twenty/assets/1834158/25029e0a-c1b0-4458-b715-dbab217eeee0">

commit 00d22947284bcda2f1efb5ad1e8f70fddf1feb33
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Thu Jun 13 18:56:55 2024 +0200

    Add label to mocked connections (#5858)

    <img width="865" alt="Capture d’écran 2024-06-13 à 17 48 03"
    src="https://github.com/twentyhq/twenty/assets/22936103/2d313448-fbd5-4ff1-a65b-afd4df86117a">

commit 65fc83a763516e66ba2820723636241c9cfbaa5c
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Thu Jun 13 18:28:02 2024 +0200

    Added a fallback default record chip generator (#5860)

    The record chip generator context was missing a edge were a new field of
    type relation is created and not yet in the metadata so no chip
    generator function can be precomputed.

    For now I added a fallback default chip generator, to prevent any bug,
    but we might want to add a new chip generator function while creating
    the new field ?

commit 582653f9df59446d98199ad6dc893d41a89379b2
Author: Marie <51697796+ijreilly@users.noreply.github.com>
Date:   Thu Jun 13 17:39:46 2024 +0200

    Bump to version 0.20.0 (#5857)

commit 93c17a8a5bb3cea5d7ed8582bf04f44b2f3b57f1
Author: Weiko <corentin@twenty.com>
Date:   Thu Jun 13 17:39:31 2024 +0200

    Remove timelineActivity featureFlag (#5856)

commit 21dbd6441a4b2b1f7c2209fc59633905b9eaa8e5
Author: kikoleitao <92337535+kikoleitao@users.noreply.github.com>
Date:   Thu Jun 13 16:22:51 2024 +0100

    feat: implement row re-ordering via drag and drop (#4846) (#5580)

    # Context

    Currently, the Twenty platform incorporates "positions" for rows on the
    backend, which are functional within the Kanban view. However, this
    advantageous feature has yet to be leveraged within list views.

    # Feature Proposal

    ## Implement Row-Reordering via Drag-and-Drop on Frontend (#4846)

    - This PR addresses the implementation of row reordering via
    Drag-and-Drop on frontend. The objective is to enrich the list view
    functionality by introducing a grip that dynamically appears upon
    hovering over the left space preceding the checkbox container. This grip
    empowers users to effortlessly reposition rows within the list.

    #### Proposal Highlights:

    - **Enhanced User Interaction**: Introduce a draggable grip to
    facilitate intuitive row reordering, enhancing user experience and
    productivity.
    - **Preservation of Design Aesthetics**: By excluding the grip from the
    first row and maintaining the left gap, we uphold design integrity while
    providing enhanced functionality.
    - **Consistency with Existing Features**: Align with existing
    drag-and-drop functionalities within the platform, such as Favorites
    re-ordering or Fields re-ordering in table options, ensuring a seamless
    user experience.

    ## Implementation Strategy

    ### Grip Implementation:

    - Add an extra column to the table (header + body) to accommodate the
    grip cell, which displays the IconListViewGrip when its container is
    hovered over.
    - Ensure the preceding left-space is maintained by setting the
    corresponding width for this column and removing padding from the table
    container (while maintaining padding in other page elements and the
    Kanban view for coherence).

    ### Row Drag and Drop:

    - Implement row drag-and-drop functionality using draggableList and
    draggableItem, based on the existing logic in the KanbanView for row
    repositioning.
    - Create a draggableTableBody and apply it to the current
    RecordTableBody (including modal open triggering - if dragging while
    sorting exists).
    - Apply the draggableItem logic to RecordTableRow.

    ### Sorting Modal Implementation:

    - Reuse the ConfirmationModel for the removeSortingModal.
    - Create a new state to address the modal.
    - Implement sorting removal logic in the corresponding modal file.

    ## Outcome

    - The left-side margin is preserved.
    - The grip appears upon hovering.
    - Dragging a row gives it and maintains an aesthetic appearance.
    - Dropping a row updates its position, and the table gets a new
    configuration.
    - If sorting is present, dropping a row activates a modal. Clicking on
    the "Remove Sorting" button will deactivate any sorting (clicking on
    "Cancel" will close the modal), and the table will revert to its default
    configuration by position, allowing manual row reordering. Row
    repositioning will not occur if sorting is not removed.
    - The record table maintains its overall consistency.
    - There are no conflicts with DragSelect functionality.

    https://github.com/twentyhq/twenty/assets/92337535/73de96cc-4aac-41a9-b4ec-2b8d1c928d04

    ---------

    Co-authored-by: Vasco Paisana <vasco.paisana@tecnico.ulisboa.pt>
    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 81c4939812f86df3aa2f0cef3a046b5d7fc386d1
Author: Weiko <corentin@twenty.com>
Date:   Thu Jun 13 15:22:15 2024 +0200

    Fix timeline activity missing updated fields (#5854)

    ## Before
    <img width="883" alt="Screenshot 2024-06-13 at 14 48 05"
    src="https://github.com/twentyhq/twenty/assets/1834158/0e72ead1-2d59-4ee3-af3b-dfdd593b7f2e">

    ## After
    <img width="908" alt="Screenshot 2024-06-13 at 14 48 14"
    src="https://github.com/twentyhq/twenty/assets/1834158/00e32ddf-e40d-4cc9-a80a-9f5b76bd377a">

commit e0722545551ee44e98a7db8eb47086d3d71445e1
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Thu Jun 13 14:18:10 2024 +0200

    Fixed new date time formatting util (#5852)

    The new date time formatting util made for performance optimization
    missed two things :
    - Padding 0 for hours and minutes with 1 digit only.
    - Correctly parsing the day of the month (now uses JS Date native
    getDate() instead of slicing the ISO String)

commit 6f65fa295b8006267b6421e36ecc3478c0024361
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Thu Jun 13 12:43:13 2024 +0200

    Added RecordValue use-context-selector to settings field's logic (#5851)

    In the settings part of the app, where display fields are used as in
    table cell and board cards, we didn't have the new context selector
    logic implemented, due to the recent performance optimization.

commit b26fd00a4086ac03761fe47decd899a040cd0c47
Author: martmull <martmull@hotmail.fr>
Date:   Thu Jun 13 11:47:00 2024 +0200

    5663 i should be able to accept an invite even if i have an inactive workspace (#5839)

    - make invitation and reset password available on every page
    - add a sleep after setKeyPair as tokens are sometimes not updated when
    redirecting to Index
    - refactor sleep

commit d93c2d64088e59928994e68ffc6177d288b2f063
Author: Jovan <71730487+jovanmedford@users.noreply.github.com>
Date:   Thu Jun 13 05:30:13 2024 -0400

    #5761 Add "No XXX found" title to filtered empty state (#5838)

    Issue: #5761

    Changes:
    - Use `useFindManyRecords` in `RecordTableWithWrappers.tsx` to determine
    if any records exist for that object
    - Add `hasUnfilteredRecords` prop to `RecordTableEmptyState.tsx`.

    This changes to empty state title, but I'm guessing that we'll need to
    change the button text and subheading as well you guys can let me know
    what you think. If this works I can go on to do those next, thanks!

    ---------

    Co-authored-by: Thomas Trompette <thomas.trompette@sfr.fr>

commit 7c1d9aebb963d8afe5aca20b09ac362b0a3fe138
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Thu Jun 13 11:17:17 2024 +0200

    Removed unnecessary on mouse enter for soft focus (#5850)

    In RecordTableCellContainer, I just removed onMouseEnter event handler
    that was being triggered when we used keyboard soft focus move.

    It's not necessary to have it because we already listen on mouse move
    which is matching our use case where we only want soft focus to move
    when mouse move and not when the cursor stays on top of a cell.

commit f825bea07117f4aa10e44fe176d853e9b11a5127
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Thu Jun 13 07:53:28 2024 +0200

    5629 update blocklist for messaging v2 (#5756)

    Closes #5629

    - Add subdomain support in blocklist (if @example.com is blocked, every
    subdomain will be blocked)

commit 374237a9888a35206b40aa9a998c3873e39f5dd8
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Wed Jun 12 21:54:33 2024 +0200

    Refacto rest api, fix graphl playground, improve analytics (#5844)

    - Improve the rest api by introducing startingAfter/endingBefore (we
    previously had lastCursor), and moving pageInfo/totalCount outside of
    the data object.
    - Fix broken GraphQL playground on website
    - Improve analytics by sending server url

commit 04edf2bf7b22e06a67d042c039f8440b6cdacf9f
Author: Jérémy M <jeremy.magrin@gmail.com>
Date:   Wed Jun 12 21:17:31 2024 +0200

    feat: add resolve absolute path util (#5836)

    Add a new util called `resolveAbsolutePath` to allow providing absolute
    path for environment variable like `STORAGE_LOCAL_PATH`.
    If the path in the env start with `/` we'll not prefix it with
    `process.cwd()`.

    Also we're using a static path for the old `db_initialized` file now
    named `db_status` and stop using the env variable for this file as this
    one shouldn't ne stored in the `STORAGE_LOCAL_PATH`.

    Fix #4794

    ---------

    Co-authored-by: Quentin Galliano <qgalliano@gmail.com>

commit 3986824017767a09e38b12fee138dd497a240a9a
Author: martmull <martmull@hotmail.fr>
Date:   Wed Jun 12 21:13:18 2024 +0200

    5623 add an inviteteam onboarding step (#5769)

    ## Changes
    - add a new invite Team onboarding step
    - update currentUser.state to currentUser.onboardingStep

    ## Edge cases
    We will never display invite team onboarding step
    - if number of workspaceMember > 1
    - if a workspaceMember as been deleted

    ## Important changes
    Update typeorm package version to 0.3.20 because we needed a fix on
    `indexPredicates` pushed in 0.3.20 version
    (https://github.com/typeorm/typeorm/issues/10191)

    ## Result
    <img width="844" alt="image"
    src="https://github.com/twentyhq/twenty/assets/29927851/0dab54cf-7c66-4c64-b0c9-b0973889a148">

    https://github.com/twentyhq/twenty/assets/29927851/13268d0a-cfa7-42a4-84c6-9e1fbbe48912

commit 2fdd2f4949cddec3b88d91b491f20a5f64dc6c05
Author: Quentin G <qgalliano@gmail.com>
Date:   Wed Jun 12 21:11:58 2024 +0200

    Fix/release workflow (#5802)

    Here is a fix for https://github.com/twentyhq/twenty/issues/5163

    I tested it on another repo and should work as intended this time
    arround.

    I've created two workflows
    - One that creates a PR
    - The second that watch PR merge with specific labels
    - I also check the author of the PR to make sure it was created by a bot

    You can now disable the creation of the a draft release

    ---------

    Co-authored-by: Charles Bochet <charles@twenty.com>

commit 4a7a8c72ef2030bad0163bcd1bd42e5daf1b6b4f
Author: Charles Bochet <charles@twenty.com>
Date:   Wed Jun 12 20:38:44 2024 +0200

    Fix typing on main

commit 03b3c8a67ac24fd660876929637b59265dfa76b7
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Wed Jun 12 18:36:25 2024 +0200

    Refactored all FieldDisplay types for performance optimization (#5768)

    This PR is the second part of
    https://github.com/twentyhq/twenty/pull/5693.

    It optimizes all remaining field types.

    The observed improvements are :
    - x2 loading time improvement on table rows
    - more consistent render time

    Here's a summary of measured improvements, what's given here is the
    average of hundreds of renders with a React Profiler component. (in our
    Storybook performance stories)

    | Component | Before (µs) | After (µs) |
    | ----- | ------------- | --- |
    | TextFieldDisplay | 127 | 83 |
    | EmailFieldDisplay | 117 | 83 |
    | NumberFieldDisplay | 97 | 56 |
    | DateFieldDisplay | 240 | 52 |
    | CurrencyFieldDisplay | 236 | 110 |
    | FullNameFieldDisplay | 131 | 85 |
    | AddressFieldDisplay | 118 | 81 |
    | BooleanFieldDisplay | 130 | 100 |
    | JSONFieldDisplay | 248 | 49 |
    | LinksFieldDisplay | 1180 | 140 |
    | LinkFieldDisplay | 140 | 78 |
    | MultiSelectFieldDisplay | 770 | 130 |
    | SelectFieldDisplay | 230 | 87 |

commit 007e0e8b0ebe7f7e8f72d0abaf6154216035fa40
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Wed Jun 12 17:30:59 2024 +0200

    Fix event value elipsis (#5840)

    <img width="400" alt="Capture d’écran 2024-06-12 à 14 41 08"
    src="https://github.com/twentyhq/twenty/assets/22936103/12d333a9-16ce-45f3-a1eb-060bf77bae96">
    <img width="400" alt="Capture d’écran 2024-06-12 à 16 47 53"
    src="https://github.com/twentyhq/twenty/assets/22936103/6e154936-82d6-4e19-af4c-e6036b01dd04">
    <img width="400" alt="Capture d’écran 2024-06-12 à 16 52 48"
    src="https://github.com/twentyhq/twenty/assets/22936103/6440af6b-ea40-4321-942a-a6e728a78104">

commit 732e8912da32b6a18c0392df760240cebd4990fe
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Wed Jun 12 16:31:07 2024 +0200

    Added Linaria for performance optimization (#5693)

    - Added Linaria to have compiled CSS on our optimized field displays
    - Refactored mocks for performance stories on fields
    - Refactored generateRecordChipData into a global context, computed only
    when we fetch object metadata items.
    - Refactored ChipFieldDisplay
    - Refactored PhoneFieldDisplay

commit 30d3ebc68a3dac225fb1cb41d3af31f562798745
Author: martmull <martmull@hotmail.fr>
Date:   Wed Jun 12 16:25:04 2024 +0200

    Fix missing cursor on rest api (#5841)

    ## Before

    ![image](https://github.com/twentyhq/twenty/assets/29927851/fc3bad2d-5238-4afa-b528-409fbff3902c)

    ## After

    ![image](https://github.com/twentyhq/twenty/assets/29927851/418174c1-aafb-4ea2-a936-50c03ea17764)

    ![image](https://github.com/twentyhq/twenty/assets/29927851/03439033-db6b-44b0-9613-f766babc1d2d)

    ![image](https://github.com/twentyhq/twenty/assets/29927851/f0e5e998-3c61-437d-863f-7289609d0d30)

commit ad6547948bba2c1140fc6f9d1c076319aa7523db
Author: Weiko <corentin@twenty.com>
Date:   Wed Jun 12 16:21:30 2024 +0200

    Activity timeline refactoring followup (#5835)

    Following https://github.com/twentyhq/twenty/pull/5697, addressing
    review

commit bd22bfce2ed3f80914e86e2a996bbb44391b0f5b
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Wed Jun 12 12:35:46 2024 +0200

    Push event for user signup (#5837)

    Need to setup Twenty as a CRM for Twenty the Twenty team

commit 5fe2fc2778b30b8db18c47faa646d6d1386b76b4
Author: Juan Martín Miñarro <80736129+Juojo@users.noreply.github.com>
Date:   Wed Jun 12 05:24:38 2024 -0300

    Add 8px margin to the left of the Tasks' tab list (#5833)

    I implemented the margin requested on #5827

    ---------

    Co-authored-by: Thomas Trompette <thomas.trompette@sfr.fr>

commit 5ec98b5ac34c67af0ad9bd8a0d9239e2440e2a14
Author: Charles Bochet <charles@twenty.com>
Date:   Wed Jun 12 08:21:35 2024 +0200

    Fix not possible to read message from other workspaceMember

commit a0d9fdb3de824eece3ca1e6fe96c2035b388033e
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Wed Jun 12 08:11:48 2024 +0200

    Fix bugs and telemetry (#5832)

    Bugfix 1:
    <img width="491" alt="Screenshot 2024-06-12 at 07 19 42"
    src="https://github.com/twentyhq/twenty/assets/6399865/e3ad2771-4edd-453d-9d85-f429177dfd15">

    Bugfix 2:
    <img width="259" alt="Screenshot 2024-06-12 at 07 47 02"
    src="https://github.com/twentyhq/twenty/assets/6399865/2f82c90e-2180-4290-b12e-e72910fb108c">

    Change 3:
    I remove the "telemetry anonymization enabled" parameter as it was
    misleading, we were anonymization ids but still forwarding the workspace
    name which is imo more sensitive than an ID

commit 7d068095cdb9c3d3012c8281b49cf4d99a55344e
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Tue Jun 11 22:30:38 2024 +0200

    Fix of board request fix PR (#5829)

    Fix again board requests as first merged PR appears to have missing
    commits / code. https://github.com/twentyhq/twenty/pull/5819

commit a57e2512085522eef3862813add5914e65fb321b
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Tue Jun 11 19:06:37 2024 +0200

    Fix docs build in CI (#5826)

commit be96c68416cee67cfb342a561eae62751eeefd66
Author: Weiko <corentin@twenty.com>
Date:   Tue Jun 11 18:53:28 2024 +0200

    POC timeline activity (#5697)

    TODO:
    - remove WorkspaceIsNotAuditLogged decorators on activity/activityTarget
    to log task/note creations
    - handle attachments
    -  fix css and remove unnecessary styled components or duplicates

commit 64b8e4ec4d344d5704f803b6aa9cdd67c5bbb7d4
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Tue Jun 11 18:52:38 2024 +0200

    Fix access token refresh (#5825)

    In `messaging-gmail-messages-import.service`, we were refreshing the
    access token before each query but we were passing the old access token
    to `fetchAllMessages`.
    I modified the function to query the updated connectedAccount with the
    new access token.
    This will solve the 401 errors we were getting in production.

commit 3328666308d1138a96cf66508583b49a1feef432
Author: RobertoSimonini1 <roberto.simonini@endor.studio>
Date:   Tue Jun 11 18:39:24 2024 +0200

    Increased inline relation field hover surface (#5809)

    I increased the inline relation of the relations fields, now the edit
    pen is visible when hovering the icon and not only the label.
    this aims to fix: #5662

commit 6d7782eb5a7d8ba421a207a82148b623430c396e
Author: marteenaf <120792086+marteenaf@users.noreply.github.com>
Date:   Tue Jun 11 17:24:40 2024 +0100

    Align field values with fixed width for field key.  (#5821)

    Made the alignment consistent with the field panel. This uses 90px as
    the key label width.

    **Issue:** #5730

    **Changes:**
    - Add a label width of 90 to FieldContext Provider in useFieldContext
    function
    - Add a label width of 90 to ActivityTargetsInlineCell component

    **Screen recording form local testing:**

    https://github.com/twentyhq/twenty/assets/120792086/e150530b-4163-4a69-9bd5-119a2f202d4f

    ---------

    Co-authored-by: Thomas Trompette <thomas.trompette@sfr.fr>

commit 3440889ad0f712883c94d3dd7b9c9316881ad7fd
Author: RobertoSimonini1 <roberto.simonini@endor.studio>
Date:   Tue Jun 11 17:39:51 2024 +0200

    made sidebar always visible on settings page (#5823)

    I made the sidebar/menu always visible on settings page even if the
    navigationDrawerOpen is false
    This aims to fix #5811

commit b84042ddbb1b744d4b8647702d877ba99ee94d80
Author: Marie <51697796+ijreilly@users.noreply.github.com>
Date:   Tue Jun 11 15:53:17 2024 +0200

    Display and update fields from fromManyObjects relations in Show card (#5801)

    In this PR, we implement the display and update of fields from
    fromManyObjects (e.g update Employees for a Company).

    Product requirement
    - update should be triggered at each box check/uncheck, not at lose of
    focus

    Left to do in upcoming PRs
    - add the column in the table views (e.g. column "Employees" on
    "Companies" table view)
    - add "Add new" possibility when there is no records (as is currently
    exists for "one" side of relations:)
    <img width="374" alt="Capture d’écran 2024-06-10 à 17 38 02"
    src="https://github.com/twentyhq/twenty/assets/51697796/6f0cc494-e44f-4620-a762-d7b438951eec">

    - update cache after an update affecting other records (e.g "Listings"
    have one "Person"; if listing A belonged to Person A but then we
    attribute listing A to Person B, Person A is no longer owner of Listing
    A. For the moment that would not be reflected immediatly leading, to
    potential false information if information is accessed from cache)
    - try to get rid of the glitch - we also have it on the task page
    example. (probably) due to the fact that we are using a recoil state to
    read, update then re-read

    https://github.com/twentyhq/twenty/assets/51697796/54f71674-237a-4946-866e-b8d96353c458

commit 4994a9c3a9ec581c5af803a8646af6c3bd54f031
Author: brendanlaschke <brendan.laschke@googlemail.com>
Date:   Tue Jun 11 15:31:48 2024 +0200

    Api docs remove Relations from Post & Patch (#5817)

    * Remove relations where they cannot be used
    * Removed duplicated schema for findMany
    * Reuse schema for Relation variant to reduce size of sent json object

    closes #5778

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
    Co-authored-by: martmull <martmull@hotmail.fr>

commit 58fb86f2c337775f8e4b3c47622a7313ad7ef08a
Author: Kyriaki Darivaki <115654088+kiridarivaki@users.noreply.github.com>
Date:   Tue Jun 11 16:24:34 2024 +0300

    Added support for Links filtering (#5785)

    References #5741

    ---------

    Co-authored-by: kiridarivaki <k.darivaki03@gmail.com>

commit 63578e6480eefb3af444ca41404a6a850921f882
Author: Siddhant Rai <47355538+siiddhantt@users.noreply.github.com>
Date:   Tue Jun 11 18:54:23 2024 +0530

    fix: calendar tile fonts underlined (#5820)

    - fixes #5797

commit 5c15fcd249bc298b79a55eaa296528d0bcc6b8ea
Author: martmull <martmull@hotmail.fr>
Date:   Tue Jun 11 14:54:02 2024 +0200

    5805 typing issue in rest api (#5818)

    Fixed types for:
    - uuid
    - email
    - datetime
    - date
    - number
    - currency.amountMicros
    - select
    - multiSelect

    ## Before

    ![image](https://github.com/twentyhq/twenty/assets/29927851/4bfa3a6d-a26f-47e4-a46f-7a5582825482)

    ## After

    ![image](https://github.com/twentyhq/twenty/assets/29927851/0bbab32f-4172-4525-91d1-76c37f299ac0)

commit 710291238ead27953992e4f92bc8b73cebba6776
Author: TheUnspokenFifth <124464818+TheUnspokenFifth@users.noreply.github.com>
Date:   Tue Jun 11 04:54:19 2024 -0700

    Inline link chips cropped (#5810)

    Issue: [#5654](https://github.com/twentyhq/twenty/issues/5654)

    Changed chip vertical padding from 3px to 1px. This resulted in vertical
    size changing from 24px to 20px.

    ![image](https://github.com/twentyhq/twenty/assets/124464818/aaed1e57-91e3-4d98-91b5-5dd10b857c9f)

    ![image](https://github.com/twentyhq/twenty/assets/124464818/c16223b5-35f4-40b0-b0ad-828973bb47a2)

    ---------

    Co-authored-by: ktang520 <ktang520@gmail.com>
    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
    Co-authored-by: Sage Bain <47053579+Shyesta@users.noreply.github.com>
    Co-authored-by: Shyesta <mrsixpaths@aol.com>

commit 07d07ff8764257355db5421b52bcff07f686e8bf
Author: Shashank Vishwakarma <shashank000s4@gmail.com>
Date:   Tue Jun 11 16:29:31 2024 +0530

    Fixed: Select fields now selects on pressing the enter key (#5576)

    Now while pressing the `Enter` button, the select field selects the
    relevant option.

    - Added a `handleKeyDown` function to set the `persistField` with the
    selected option.
    - Added an `onKeyDown` event on `DropdownMenuSearchInput` component, to
    trigger `handleKeyDown` when `Enter` is pressed.
    - Fixes: #5556

    ---------

    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit 8a88bf41dd1a8332eaea8b526ecba08ac713c901
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Tue Jun 11 12:31:50 2024 +0200

    Fixed soft focus stuck (#5639)

    Soft focus could be stuck when exiting edit mode, in some cases it would
    prevent to have soft focus if just moving the mouse into a cell.

commit 25a38dc6936b85a02d5c33af5c3e6fb9837e1ee8
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Tue Jun 11 12:29:33 2024 +0200

    Added one request per column on board. (#5819)

    - Changed to one find many request per column on board.

commit 9307d206c5af33cac92858ed977e58bb0b7577b1
Author: martmull <martmull@hotmail.fr>
Date:   Tue Jun 11 12:08:21 2024 +0200

    Add authentication optional api url parameter (#5803)

commit af8c6373552fd64a93c3750722589e94048c6321
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Tue Jun 11 10:18:08 2024 +0200

    Temporary fix README (#5814)

    Emergency fix for broken readme images

commit ff1bca1816c8ce678846393c27a0c8a53a987cd0
Author: Ady Beraud <102751374+ady-beraud@users.noreply.github.com>
Date:   Tue Jun 11 10:45:17 2024 +0300

    Docs modifications (#5804)

    - Fixes #5504
    - Fixes #5503
    - Return 404 when the page does not exist
    - Modified the footer in order to align it properly
    - Removed "noticed something to change" in each table of content
    - Fixed the URLs of the edit module
    - Added the edit module to Developers
    - Fixed header style on the REST API page.
    - Edited the README to point to Developers
    - Fixed selected state when clicking on sidebar elements

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 3c5a4ba692ae0dfb595887bb74b3b836f52a8cd2
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Sun Jun 9 22:46:11 2024 +0200

    Handle Network errors in messaging sync (#5795)

    In this PR, I'm doing 2 things:
    - refresh connectedAccount token on message-list-fetch. It's currently
    only refresh while doing the messages-import. However messages-import
    stage are only triggered if new messages are detected (which could take
    days or week depending of the messageChannel activity). We should also
    refresh it while trying to fetch the list
    - handle Unhandled Gmail error code 500 with reason "backendError".
    These can occur on gmail side. In this case, we just retry later.

commit 01c0378b7a91c374af2d3ff2a7ae065d479092a1
Author: Charles Bochet <charles@twenty.com>
Date:   Sun Jun 9 09:59:55 2024 +0200

    Handle Network errors in messaging sync

commit e4a4499b7994841f25458aa513066dc416a5b206
Author: Charles Bochet <charles@twenty.com>
Date:   Sun Jun 9 01:27:43 2024 +0200

    Fix messaging sharing inconsitency

commit 9ebf7a61ab4e2436bb287e0e51a57f8d658bc44d
Author: Charles Bochet <charles@twenty.com>
Date:   Sun Jun 9 00:56:59 2024 +0200

    Remove threadId defined assertion as it could not be in messaging sync

commit f2cd65557ebd2c4f2a80364ab2fbbfa1605a38bd
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Sun Jun 9 00:15:12 2024 +0200

    Remove messageId defined assertion as it could not be in messaging sync (#5784)

    Instead, we will log but ignore the message

commit d4610774fa7d60ff19ac671d317233fba5ccae43
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Sun Jun 9 00:10:18 2024 +0200

    Fix unclosable cell (#5776)

    In some cases we couldn't open a table cell if the soft focus was still
    on another.

commit 32804ec2965859073a92aa71a22d347cebf5352e
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Sun Jun 9 00:06:44 2024 +0200

    Disable prefetching on contributors page (website) (#5783)

    Disable prefetching on contributors list as it spams the server

commit d7ce42cff75c15da1ce9d1f2096bce923bc08cc2
Author: Charles Bochet <charles@twenty.com>
Date:   Sat Jun 8 23:46:52 2024 +0200

    Throw exception when error code is not defined in messaging import

commit a79b25640901071d822dd06cbe35898f52480b1a
Author: Charles Bochet <charles@twenty.com>
Date:   Sat Jun 8 23:18:17 2024 +0200

    Throw exception when error code is not defined in messaging import

commit afac4de67997a91ea8057261074670f461f22402
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Sat Jun 8 22:59:59 2024 +0200

    Throw exception when an unknown error is caught on messaging sync (#5782)

    As per title for this one ;)

commit 7f9fdf3ff68529cdc1ef2c6213f06b19300f0145
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Sat Jun 8 11:07:36 2024 +0200

    Fix performance issue mail (#5780)

    In this PR, I'm mainly doing two things:
    - uniformizing messaging-messages-import and
    messaging-message-list-fetch behaviors (cron.job and job)
    - improving performances of these cron.jobs by not triggering the jobs
    if the stage is not relevant
    - making sure these jobs have same signature (workspaceId +
    messageChannelId)

commit 520a883c7379d76dce9ed6620b7db2647dc91b16
Author: Pacifique LINJANJA <pacilinja2@gmail.com>
Date:   Fri Jun 7 17:23:32 2024 +0200

    Fix the "Delete" action on the Kaban view (#5646)

    # This PR

    - Fixes #5520
    - Created a shared confirmation modal component for the `ContextMenu`
    and the `ActionBar` components to avoid code repetition - with its
    storybook file

    Looking forward to getting feedback @charlesBochet

commit e9cf4497067ee66d5f74c13cab4b8db0a1ada3cd
Author: RobertoSimonini1 <roberto.simonini@endor.studio>
Date:   Fri Jun 7 17:09:09 2024 +0200

    Search dialog fullscreen on mobile (#5765)

    I changed the visibility of the search dialog to make it full screen on
    mobile, this should already be ok but I couldn't try it on mobile, so I
    just used devtools, if I need to do something else on this PR just tell
    me :)
    This PR aims to fix: #5746

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 908990315d0056f0b67778971d17e32d0b137667
Author: brendanlaschke <brendan.laschke@googlemail.com>
Date:   Fri Jun 7 14:53:12 2024 +0200

    Datamodel overview improvements (#5771)

    closes #5586
    <img width="707" alt="Bildschirmfoto 2024-06-07 um 14 05 39"
    src="https://github.com/twentyhq/twenty/assets/48770548/af5fa200-d71b-41ed-9478-35becfc306a3">

commit 1208fed7b30eb9dd97e5d044b9d8943964da65cd
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Fri Jun 7 14:45:24 2024 +0200

    Add endpoint to create postgres credentials (#5767)

    First step for creating credentials for database proxy.

    In next PRs:
    - When calling endpoint, create database Postgres on proxy server
    - Setup user on database using postgresCredentials
    - Build remote server on DB to access workspace data

commit e478c68734ccc15569bd129469752c1d5944334f
Author: RobertoSimonini1 <roberto.simonini@endor.studio>
Date:   Fri Jun 7 11:23:33 2024 +0200

    Switched current Sort Button with same used for filters and options ones (#5764)

    I changed the Sort button used in the Header using
    StyledHeaderDropdownButton component (the same used for Filter and
    Options') instead of LightButton.
    This PR aims to fix the issue: #5743

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit c76bc4729d2ec29dcb5b07c43b0e333cc2ab4467
Author: Hinson Chan <yhc3141@gmail.com>
Date:   Thu Jun 6 07:41:22 2024 -0700

    [4725] Inverted Variants of buttons (#5671)

    Resolves #4725

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 9567103d5fb0c263564d78e3a1c101e455b8b7b6
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Thu Jun 6 11:00:46 2024 +0200

    Remove check unique position (#5760)

    Currently position can be the same for records displayed in a board
    view.
    Removing unicity check until we find a new startegy.

commit 9f6a6c3282c158cbfecf1f63df97c2bbdb715bf8
Author: martmull <martmull@hotmail.fr>
Date:   Wed Jun 5 18:16:53 2024 +0200

    5622 add a syncemail onboarding step (#5689)

    - add sync email onboarding step
    - refactor calendar and email visibility enums
    - add a new table `keyValuePair` in `core` schema
    - add a new resolved boolean field `skipSyncEmail` in current user

    https://github.com/twentyhq/twenty/assets/29927851/de791475-5bfe-47f9-8e90-76c349fba56f

commit fda0d2a1708a3b3f48b795bd2f3e64f928a37cb1
Author: Weiko <corentin@twenty.com>
Date:   Wed Jun 5 18:14:09 2024 +0200

    Fix edit button missing in activity editor (#5757)

    ## Context
    Fixing `setIsFocused is not a function` and the fact that edit buttons
    were not showing up anymore.
    A new FieldFocusContextProvider has been introduced and added to
    RecordInlineCell but not ActivityTargetsInlineCell. This should fix the
    issue.

    <img width="523" alt="Screenshot 2024-06-05 at 17 42 07"
    src="https://github.com/twentyhq/twenty/assets/1834158/1c1f919e-3829-4e40-b573-3b1b75b7c16f">

commit 89f914ebf846b995733abc30dee4973905e3134e
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Wed Jun 5 17:01:13 2024 +0200

    Improve csv import (#5753)

    This is a small PR to improve the design of our CSV import.

    I noticed the back button that was implemented in a recent PR #5625 was
    broken and would need to be fixed (e.g. try to come back to the very
    first upload step from the sheet selection step). cc @shashankvish0010
    if you want to give a stab at fixing your PR that'd be amazing, thanks!

commit e9d3ed99ca30dab4808eddc0e87e364eba018ba0
Author: martmull <martmull@hotmail.fr>
Date:   Wed Jun 5 16:35:14 2024 +0200

    5078 ability to invite team members (#5750)

    ## Added features
    - update team member setting page
    - add a section to send invitation by email
    - add a new invitation email
    - update email font to 'Trebuchet MS' as Google Inter font is not
    working, we need to use a web safe font
    https://templates.mailchimp.com/design/typography/

    ## Demo

    https://github.com/twentyhq/twenty/assets/29927851/c731d883-1599-4281-87e3-0671f36994ae

    ## Invitation Email

    ![image](https://github.com/twentyhq/twenty/assets/29927851/d569fc64-fa0c-4769-a3dd-1193a12b495c)

commit 3c4b497846a1f85a3d24f70e1d94b1e171267ceb
Author: Leo157 <76474110+wcgzorro@users.noreply.github.com>
Date:   Wed Jun 5 22:15:00 2024 +0800

    fix:person head photo (#5749)

    before:

    https://github.com/twentyhq/twenty/assets/76474110/2d9d3e60-886e-4ad3-a1a3-b9484e49791c

    after:

    https://github.com/twentyhq/twenty/assets/76474110/877a15e6-ca72-450a-b25c-b4b323656d7f

commit 126d9ef2e6b5eaed65cdf000dbb0d13c6d84d412
Author: Weiko <corentin@twenty.com>
Date:   Wed Jun 5 15:26:27 2024 +0200

    Bump versions to 0.12.2 (#5751)

commit 5164c7fd3c502bc9cb22ec9d1b6fd27e699a21b4
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Wed Jun 5 11:07:48 2024 +0200

    Update icon and fix relation creation (#5742)

    A minor fix (update icon and fix relation creation when creating a
    relation in right drawer)

commit 6d869297b558b55a0a7077ac7280ef9f0acfdd2c
Author: Marie <51697796+ijreilly@users.noreply.github.com>
Date:   Wed Jun 5 11:06:22 2024 +0200

    Fix select field options update (#5736)

    Update of select fields options was failing if we deleted an option that
    was used for at least one row: former code would not update the value to
    null but leave it to the no-longer-allowed value.

commit 1bbfc0b715cc75dcd48dc2b1d688033a602ce95c
Author: Marie <51697796+ijreilly@users.noreply.github.com>
Date:   Tue Jun 4 22:27:27 2024 +0200

    Add unicity constraint between object nameSingular and namePlural (#5737)

commit bb7d94a455e2b1a0ddf9fd129c57c15693a72570
Author: gitstart-twenty <140154534+gitstart-twenty@users.noreply.github.com>
Date:   Tue Jun 4 11:04:57 2024 -0400

    Create ESLint rule to discourage usage of navigate() and prefer Link (#5642)

    ### Description
    Create ESLint rule to discourage usage of navigate() and prefer Link

    ### Refs
    #5468

    ### Demo

    ![Capture-2024-05-29-112852](https://github.com/twentyhq/twenty/assets/140154534/28378c09-86bb-49d3-9e9a-49aa1c07ad11)

    ![Capture-2024-05-29-112843](https://github.com/twentyhq/twenty/assets/140154534/2c05ea92-e19b-49ae-acb9-07f6ec9182ab)

    Fixes #5468

    ---------

    Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
    Co-authored-by: v1b3m <vibenjamin6@gmail.com>
    Co-authored-by: Matheus <matheus_benini@hotmail.com>
    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 234e0622327eb977bc8d694101418feecbcd3ae6
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Tue Jun 4 16:52:57 2024 +0200

    Refactor sync sub status and throttle (#5734)

    - Rename syncSubStatus to syncStage
    - Rename ongoingSyncStartedAt to syncStageStartedAt
    - Remove throttlePauseUntil from db and compute it with
    syncStageStartedAt and throttleFailureCount

commit ce1469cf0cbefc12e2106983b531b6dfa046502e
Author: Anand Krishnan M J <87609792+Anand-Krishnan-M-J@users.noreply.github.com>
Date:   Tue Jun 4 19:25:02 2024 +0530

    [ Fix ] [ Issue - 5701 ] Mouse down and drag is selecting records, while file import modal is open (#5716)

    ## Changes Made

    - Prevent mouse event propagation outside modal
    - Prevent text selection inside the modal during drag event

    ## Related Issue

    https://github.com/twentyhq/twenty/issues/5701

    ## Evidence

    ### Before

    https://github.com/twentyhq/twenty/assets/87609792/c15c2a1d-5e3b-4fc5-a98a-638615e8d7b9

    ### After

    Actual drag operation is done, but not visible in the video

    https://github.com/twentyhq/twenty/assets/87609792/f2e68e67-1eb1-4a15-83c8-8cb4313bcaa1

    ---------

    Co-authored-by: Thomas Trompette <thomas.trompette@sfr.fr>

commit fa70f9cfc7cf8b2889015e3f3cfd03c2a527b233
Author: Jeet Desai <52026385+jeet1desai@users.noreply.github.com>
Date:   Tue Jun 4 18:47:46 2024 +0530

    Fix: Reduce spacing gap between Task title and subtitle (#5711)

    Fixes: #5669

    ---------

    Co-authored-by: Thomas Trompette <thomas.trompette@sfr.fr>

commit 5e32cb215e9174e63e9e50c41b6fcdaa26bfc4b1
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Tue Jun 4 15:10:56 2024 +0200

    Fix 5598 - View field creation (#5732)

    - Fix duplicate view field creation
    - Fix redirect to proper settings data model page
    - Refetch view fields after field creation (temporary solution)

    Fixes  https://github.com/twentyhq/twenty/issues/5598

commit c5d5d183476c09a8a6bb4c45f49a711636c7e53d
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Tue Jun 4 15:02:19 2024 +0200

    Remove checkbox padding (#5733)

    Regression has been introduced by this PR
    https://github.com/twentyhq/twenty/pull/4883

    Production

    <img width="885" alt="Capture d’écran 2024-06-04 à 14 51 19"
    src="https://github.com/twentyhq/twenty/assets/22936103/ad6d8490-815c-485a-b9c0-945aa7fba45c">

    After fix

    <img width="885" alt="Capture d’écran 2024-06-04 à 14 51 41"
    src="https://github.com/twentyhq/twenty/assets/22936103/72fd6094-21c2-4737-bd20-0faf9adceb38">

commit 25f4e44aec8b630501d7aecae6f7773c0b235db3
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Tue Jun 4 14:10:58 2024 +0200

    Add backfill position job by workspace (#5725)

    - Removing existing listener that was backfilling created records
    without position
    - Switch to a job that backfill all objects within workspace
    - Adapting `FIND_BY_POSITION` so it can fetch objects without position.
    Currently we needed to input a number

commit b1f12d72570621693a984a55d2f4f9134dc8abae
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Tue Jun 4 13:26:40 2024 +0200

    Fix input position backfill (#5731)

    Some objects do not have position field so they should not be backfilled

commit a4e5e486f58beab63e38eea7d15203f8413649a8
Author: Marie <51697796+ijreilly@users.noreply.github.com>
Date:   Tue Jun 4 13:02:38 2024 +0200

    Fix boolean field in table view (#5728)

    Boolean field was not working in display (unfocused) mode.

    Before fix
    <img width="269" alt="Capture d’écran 2024-06-04 à 11 50 55"
    src="https://github.com/twentyhq/twenty/assets/51697796/9140f71c-41e4-44b4-9514-933edab33dd6">

    https://github.com/twentyhq/twenty/assets/51697796/831c34a7-b91c-4df9-81d8-ced01cc7b9b6

    After fix
    <img width="284" alt="Capture d’écran 2024-06-04 à 11 51 01"
    src="https://github.com/twentyhq/twenty/assets/51697796/7e4a089d-0c55-4624-a5d3-44c00681c6ca">

    https://github.com/twentyhq/twenty/assets/51697796/b5103f39-64c1-4ace-ab32-353aba364471

commit 719cce1ea2b3b05aab1f2033d8cae6e9d8d81f3c
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Tue Jun 4 12:16:47 2024 +0200

    Improve design of fields menu (#5729)

    Improve design of field options menu and redirect to the right object
    edit page

    <img width="215" alt="Screenshot 2024-06-04 at 12 15 43"
    src="https://github.com/twentyhq/twenty/assets/6399865/a8da18a1-49d4-40e3-b2cd-3a1a384366b2">

commit d964f656f99f8659e46ac6a46528f77563acdb35
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Tue Jun 4 11:44:54 2024 +0200

    Fix field input offset (#5726)

    Fix issue introduced in https://github.com/twentyhq/twenty/pull/5426

    It's not a beautiful solution. Maybe one day we should have a dedicated
    component for title but it also comes with downsides (lot of code to
    copy paste, such as "esc" to leave field, copy button, etc.). This one
    doesn't create less debt in my opinion. Once we have the layout/widget
    system we might have a dedicated widget type and the right abstraction
    layers

commit cd9ac529a573dd1fe9be84b84f309233f5fcb036
Author: gitstart-twenty <140154534+gitstart-twenty@users.noreply.github.com>
Date:   Tue Jun 4 04:51:33 2024 -0400

    Add storybook tests for User & Metadata loading (#5650)

    ### Description
    Add storybook tests for User & Metadata loading

    ### Refs
    #5590

    ### Demo

    https://github.com/twentyhq/twenty/assets/140154534/2434fc50-8d95-420b-9f62-6fbdf43ce9e5

    Fixes #5590

    ---------

    Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
    Co-authored-by: v1b3m <vibenjamin6@gmail.com>
    Co-authored-by: Thiago Nascimbeni <tnascimbeni@gmail.com>

commit 3f9f2c3ba611b082f0b4f230283eeef937fbd729
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Tue Jun 4 10:29:05 2024 +0200

    5620 implement throttle logic for message and calendar sync (#5718)

    Closes #5620 and improve messages filters

commit 32d4b37d372eaa8bf13e397e1b359fb9ee383d34
Author: Indrakant D <60315832+its-id@users.noreply.github.com>
Date:   Tue Jun 4 13:33:07 2024 +0530

    Change Navigation Font Weight (#5704)

    fixes [#5665](https://github.com/twentyhq/twenty/issues/5665).

    | Before | After |
    | --- | --- |
    | <img width="257" alt="Screenshot 2024-06-02 at 1 22 09 AM"
    src="https://github.com/twentyhq/twenty/assets/60315832/b78da8fa-cea8-45af-b32c-864d6bce050a">
    | <img width="248" alt="Screenshot 2024-06-02 at 1 21 01 AM"
    src="https://github…
srp-pawar added a commit to synapsenet-arena/lead360 that referenced this pull request Jun 21, 2024
commit 9228667a57b93843df5cbe0bcccffc6facf1ab90
Author: Pacifique LINJANJA <pacilinja2@gmail.com>
Date:   Thu Jun 20 18:18:12 2024 +0200

    Add the support of Empty and Non-Empty filter (#5773)

commit 9e08445bff7a6ae2bf0dd0b229615141de782c11
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Thu Jun 20 17:13:30 2024 +0200

    Fix date picker wrong on certain timezones (#5972)

    Timezone with a negative offset weren't working good with date pickers.

    I split the logic for display and parsing between date only and
    datetime.

    Date time is sending and displaying using timezone, and date only is
    sending and displaying by forcing the date to take its UTC day and month
    and 00:00:00 time.

    This way its consistent across all timezones.

commit 8c6e96c41b7542770f77108bbfe9810d5d9a1001
Author: Aditya Pimpalkar <adipimpalkar@gmail.com>
Date:   Thu Jun 20 15:44:28 2024 +0100

    fix: Column header menu Filter button (#5973)

    fixes: #5957

    https://github.com/twentyhq/twenty/assets/13139771/51d42aa5-c774-4cbe-adca-b95ea6e17bbd

commit 59b9ce689ded48b6d92cf94ec965d2721b5d6b34
Author: Aditya Pimpalkar <adipimpalkar@gmail.com>
Date:   Thu Jun 20 15:42:33 2024 +0100

    add object id column to csv export (#5971)

    closes: #5893

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit bc8c895b0ebe0c29f3f81884db988875102f4bd4
Author: Rushikesh Tarapure <61598260+t007rushi@users.noreply.github.com>
Date:   Wed Jun 19 20:07:44 2024 +0530

    Feat : Introduced Delay Options for Tooltip (#5766)

    Fixes https://github.com/twentyhq/twenty/issues/5727

    ---------

    Co-authored-by: Rushikesh Tarapure <rushikeshtarapure@gofynd.com>
    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit 86f95c087018890d1be561e090ac66db4b41327d
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Wed Jun 19 16:04:01 2024 +0200

    5898 Create a cron to monitor messageChannelSyncStatus (#5933)

    Closes #5898

commit 016132ecf6238ad710b60948949cfbb093f3dfd2
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Wed Jun 19 16:00:39 2024 +0200

    Fix reconnect google account bug (#5905)

    Update syncStage to FULL_MESSAGE_LIST_FETCH_PENDING when reconnecting
    the account to trigger a full sync on the next cron iteration.

commit d6fcb9cae88f3a04236f38d3536f2cf20827cdc2
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Wed Jun 19 15:41:57 2024 +0200

    5934 create alert banner component (#5950)

    Closes #5934

    ---------

    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit 701059007b562a611c90ad5d62df585c50b1e008
Author: gitstart-twenty <140154534+gitstart-twenty@users.noreply.github.com>
Date:   Wed Jun 19 09:25:20 2024 -0400

    Data Skeleton Loading on Indexes (#5828)

    ### Description
    Data Skeleton Loading on Indexes

    ### Refs
    #4459

    ### Demo

    https://github.com/twentyhq/twenty/assets/140154534/d9c9b0fa-2d8c-4b0d-8d48-cae09530622a

    Fixes #4459

    ---------

    Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
    Co-authored-by: v1b3m <vibenjamin6@gmail.com>
    Co-authored-by: Matheus <matheus_benini@hotmail.com>
    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit ff21396bc699916897b86ef7af8927ca987d8f06
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Wed Jun 19 14:48:09 2024 +0200

    [Bug] Put back subject is email right drawer  (#5955)

    Fix https://github.com/twentyhq/twenty/issues/5903

commit 60b60bd4b34a54eadfacbcf05b1fc7218431ead1
Author: Joshua Zacek <personal.joshuazacek@gmail.com>
Date:   Wed Jun 19 13:46:47 2024 +0100

    (5943) Match country selector button's background to phone number input's background (#5956)

    Fixes #5943

    ### Before
    Light
    <img width="218" alt="Screenshot 2024-06-19 at 12 37 22 PM"
    src="https://github.com/twentyhq/twenty/assets/57673080/981d1877-be4e-4071-9a8d-9d0ed7e933ab">
    Dark
    <img width="223" alt="Screenshot 2024-06-19 at 12 39 42 PM"
    src="https://github.com/twentyhq/twenty/assets/57673080/a3730ef5-21ba-4d90-998d-d330aec350ad">

    ### After
    Light
    <img width="216" alt="Screenshot 2024-06-19 at 12 39 00 PM"
    src="https://github.com/twentyhq/twenty/assets/57673080/eef3b743-1b28-43a5-8c1c-bd944a4915c7">
    Dark
    <img width="228" alt="Screenshot 2024-06-19 at 12 39 29 PM"
    src="https://github.com/twentyhq/twenty/assets/57673080/5bf10e51-5a07-4d55-99f1-734517b22781">

commit 1c685e8a31d4df57439bb73fb9414de216acaee9
Author: Atchyut Preetham Pulavarthi <pulavarthi.preetham@gmail.com>
Date:   Wed Jun 19 18:08:30 2024 +0530

    fix(twenty-front): update DateTimeInput styles to apply top border radius to date picker (#5946)

    update DateTimeInput styled components to prevent the StyledInput from
    overflowing out of it's parent container

    <img width="860" alt="Screenshot 2024-06-19 at 9 55 04 AM"
    src="https://github.com/twentyhq/twenty/assets/19223383/8c5daf6a-9eb6-4ecd-a2e9-aa2ba8db3874">

    Fixes #5940

commit 76bcf313413648d14c5b57068ecf252a8df7ecdb
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Wed Jun 19 14:34:11 2024 +0200

    Added a mechanism to reset error boundary on page change. (#5913)

    Previously the error boundary component was re-rendering with the same
    state as long as we stayed in the same router, so for page change inside
    an index container, it would stay on error state.

    The fix is to memorize the location the error page is on during its
    first render, and then to reset the error boundary if it gets
    re-rendered with a different location even in the same index container.

    Fixes : #3592

commit c7e6d6959fbd5a8d94ef4e09539f15b684444582
Author: Ravan <69167444+RamK777-stack@users.noreply.github.com>
Date:   Wed Jun 19 18:00:26 2024 +0530

    Add a ⏎ shortcut on Select options (#5641)

    fixes #5540

    Added onkeyDown to
    1. Create new option and
    2. Move focus to it.

    [screen-capture
    (6).webm](https://github.com/twentyhq/twenty/assets/69167444/ede54ad8-22db-4b09-9617-4d999c6c08c7)

    ---------

    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit 64b456912acae0990dd442bb199fb06e3e29f400
Author: gitstart-twenty <140154534+gitstart-twenty@users.noreply.github.com>
Date:   Wed Jun 19 07:34:42 2024 -0400

    Favicons are being re-rendered on hover (#5849)

    ### Description

    Favicons are being re-rendered on hover

    ### Refs

    #3523

    ### Demo

    https://www.loom.com/share/e3944d940a014283af8c26baac1fed57?sid=e3e96a81-3a54-4969-8602-99c64bb3ffe7

    Fixes #3523

    ---------

    Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
    Co-authored-by: v1b3m <vibenjamin6@gmail.com>
    Co-authored-by: Thiago Nascimbeni <tnascimbeni@gmail.com>
    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit 96da777107cd366fd0d43054c301fa606f214746
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Wed Jun 19 11:54:11 2024 +0200

    Handle no concurrency option (#5952)

    Fix error in local `teamConcurrency must be an integer between 1 and
    1000`

commit d045bcbb94a5027f8e4cafc129056653670a4b16
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Wed Jun 19 10:39:09 2024 +0200

    Add http status to graphql errors (#5896)

    Graphql errors are not properly filtered by our handler. We still
    receive errors like `NOT_FOUND` in sentry while they should be filtered.
    Example
    [here](https://twenty-v7.sentry.io/issues/5490383016/?environment=prod&project=4507072499810304&query=is%3Aunresolved+issue.priority%3A%5Bhigh%2C+medium%5D&referrer=issue-stream&statsPeriod=7d&stream_index=6).

    We associate statuses with errors in our map
    `graphQLPredefinedExceptions` but we cannot retrieve the status from the
    error.

    This PR lists the codes that should be filtered.

    To test:
    - call `findDuplicates` with an invalid id
    - before, server would breaks
    - now the error is simply returned

commit 6fd8dab55243cda291fa45f896caaa9d5e5160b8
Author: martmull <martmull@hotmail.fr>
Date:   Tue Jun 18 18:55:13 2024 +0200

    5582 get httpsapitwentycomrestmetadata objects filters dont work (#5906)

    - Remove filters from metadata rest api
    - add limite before and after parameters for metadata
    - remove update from metadata relations
    - fix typing issue
    - fix naming
    - fix before parameter

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit dbaa787d191f08cd0ff27989e506ee6d636cb9af
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Tue Jun 18 18:40:19 2024 +0200

    website / Fix broken links, slow loading, and prod errors (#5932)

    The code is in a bad state, this is just fixing it but not improving the
    structure

commit 6b1548ebbe0ca51d756704da6c6005c2448046db
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Tue Jun 18 18:38:14 2024 +0200

    Add loader and transition for details page tabs (#5935)

    Closes https://github.com/twentyhq/twenty/issues/5656

    https://github.com/twentyhq/twenty/assets/22936103/3e4beea2-9aa9-4015-bb99-ee22adb53b63

commit cff85615975fcafec26af3e424d6435b9f5d4128
Author: martmull <martmull@hotmail.fr>
Date:   Tue Jun 18 17:34:16 2024 +0200

    Upgrade pg graphql version to 1.5.6 (#5937)

    - update `pg_graphql` version doc
    - update `pg_graphql` version to 1.5.6

commit 38537a39671abd23e12a4fce3ce1759e8f9f9f20
Author: Hanch Han <51526347+hanchchch@users.noreply.github.com>
Date:   Tue Jun 18 18:14:31 2024 +0900

    Add South Korean won to currency codes (#5914)

    Greetings from Seoul! I found this amazing project a few days ago, and
    trying to introduce it to my team. However there is a tiny but
    significant problem, that South Korean won is not available in twenty.

    So I added `KRW` to the enum `CurrencyCode` and the constant
    `SETTINGS_FIELD_CURRENCY_CODES`. I tested it locally and apparently
    works fine.

commit 14abd99bb774171ec1bba56d4c584482858b4f9d
Author: Aditya Pimpalkar <adipimpalkar@gmail.com>
Date:   Tue Jun 18 09:49:33 2024 +0100

    add multiple filters of same FieldMetadataType (#5892)

    fixes: #5378

commit de2b0527a3fc64f9c651a0cd11c718687c3b2c07
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Mon Jun 17 18:09:46 2024 +0200

    Fix secondaryLinks field input (#5911)

    PR https://github.com/twentyhq/twenty/pull/5785/files broke links
    update.

    Also, dropdown "Add link" will be displayed only if a link is already
    added. Otherwise, it should be a normal input.

commit e1bd3a4c5a38f93bebc9f934f0d7180091c35df4
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Mon Jun 17 17:27:19 2024 +0200

    Added and optimized missing RatingFieldDisplay component (#5904)

    The display for Rating field type was missing, I just added it based on
    RatingInput in readonly mode and optimized a bit for performance also.

    Fixes https://github.com/twentyhq/twenty/issues/5900

commit dba0b28eae9063437ebff7ad695e78635378cd1d
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Mon Jun 17 11:54:04 2024 +0200

    Fix verticale line timeline activity (#5894)

    Before

    <img width="400" alt="Capture d’écran 2024-06-17 à 10 23 17"
    src="https://github.com/twentyhq/twenty/assets/22936103/01408d7b-9a6c-4a21-9f08-c8cf304e2ea0">

    After

    <img width="400" alt="Capture d’écran 2024-06-17 à 10 05 39"
    src="https://github.com/twentyhq/twenty/assets/22936103/df384726-bbf9-4828-ad47-d1c91724947d">

commit 1ba7037fdc06941009167b33ffeafe5dac51b808
Author: martmull <martmull@hotmail.fr>
Date:   Mon Jun 17 10:59:29 2024 +0200

    5581 get httpsapitwentycomrestmetadata relations not working (#5867)

    Filtering relations is not allowed
    (see`packages/twenty-server/src/engine/metadata-modules/relation-metadata/dtos/relation-metadata.dto.ts`)
    so we remove filtering for find many relation

    we also fixed some bug in result structure and metadata open-api schema

commit d8034b1f40aebc6eafab9cec6132aa6cb97d1d02
Author: martmull <martmull@hotmail.fr>
Date:   Mon Jun 17 10:17:31 2024 +0200

    5236 expandable list leave options when editing (#5890)

    Fixes https://github.com/twentyhq/twenty/issues/5236
    ## After

    ![image](https://github.com/twentyhq/twenty/assets/29927851/5f0f910c-11b0-40ce-9c59-34e7ce0c2741)

commit d99b9d1d6b11f7961fb4131ba66aa94447779530
Author: Jérémy M <jeremy.magrin@gmail.com>
Date:   Mon Jun 17 09:49:37 2024 +0200

    feat: Enhancements to MessageQueue Module with Decorators (#5657)

    ### Overview

    This PR introduces significant enhancements to the MessageQueue module
    by integrating `@Processor`, `@Process`, and `@InjectMessageQueue`
    decorators. These changes streamline the process of defining and
    managing queue processors and job handlers, and also allow for
    request-scoped handlers, improving compatibility with services that rely
    on scoped providers like TwentyORM repositories.

    ### Key Features

    1. **Decorator-based Job Handling**: Use `@Processor` and `@Process`
    decorators to define job handlers declaratively.
    2. **Request Scope Support**: Job handlers can be scoped per request,
    enhancing integration with request-scoped services.

    ### Usage

    #### Defining Processors and Job Handlers

    The `@Processor` decorator is used to define a class that processes jobs
    for a specific queue. The `@Process` decorator is applied to methods
    within this class to define specific job handlers.

    ##### Example 1: Specific Job Handlers

    ```typescript
    import { Processor, Process, InjectMessageQueue } from 'src/engine/integrations/message-queue';

    @Processor('taskQueue')
    export class TaskProcessor {

      @Process('taskA')
      async handleTaskA(job: { id: string, data: any }) {
        console.log(`Handling task A with data:`, job.data);
        // Logic for task A
      }

      @Process('taskB')
      async handleTaskB(job: { id: string, data: any }) {
        console.log(`Handling task B with data:`, job.data);
        // Logic for task B
      }
    }
    ```

    In the example above, `TaskProcessor` is responsible for processing jobs
    in the `taskQueue`. The `handleTaskA` method will only be called for
    jobs with the name `taskA`, while `handleTaskB` will be called for
    `taskB` jobs.

    ##### Example 2: General Job Handler

    ```typescript
    import { Processor, Process, InjectMessageQueue } from 'src/engine/integrations/message-queue';

    @Processor('generalQueue')
    export class GeneralProcessor {

      @Process()
      async handleAnyJob(job: { id: string, name: string, data: any }) {
        console.log(`Handling job ${job.name} with data:`, job.data);
        // Logic for any job
      }
    }
    ```

    In this example, `GeneralProcessor` handles all jobs in the
    `generalQueue`, regardless of the job name. The `handleAnyJob` method
    will be invoked for every job added to the `generalQueue`.

    #### Adding Jobs to a Queue

    You can use the `@InjectMessageQueue` decorator to inject a queue into a
    service and add jobs to it.

    ##### Example:

    ```typescript
    import { Injectable } from '@nestjs/common';
    import { InjectMessageQueue, MessageQueue } from 'src/engine/integrations/message-queue';

    @Injectable()
    export class TaskService {
      constructor(
        @InjectMessageQueue('taskQueue') private readonly taskQueue: MessageQueue,
      ) {}

      async addTaskA(data: any) {
        await this.taskQueue.add('taskA', data);
      }

      async addTaskB(data: any) {
        await this.taskQueue.add('taskB', data);
      }
    }
    ```

    In this example, `TaskService` adds jobs to the `taskQueue`. The
    `addTaskA` and `addTaskB` methods add jobs named `taskA` and `taskB`,
    respectively, to the queue.

    #### Using Scoped Job Handlers

    To utilize request-scoped job handlers, specify the scope in the
    `@Processor` decorator. This is particularly useful for services that
    use scoped repositories like those in TwentyORM.

    ##### Example:

    ```typescript
    import { Processor, Process, InjectMessageQueue, Scope } from 'src/engine/integrations/message-queue';

    @Processor({ name: 'scopedQueue', scope: Scope.REQUEST })
    export class ScopedTaskProcessor {

      @Process('scopedTask')
      async handleScopedTask(job: { id: string, data: any }) {
        console.log(`Handling scoped task with data:`, job.data);
        // Logic for scoped task, which might use request-scoped services
      }
    }
    ```

    Here, the `ScopedTaskProcessor` is associated with `scopedQueue` and
    operates with request scope. This setup is essential when the job
    handler relies on services that need to be instantiated per request,
    such as scoped repositories.

    ### Migration Notes

    - **Decorators**: Refactor job handlers to use `@Processor` and
    `@Process` decorators.
    - **Request Scope**: Utilize the scope option in `@Processor` if your
    job handlers depend on request-scoped services.

    Fix #5628

    ---------

    Co-authored-by: Weiko <corentin@twenty.com>

commit 605945bd427e033d5c715b907ed1516d82a625d9
Author: Ymir <36711026+Ymirke@users.noreply.github.com>
Date:   Sun Jun 16 09:39:16 2024 +0200

    Added Thai Baht support (#5881)

    Hey, saw Thai Baht support was
    [requested](https://github.com/twentyhq/twenty/issues/5876) and thought
    it was a cool first issue to get to know the project a little bit.

commit 99f4a75b5844a1af03b3dc50d0ffd9d7c901207b
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Fri Jun 14 19:05:48 2024 +0200

    Fix website docs (#5873)

    There was a 500 on the playground and the switch between core and
    metadata

commit 9c8407c197f842c0c03b058a42028c99498b974b
Author: Thomas des Francs <tdesfrancs@gmail.com>
Date:   Fri Jun 14 16:59:42 2024 +0200

    Wrote 0.20 changelog (#5870)

    Created the changelog for 0.2

commit 3d3cef079742e447d2595e2a15e3436f209ea0e3
Author: Michael Gold <goldmichael@gmail.com>
Date:   Fri Jun 14 10:48:29 2024 -0400

    fix: 404 generate API key link (#5871)

    - update api key link in the docs

commit dd2db083ce4d4d5ad7113ac74da8466818dc990f
Author: RobertoSimonini1 <roberto.simonini@endor.studio>
Date:   Fri Jun 14 16:27:16 2024 +0200

    Record horizontal scrolling mobile (#5843)

    I have fixed the scrolling the record container page on mobile making it
    hidden.
    This PR aims to fix #5745

    ---------

    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit eaa2f83eb1e01a90495c3da375983bbc3d3f3544
Author: martmull <martmull@hotmail.fr>
Date:   Fri Jun 14 13:11:15 2024 +0200

    Fix overflow on notes (#5853)

    ##before

    ![image](https://github.com/twentyhq/twenty/assets/29927851/c1784340-0741-4701-b11f-d2cf50fab9fb)

    ##after

    ![image](https://github.com/twentyhq/twenty/assets/29927851/c095eaf1-15c4-4e68-8cff-c175f99856d0)

commit be18ee4d7d4e0056429b573d2564be76b3496553
Author: martmull <martmull@hotmail.fr>
Date:   Fri Jun 14 12:41:55 2024 +0200

    Fix sentry error (#5848)

    Fixes
    https://twenty-v7.sentry.io/issues/5363536663/?environment=prod&project=4507072499810304&query=is%3Aunresolved+issue.priority%3A%5Bhigh%2C+medium%5D&referrer=issue-stream&statsPeriod=7d&stream_index=0

    - handle error properly in twenty-server
    - display backend error message

commit 82741d3b046f9cf0a6715e58064815d118bdb286
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Fri Jun 14 12:38:35 2024 +0200

    Fix error log on message import (#5866)

    Modify #5863 to log the connected account id rather than the message
    channel id to be consistent with the other logs and stringify the error.

commit 28202cc9e051b9fb09e685473841f107bdea38dd
Author: martmull <martmull@hotmail.fr>
Date:   Fri Jun 14 12:36:24 2024 +0200

    Fix workspaceLogo in invite-email (#5865)

    ## Fixes wrong image url in email

    ![image](https://github.com/twentyhq/twenty/assets/29927851/5fb1524b-874d-4723-8450-0284382bbeb3)

    ## Done
    - duplicates and adapt `getImageAbsoluteURIOrBase64` from `twenty-front`
    in `twenty-email`
    - send `SERVER_URL` to email builder

commit a2e89af6b26aa115760d96fd90b6b54e9646f7ab
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Fri Jun 14 12:35:23 2024 +0200

    Collapsible menu (#5846)

    A mini PR to discuss with @Bonapara tomorrow

    Separating remote objects from others and making the menu collapsible
    (style to be changed)
    <img width="225" alt="Screenshot 2024-06-12 at 23 25 59"
    src="https://github.com/twentyhq/twenty/assets/6399865/b4b69d36-6770-43a2-a5e8-bfcdf0a629ea">

    Biggest issue is we don't use local storage today so the collapsed state
    gets lost.
    I see we have localStorageEffect with recoil. Maybe store it there?
    Seems easy but don't want to introduce a bad pattern.

    Todo:
    - style update
    - collapsible favorites
    - persistent storage

commit 8d8bf1c1282cdbf748e8a854c925df58815a9cda
Author: Siddhant Rai <47355538+siiddhantt@users.noreply.github.com>
Date:   Fri Jun 14 15:11:49 2024 +0530

    fix: text field overflow beyond cell limits (#5834)

    - fixes #5775

    https://github.com/twentyhq/twenty/assets/47355538/9e440018-ec1e-4faa-a9f3-7131615cf9f1

    ---------

    Co-authored-by: Charles Bochet <charles@twenty.com>
    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit 4603999d1c0e968ed6c4f583d5ccc6d834970744
Author: Aditya Pimpalkar <adipimpalkar@gmail.com>
Date:   Fri Jun 14 10:23:37 2024 +0100

    Support orderBy as array (#5681)

    closes: #4301

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 85fd801480ecceb44429139585d0e10c0e70d909
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Fri Jun 14 09:36:39 2024 +0200

    Add log for errors on message import (#5863)

    As per title :)

commit 39af374de00dfc0f4d27ec8cfb8736c4a3471c8e
Author: Weiko <corentin@twenty.com>
Date:   Thu Jun 13 19:04:53 2024 +0200

    fix timeline activity pagination overflow (#5861)

    ## Before
    <img width="250" alt="Screenshot 2024-06-13 at 18 51 56"
    src="https://github.com/twentyhq/twenty/assets/1834158/d6c7f5fa-3cc7-48bc-a711-29345e93af92">

    ## After
    <img width="284" alt="Screenshot 2024-06-13 at 18 51 41"
    src="https://github.com/twentyhq/twenty/assets/1834158/25029e0a-c1b0-4458-b715-dbab217eeee0">

commit 00d22947284bcda2f1efb5ad1e8f70fddf1feb33
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Thu Jun 13 18:56:55 2024 +0200

    Add label to mocked connections (#5858)

    <img width="865" alt="Capture d’écran 2024-06-13 à 17 48 03"
    src="https://github.com/twentyhq/twenty/assets/22936103/2d313448-fbd5-4ff1-a65b-afd4df86117a">

commit 65fc83a763516e66ba2820723636241c9cfbaa5c
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Thu Jun 13 18:28:02 2024 +0200

    Added a fallback default record chip generator (#5860)

    The record chip generator context was missing a edge were a new field of
    type relation is created and not yet in the metadata so no chip
    generator function can be precomputed.

    For now I added a fallback default chip generator, to prevent any bug,
    but we might want to add a new chip generator function while creating
    the new field ?

commit 582653f9df59446d98199ad6dc893d41a89379b2
Author: Marie <51697796+ijreilly@users.noreply.github.com>
Date:   Thu Jun 13 17:39:46 2024 +0200

    Bump to version 0.20.0 (#5857)

commit 93c17a8a5bb3cea5d7ed8582bf04f44b2f3b57f1
Author: Weiko <corentin@twenty.com>
Date:   Thu Jun 13 17:39:31 2024 +0200

    Remove timelineActivity featureFlag (#5856)

commit 21dbd6441a4b2b1f7c2209fc59633905b9eaa8e5
Author: kikoleitao <92337535+kikoleitao@users.noreply.github.com>
Date:   Thu Jun 13 16:22:51 2024 +0100

    feat: implement row re-ordering via drag and drop (#4846) (#5580)

    # Context

    Currently, the Twenty platform incorporates "positions" for rows on the
    backend, which are functional within the Kanban view. However, this
    advantageous feature has yet to be leveraged within list views.

    # Feature Proposal

    ## Implement Row-Reordering via Drag-and-Drop on Frontend (#4846)

    - This PR addresses the implementation of row reordering via
    Drag-and-Drop on frontend. The objective is to enrich the list view
    functionality by introducing a grip that dynamically appears upon
    hovering over the left space preceding the checkbox container. This grip
    empowers users to effortlessly reposition rows within the list.

    #### Proposal Highlights:

    - **Enhanced User Interaction**: Introduce a draggable grip to
    facilitate intuitive row reordering, enhancing user experience and
    productivity.
    - **Preservation of Design Aesthetics**: By excluding the grip from the
    first row and maintaining the left gap, we uphold design integrity while
    providing enhanced functionality.
    - **Consistency with Existing Features**: Align with existing
    drag-and-drop functionalities within the platform, such as Favorites
    re-ordering or Fields re-ordering in table options, ensuring a seamless
    user experience.

    ## Implementation Strategy

    ### Grip Implementation:

    - Add an extra column to the table (header + body) to accommodate the
    grip cell, which displays the IconListViewGrip when its container is
    hovered over.
    - Ensure the preceding left-space is maintained by setting the
    corresponding width for this column and removing padding from the table
    container (while maintaining padding in other page elements and the
    Kanban view for coherence).

    ### Row Drag and Drop:

    - Implement row drag-and-drop functionality using draggableList and
    draggableItem, based on the existing logic in the KanbanView for row
    repositioning.
    - Create a draggableTableBody and apply it to the current
    RecordTableBody (including modal open triggering - if dragging while
    sorting exists).
    - Apply the draggableItem logic to RecordTableRow.

    ### Sorting Modal Implementation:

    - Reuse the ConfirmationModel for the removeSortingModal.
    - Create a new state to address the modal.
    - Implement sorting removal logic in the corresponding modal file.

    ## Outcome

    - The left-side margin is preserved.
    - The grip appears upon hovering.
    - Dragging a row gives it and maintains an aesthetic appearance.
    - Dropping a row updates its position, and the table gets a new
    configuration.
    - If sorting is present, dropping a row activates a modal. Clicking on
    the "Remove Sorting" button will deactivate any sorting (clicking on
    "Cancel" will close the modal), and the table will revert to its default
    configuration by position, allowing manual row reordering. Row
    repositioning will not occur if sorting is not removed.
    - The record table maintains its overall consistency.
    - There are no conflicts with DragSelect functionality.

    https://github.com/twentyhq/twenty/assets/92337535/73de96cc-4aac-41a9-b4ec-2b8d1c928d04

    ---------

    Co-authored-by: Vasco Paisana <vasco.paisana@tecnico.ulisboa.pt>
    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>
    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 81c4939812f86df3aa2f0cef3a046b5d7fc386d1
Author: Weiko <corentin@twenty.com>
Date:   Thu Jun 13 15:22:15 2024 +0200

    Fix timeline activity missing updated fields (#5854)

    ## Before
    <img width="883" alt="Screenshot 2024-06-13 at 14 48 05"
    src="https://github.com/twentyhq/twenty/assets/1834158/0e72ead1-2d59-4ee3-af3b-dfdd593b7f2e">

    ## After
    <img width="908" alt="Screenshot 2024-06-13 at 14 48 14"
    src="https://github.com/twentyhq/twenty/assets/1834158/00e32ddf-e40d-4cc9-a80a-9f5b76bd377a">

commit e0722545551ee44e98a7db8eb47086d3d71445e1
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Thu Jun 13 14:18:10 2024 +0200

    Fixed new date time formatting util (#5852)

    The new date time formatting util made for performance optimization
    missed two things :
    - Padding 0 for hours and minutes with 1 digit only.
    - Correctly parsing the day of the month (now uses JS Date native
    getDate() instead of slicing the ISO String)

commit 6f65fa295b8006267b6421e36ecc3478c0024361
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Thu Jun 13 12:43:13 2024 +0200

    Added RecordValue use-context-selector to settings field's logic (#5851)

    In the settings part of the app, where display fields are used as in
    table cell and board cards, we didn't have the new context selector
    logic implemented, due to the recent performance optimization.

commit b26fd00a4086ac03761fe47decd899a040cd0c47
Author: martmull <martmull@hotmail.fr>
Date:   Thu Jun 13 11:47:00 2024 +0200

    5663 i should be able to accept an invite even if i have an inactive workspace (#5839)

    - make invitation and reset password available on every page
    - add a sleep after setKeyPair as tokens are sometimes not updated when
    redirecting to Index
    - refactor sleep

commit d93c2d64088e59928994e68ffc6177d288b2f063
Author: Jovan <71730487+jovanmedford@users.noreply.github.com>
Date:   Thu Jun 13 05:30:13 2024 -0400

    #5761 Add "No XXX found" title to filtered empty state (#5838)

    Issue: #5761

    Changes:
    - Use `useFindManyRecords` in `RecordTableWithWrappers.tsx` to determine
    if any records exist for that object
    - Add `hasUnfilteredRecords` prop to `RecordTableEmptyState.tsx`.

    This changes to empty state title, but I'm guessing that we'll need to
    change the button text and subheading as well you guys can let me know
    what you think. If this works I can go on to do those next, thanks!

    ---------

    Co-authored-by: Thomas Trompette <thomas.trompette@sfr.fr>

commit 7c1d9aebb963d8afe5aca20b09ac362b0a3fe138
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Thu Jun 13 11:17:17 2024 +0200

    Removed unnecessary on mouse enter for soft focus (#5850)

    In RecordTableCellContainer, I just removed onMouseEnter event handler
    that was being triggered when we used keyboard soft focus move.

    It's not necessary to have it because we already listen on mouse move
    which is matching our use case where we only want soft focus to move
    when mouse move and not when the cursor stays on top of a cell.

commit f825bea07117f4aa10e44fe176d853e9b11a5127
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Thu Jun 13 07:53:28 2024 +0200

    5629 update blocklist for messaging v2 (#5756)

    Closes #5629

    - Add subdomain support in blocklist (if @example.com is blocked, every
    subdomain will be blocked)

commit 374237a9888a35206b40aa9a998c3873e39f5dd8
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Wed Jun 12 21:54:33 2024 +0200

    Refacto rest api, fix graphl playground, improve analytics (#5844)

    - Improve the rest api by introducing startingAfter/endingBefore (we
    previously had lastCursor), and moving pageInfo/totalCount outside of
    the data object.
    - Fix broken GraphQL playground on website
    - Improve analytics by sending server url

commit 04edf2bf7b22e06a67d042c039f8440b6cdacf9f
Author: Jérémy M <jeremy.magrin@gmail.com>
Date:   Wed Jun 12 21:17:31 2024 +0200

    feat: add resolve absolute path util (#5836)

    Add a new util called `resolveAbsolutePath` to allow providing absolute
    path for environment variable like `STORAGE_LOCAL_PATH`.
    If the path in the env start with `/` we'll not prefix it with
    `process.cwd()`.

    Also we're using a static path for the old `db_initialized` file now
    named `db_status` and stop using the env variable for this file as this
    one shouldn't ne stored in the `STORAGE_LOCAL_PATH`.

    Fix #4794

    ---------

    Co-authored-by: Quentin Galliano <qgalliano@gmail.com>

commit 3986824017767a09e38b12fee138dd497a240a9a
Author: martmull <martmull@hotmail.fr>
Date:   Wed Jun 12 21:13:18 2024 +0200

    5623 add an inviteteam onboarding step (#5769)

    ## Changes
    - add a new invite Team onboarding step
    - update currentUser.state to currentUser.onboardingStep

    ## Edge cases
    We will never display invite team onboarding step
    - if number of workspaceMember > 1
    - if a workspaceMember as been deleted

    ## Important changes
    Update typeorm package version to 0.3.20 because we needed a fix on
    `indexPredicates` pushed in 0.3.20 version
    (https://github.com/typeorm/typeorm/issues/10191)

    ## Result
    <img width="844" alt="image"
    src="https://github.com/twentyhq/twenty/assets/29927851/0dab54cf-7c66-4c64-b0c9-b0973889a148">

    https://github.com/twentyhq/twenty/assets/29927851/13268d0a-cfa7-42a4-84c6-9e1fbbe48912

commit 2fdd2f4949cddec3b88d91b491f20a5f64dc6c05
Author: Quentin G <qgalliano@gmail.com>
Date:   Wed Jun 12 21:11:58 2024 +0200

    Fix/release workflow (#5802)

    Here is a fix for https://github.com/twentyhq/twenty/issues/5163

    I tested it on another repo and should work as intended this time
    arround.

    I've created two workflows
    - One that creates a PR
    - The second that watch PR merge with specific labels
    - I also check the author of the PR to make sure it was created by a bot

    You can now disable the creation of the a draft release

    ---------

    Co-authored-by: Charles Bochet <charles@twenty.com>

commit 4a7a8c72ef2030bad0163bcd1bd42e5daf1b6b4f
Author: Charles Bochet <charles@twenty.com>
Date:   Wed Jun 12 20:38:44 2024 +0200

    Fix typing on main

commit 03b3c8a67ac24fd660876929637b59265dfa76b7
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Wed Jun 12 18:36:25 2024 +0200

    Refactored all FieldDisplay types for performance optimization (#5768)

    This PR is the second part of
    https://github.com/twentyhq/twenty/pull/5693.

    It optimizes all remaining field types.

    The observed improvements are :
    - x2 loading time improvement on table rows
    - more consistent render time

    Here's a summary of measured improvements, what's given here is the
    average of hundreds of renders with a React Profiler component. (in our
    Storybook performance stories)

    | Component | Before (µs) | After (µs) |
    | ----- | ------------- | --- |
    | TextFieldDisplay | 127 | 83 |
    | EmailFieldDisplay | 117 | 83 |
    | NumberFieldDisplay | 97 | 56 |
    | DateFieldDisplay | 240 | 52 |
    | CurrencyFieldDisplay | 236 | 110 |
    | FullNameFieldDisplay | 131 | 85 |
    | AddressFieldDisplay | 118 | 81 |
    | BooleanFieldDisplay | 130 | 100 |
    | JSONFieldDisplay | 248 | 49 |
    | LinksFieldDisplay | 1180 | 140 |
    | LinkFieldDisplay | 140 | 78 |
    | MultiSelectFieldDisplay | 770 | 130 |
    | SelectFieldDisplay | 230 | 87 |

commit 007e0e8b0ebe7f7e8f72d0abaf6154216035fa40
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Wed Jun 12 17:30:59 2024 +0200

    Fix event value elipsis (#5840)

    <img width="400" alt="Capture d’écran 2024-06-12 à 14 41 08"
    src="https://github.com/twentyhq/twenty/assets/22936103/12d333a9-16ce-45f3-a1eb-060bf77bae96">
    <img width="400" alt="Capture d’écran 2024-06-12 à 16 47 53"
    src="https://github.com/twentyhq/twenty/assets/22936103/6e154936-82d6-4e19-af4c-e6036b01dd04">
    <img width="400" alt="Capture d’écran 2024-06-12 à 16 52 48"
    src="https://github.com/twentyhq/twenty/assets/22936103/6440af6b-ea40-4321-942a-a6e728a78104">

commit 732e8912da32b6a18c0392df760240cebd4990fe
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Wed Jun 12 16:31:07 2024 +0200

    Added Linaria for performance optimization (#5693)

    - Added Linaria to have compiled CSS on our optimized field displays
    - Refactored mocks for performance stories on fields
    - Refactored generateRecordChipData into a global context, computed only
    when we fetch object metadata items.
    - Refactored ChipFieldDisplay
    - Refactored PhoneFieldDisplay

commit 30d3ebc68a3dac225fb1cb41d3af31f562798745
Author: martmull <martmull@hotmail.fr>
Date:   Wed Jun 12 16:25:04 2024 +0200

    Fix missing cursor on rest api (#5841)

    ## Before

    ![image](https://github.com/twentyhq/twenty/assets/29927851/fc3bad2d-5238-4afa-b528-409fbff3902c)

    ## After

    ![image](https://github.com/twentyhq/twenty/assets/29927851/418174c1-aafb-4ea2-a936-50c03ea17764)

    ![image](https://github.com/twentyhq/twenty/assets/29927851/03439033-db6b-44b0-9613-f766babc1d2d)

    ![image](https://github.com/twentyhq/twenty/assets/29927851/f0e5e998-3c61-437d-863f-7289609d0d30)

commit ad6547948bba2c1140fc6f9d1c076319aa7523db
Author: Weiko <corentin@twenty.com>
Date:   Wed Jun 12 16:21:30 2024 +0200

    Activity timeline refactoring followup (#5835)

    Following https://github.com/twentyhq/twenty/pull/5697, addressing
    review

commit bd22bfce2ed3f80914e86e2a996bbb44391b0f5b
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Wed Jun 12 12:35:46 2024 +0200

    Push event for user signup (#5837)

    Need to setup Twenty as a CRM for Twenty the Twenty team

commit 5fe2fc2778b30b8db18c47faa646d6d1386b76b4
Author: Juan Martín Miñarro <80736129+Juojo@users.noreply.github.com>
Date:   Wed Jun 12 05:24:38 2024 -0300

    Add 8px margin to the left of the Tasks' tab list (#5833)

    I implemented the margin requested on #5827

    ---------

    Co-authored-by: Thomas Trompette <thomas.trompette@sfr.fr>

commit 5ec98b5ac34c67af0ad9bd8a0d9239e2440e2a14
Author: Charles Bochet <charles@twenty.com>
Date:   Wed Jun 12 08:21:35 2024 +0200

    Fix not possible to read message from other workspaceMember

commit a0d9fdb3de824eece3ca1e6fe96c2035b388033e
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Wed Jun 12 08:11:48 2024 +0200

    Fix bugs and telemetry (#5832)

    Bugfix 1:
    <img width="491" alt="Screenshot 2024-06-12 at 07 19 42"
    src="https://github.com/twentyhq/twenty/assets/6399865/e3ad2771-4edd-453d-9d85-f429177dfd15">

    Bugfix 2:
    <img width="259" alt="Screenshot 2024-06-12 at 07 47 02"
    src="https://github.com/twentyhq/twenty/assets/6399865/2f82c90e-2180-4290-b12e-e72910fb108c">

    Change 3:
    I remove the "telemetry anonymization enabled" parameter as it was
    misleading, we were anonymization ids but still forwarding the workspace
    name which is imo more sensitive than an ID

commit 7d068095cdb9c3d3012c8281b49cf4d99a55344e
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Tue Jun 11 22:30:38 2024 +0200

    Fix of board request fix PR (#5829)

    Fix again board requests as first merged PR appears to have missing
    commits / code. https://github.com/twentyhq/twenty/pull/5819

commit a57e2512085522eef3862813add5914e65fb321b
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Tue Jun 11 19:06:37 2024 +0200

    Fix docs build in CI (#5826)

commit be96c68416cee67cfb342a561eae62751eeefd66
Author: Weiko <corentin@twenty.com>
Date:   Tue Jun 11 18:53:28 2024 +0200

    POC timeline activity (#5697)

    TODO:
    - remove WorkspaceIsNotAuditLogged decorators on activity/activityTarget
    to log task/note creations
    - handle attachments
    -  fix css and remove unnecessary styled components or duplicates

commit 64b8e4ec4d344d5704f803b6aa9cdd67c5bbb7d4
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Tue Jun 11 18:52:38 2024 +0200

    Fix access token refresh (#5825)

    In `messaging-gmail-messages-import.service`, we were refreshing the
    access token before each query but we were passing the old access token
    to `fetchAllMessages`.
    I modified the function to query the updated connectedAccount with the
    new access token.
    This will solve the 401 errors we were getting in production.

commit 3328666308d1138a96cf66508583b49a1feef432
Author: RobertoSimonini1 <roberto.simonini@endor.studio>
Date:   Tue Jun 11 18:39:24 2024 +0200

    Increased inline relation field hover surface (#5809)

    I increased the inline relation of the relations fields, now the edit
    pen is visible when hovering the icon and not only the label.
    this aims to fix: #5662

commit 6d7782eb5a7d8ba421a207a82148b623430c396e
Author: marteenaf <120792086+marteenaf@users.noreply.github.com>
Date:   Tue Jun 11 17:24:40 2024 +0100

    Align field values with fixed width for field key.  (#5821)

    Made the alignment consistent with the field panel. This uses 90px as
    the key label width.

    **Issue:** #5730

    **Changes:**
    - Add a label width of 90 to FieldContext Provider in useFieldContext
    function
    - Add a label width of 90 to ActivityTargetsInlineCell component

    **Screen recording form local testing:**

    https://github.com/twentyhq/twenty/assets/120792086/e150530b-4163-4a69-9bd5-119a2f202d4f

    ---------

    Co-authored-by: Thomas Trompette <thomas.trompette@sfr.fr>

commit 3440889ad0f712883c94d3dd7b9c9316881ad7fd
Author: RobertoSimonini1 <roberto.simonini@endor.studio>
Date:   Tue Jun 11 17:39:51 2024 +0200

    made sidebar always visible on settings page (#5823)

    I made the sidebar/menu always visible on settings page even if the
    navigationDrawerOpen is false
    This aims to fix #5811

commit b84042ddbb1b744d4b8647702d877ba99ee94d80
Author: Marie <51697796+ijreilly@users.noreply.github.com>
Date:   Tue Jun 11 15:53:17 2024 +0200

    Display and update fields from fromManyObjects relations in Show card (#5801)

    In this PR, we implement the display and update of fields from
    fromManyObjects (e.g update Employees for a Company).

    Product requirement
    - update should be triggered at each box check/uncheck, not at lose of
    focus

    Left to do in upcoming PRs
    - add the column in the table views (e.g. column "Employees" on
    "Companies" table view)
    - add "Add new" possibility when there is no records (as is currently
    exists for "one" side of relations:)
    <img width="374" alt="Capture d’écran 2024-06-10 à 17 38 02"
    src="https://github.com/twentyhq/twenty/assets/51697796/6f0cc494-e44f-4620-a762-d7b438951eec">

    - update cache after an update affecting other records (e.g "Listings"
    have one "Person"; if listing A belonged to Person A but then we
    attribute listing A to Person B, Person A is no longer owner of Listing
    A. For the moment that would not be reflected immediatly leading, to
    potential false information if information is accessed from cache)
    - try to get rid of the glitch - we also have it on the task page
    example. (probably) due to the fact that we are using a recoil state to
    read, update then re-read

    https://github.com/twentyhq/twenty/assets/51697796/54f71674-237a-4946-866e-b8d96353c458

commit 4994a9c3a9ec581c5af803a8646af6c3bd54f031
Author: brendanlaschke <brendan.laschke@googlemail.com>
Date:   Tue Jun 11 15:31:48 2024 +0200

    Api docs remove Relations from Post & Patch (#5817)

    * Remove relations where they cannot be used
    * Removed duplicated schema for findMany
    * Reuse schema for Relation variant to reduce size of sent json object

    closes #5778

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
    Co-authored-by: martmull <martmull@hotmail.fr>

commit 58fb86f2c337775f8e4b3c47622a7313ad7ef08a
Author: Kyriaki Darivaki <115654088+kiridarivaki@users.noreply.github.com>
Date:   Tue Jun 11 16:24:34 2024 +0300

    Added support for Links filtering (#5785)

    References #5741

    ---------

    Co-authored-by: kiridarivaki <k.darivaki03@gmail.com>

commit 63578e6480eefb3af444ca41404a6a850921f882
Author: Siddhant Rai <47355538+siiddhantt@users.noreply.github.com>
Date:   Tue Jun 11 18:54:23 2024 +0530

    fix: calendar tile fonts underlined (#5820)

    - fixes #5797

commit 5c15fcd249bc298b79a55eaa296528d0bcc6b8ea
Author: martmull <martmull@hotmail.fr>
Date:   Tue Jun 11 14:54:02 2024 +0200

    5805 typing issue in rest api (#5818)

    Fixed types for:
    - uuid
    - email
    - datetime
    - date
    - number
    - currency.amountMicros
    - select
    - multiSelect

    ## Before

    ![image](https://github.com/twentyhq/twenty/assets/29927851/4bfa3a6d-a26f-47e4-a46f-7a5582825482)

    ## After

    ![image](https://github.com/twentyhq/twenty/assets/29927851/0bbab32f-4172-4525-91d1-76c37f299ac0)

commit 710291238ead27953992e4f92bc8b73cebba6776
Author: TheUnspokenFifth <124464818+TheUnspokenFifth@users.noreply.github.com>
Date:   Tue Jun 11 04:54:19 2024 -0700

    Inline link chips cropped (#5810)

    Issue: [#5654](https://github.com/twentyhq/twenty/issues/5654)

    Changed chip vertical padding from 3px to 1px. This resulted in vertical
    size changing from 24px to 20px.

    ![image](https://github.com/twentyhq/twenty/assets/124464818/aaed1e57-91e3-4d98-91b5-5dd10b857c9f)

    ![image](https://github.com/twentyhq/twenty/assets/124464818/c16223b5-35f4-40b0-b0ad-828973bb47a2)

    ---------

    Co-authored-by: ktang520 <ktang520@gmail.com>
    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>
    Co-authored-by: Sage Bain <47053579+Shyesta@users.noreply.github.com>
    Co-authored-by: Shyesta <mrsixpaths@aol.com>

commit 07d07ff8764257355db5421b52bcff07f686e8bf
Author: Shashank Vishwakarma <shashank000s4@gmail.com>
Date:   Tue Jun 11 16:29:31 2024 +0530

    Fixed: Select fields now selects on pressing the enter key (#5576)

    Now while pressing the `Enter` button, the select field selects the
    relevant option.

    - Added a `handleKeyDown` function to set the `persistField` with the
    selected option.
    - Added an `onKeyDown` event on `DropdownMenuSearchInput` component, to
    trigger `handleKeyDown` when `Enter` is pressed.
    - Fixes: #5556

    ---------

    Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

commit 8a88bf41dd1a8332eaea8b526ecba08ac713c901
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Tue Jun 11 12:31:50 2024 +0200

    Fixed soft focus stuck (#5639)

    Soft focus could be stuck when exiting edit mode, in some cases it would
    prevent to have soft focus if just moving the mouse into a cell.

commit 25a38dc6936b85a02d5c33af5c3e6fb9837e1ee8
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Tue Jun 11 12:29:33 2024 +0200

    Added one request per column on board. (#5819)

    - Changed to one find many request per column on board.

commit 9307d206c5af33cac92858ed977e58bb0b7577b1
Author: martmull <martmull@hotmail.fr>
Date:   Tue Jun 11 12:08:21 2024 +0200

    Add authentication optional api url parameter (#5803)

commit af8c6373552fd64a93c3750722589e94048c6321
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Tue Jun 11 10:18:08 2024 +0200

    Temporary fix README (#5814)

    Emergency fix for broken readme images

commit ff1bca1816c8ce678846393c27a0c8a53a987cd0
Author: Ady Beraud <102751374+ady-beraud@users.noreply.github.com>
Date:   Tue Jun 11 10:45:17 2024 +0300

    Docs modifications (#5804)

    - Fixes #5504
    - Fixes #5503
    - Return 404 when the page does not exist
    - Modified the footer in order to align it properly
    - Removed "noticed something to change" in each table of content
    - Fixed the URLs of the edit module
    - Added the edit module to Developers
    - Fixed header style on the REST API page.
    - Edited the README to point to Developers
    - Fixed selected state when clicking on sidebar elements

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 3c5a4ba692ae0dfb595887bb74b3b836f52a8cd2
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Sun Jun 9 22:46:11 2024 +0200

    Handle Network errors in messaging sync (#5795)

    In this PR, I'm doing 2 things:
    - refresh connectedAccount token on message-list-fetch. It's currently
    only refresh while doing the messages-import. However messages-import
    stage are only triggered if new messages are detected (which could take
    days or week depending of the messageChannel activity). We should also
    refresh it while trying to fetch the list
    - handle Unhandled Gmail error code 500 with reason "backendError".
    These can occur on gmail side. In this case, we just retry later.

commit 01c0378b7a91c374af2d3ff2a7ae065d479092a1
Author: Charles Bochet <charles@twenty.com>
Date:   Sun Jun 9 09:59:55 2024 +0200

    Handle Network errors in messaging sync

commit e4a4499b7994841f25458aa513066dc416a5b206
Author: Charles Bochet <charles@twenty.com>
Date:   Sun Jun 9 01:27:43 2024 +0200

    Fix messaging sharing inconsitency

commit 9ebf7a61ab4e2436bb287e0e51a57f8d658bc44d
Author: Charles Bochet <charles@twenty.com>
Date:   Sun Jun 9 00:56:59 2024 +0200

    Remove threadId defined assertion as it could not be in messaging sync

commit f2cd65557ebd2c4f2a80364ab2fbbfa1605a38bd
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Sun Jun 9 00:15:12 2024 +0200

    Remove messageId defined assertion as it could not be in messaging sync (#5784)

    Instead, we will log but ignore the message

commit d4610774fa7d60ff19ac671d317233fba5ccae43
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Sun Jun 9 00:10:18 2024 +0200

    Fix unclosable cell (#5776)

    In some cases we couldn't open a table cell if the soft focus was still
    on another.

commit 32804ec2965859073a92aa71a22d347cebf5352e
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Sun Jun 9 00:06:44 2024 +0200

    Disable prefetching on contributors page (website) (#5783)

    Disable prefetching on contributors list as it spams the server

commit d7ce42cff75c15da1ce9d1f2096bce923bc08cc2
Author: Charles Bochet <charles@twenty.com>
Date:   Sat Jun 8 23:46:52 2024 +0200

    Throw exception when error code is not defined in messaging import

commit a79b25640901071d822dd06cbe35898f52480b1a
Author: Charles Bochet <charles@twenty.com>
Date:   Sat Jun 8 23:18:17 2024 +0200

    Throw exception when error code is not defined in messaging import

commit afac4de67997a91ea8057261074670f461f22402
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Sat Jun 8 22:59:59 2024 +0200

    Throw exception when an unknown error is caught on messaging sync (#5782)

    As per title for this one ;)

commit 7f9fdf3ff68529cdc1ef2c6213f06b19300f0145
Author: Charles Bochet <charlesBochet@users.noreply.github.com>
Date:   Sat Jun 8 11:07:36 2024 +0200

    Fix performance issue mail (#5780)

    In this PR, I'm mainly doing two things:
    - uniformizing messaging-messages-import and
    messaging-message-list-fetch behaviors (cron.job and job)
    - improving performances of these cron.jobs by not triggering the jobs
    if the stage is not relevant
    - making sure these jobs have same signature (workspaceId +
    messageChannelId)

commit 520a883c7379d76dce9ed6620b7db2647dc91b16
Author: Pacifique LINJANJA <pacilinja2@gmail.com>
Date:   Fri Jun 7 17:23:32 2024 +0200

    Fix the "Delete" action on the Kaban view (#5646)

    # This PR

    - Fixes #5520
    - Created a shared confirmation modal component for the `ContextMenu`
    and the `ActionBar` components to avoid code repetition - with its
    storybook file

    Looking forward to getting feedback @charlesBochet

commit e9cf4497067ee66d5f74c13cab4b8db0a1ada3cd
Author: RobertoSimonini1 <roberto.simonini@endor.studio>
Date:   Fri Jun 7 17:09:09 2024 +0200

    Search dialog fullscreen on mobile (#5765)

    I changed the visibility of the search dialog to make it full screen on
    mobile, this should already be ok but I couldn't try it on mobile, so I
    just used devtools, if I need to do something else on this PR just tell
    me :)
    This PR aims to fix: #5746

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 908990315d0056f0b67778971d17e32d0b137667
Author: brendanlaschke <brendan.laschke@googlemail.com>
Date:   Fri Jun 7 14:53:12 2024 +0200

    Datamodel overview improvements (#5771)

    closes #5586
    <img width="707" alt="Bildschirmfoto 2024-06-07 um 14 05 39"
    src="https://github.com/twentyhq/twenty/assets/48770548/af5fa200-d71b-41ed-9478-35becfc306a3">

commit 1208fed7b30eb9dd97e5d044b9d8943964da65cd
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Fri Jun 7 14:45:24 2024 +0200

    Add endpoint to create postgres credentials (#5767)

    First step for creating credentials for database proxy.

    In next PRs:
    - When calling endpoint, create database Postgres on proxy server
    - Setup user on database using postgresCredentials
    - Build remote server on DB to access workspace data

commit e478c68734ccc15569bd129469752c1d5944334f
Author: RobertoSimonini1 <roberto.simonini@endor.studio>
Date:   Fri Jun 7 11:23:33 2024 +0200

    Switched current Sort Button with same used for filters and options ones (#5764)

    I changed the Sort button used in the Header using
    StyledHeaderDropdownButton component (the same used for Filter and
    Options') instead of LightButton.
    This PR aims to fix the issue: #5743

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit c76bc4729d2ec29dcb5b07c43b0e333cc2ab4467
Author: Hinson Chan <yhc3141@gmail.com>
Date:   Thu Jun 6 07:41:22 2024 -0700

    [4725] Inverted Variants of buttons (#5671)

    Resolves #4725

    ---------

    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 9567103d5fb0c263564d78e3a1c101e455b8b7b6
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Thu Jun 6 11:00:46 2024 +0200

    Remove check unique position (#5760)

    Currently position can be the same for records displayed in a board
    view.
    Removing unicity check until we find a new startegy.

commit 9f6a6c3282c158cbfecf1f63df97c2bbdb715bf8
Author: martmull <martmull@hotmail.fr>
Date:   Wed Jun 5 18:16:53 2024 +0200

    5622 add a syncemail onboarding step (#5689)

    - add sync email onboarding step
    - refactor calendar and email visibility enums
    - add a new table `keyValuePair` in `core` schema
    - add a new resolved boolean field `skipSyncEmail` in current user

    https://github.com/twentyhq/twenty/assets/29927851/de791475-5bfe-47f9-8e90-76c349fba56f

commit fda0d2a1708a3b3f48b795bd2f3e64f928a37cb1
Author: Weiko <corentin@twenty.com>
Date:   Wed Jun 5 18:14:09 2024 +0200

    Fix edit button missing in activity editor (#5757)

    ## Context
    Fixing `setIsFocused is not a function` and the fact that edit buttons
    were not showing up anymore.
    A new FieldFocusContextProvider has been introduced and added to
    RecordInlineCell but not ActivityTargetsInlineCell. This should fix the
    issue.

    <img width="523" alt="Screenshot 2024-06-05 at 17 42 07"
    src="https://github.com/twentyhq/twenty/assets/1834158/1c1f919e-3829-4e40-b573-3b1b75b7c16f">

commit 89f914ebf846b995733abc30dee4973905e3134e
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Wed Jun 5 17:01:13 2024 +0200

    Improve csv import (#5753)

    This is a small PR to improve the design of our CSV import.

    I noticed the back button that was implemented in a recent PR #5625 was
    broken and would need to be fixed (e.g. try to come back to the very
    first upload step from the sheet selection step). cc @shashankvish0010
    if you want to give a stab at fixing your PR that'd be amazing, thanks!

commit e9d3ed99ca30dab4808eddc0e87e364eba018ba0
Author: martmull <martmull@hotmail.fr>
Date:   Wed Jun 5 16:35:14 2024 +0200

    5078 ability to invite team members (#5750)

    ## Added features
    - update team member setting page
    - add a section to send invitation by email
    - add a new invitation email
    - update email font to 'Trebuchet MS' as Google Inter font is not
    working, we need to use a web safe font
    https://templates.mailchimp.com/design/typography/

    ## Demo

    https://github.com/twentyhq/twenty/assets/29927851/c731d883-1599-4281-87e3-0671f36994ae

    ## Invitation Email

    ![image](https://github.com/twentyhq/twenty/assets/29927851/d569fc64-fa0c-4769-a3dd-1193a12b495c)

commit 3c4b497846a1f85a3d24f70e1d94b1e171267ceb
Author: Leo157 <76474110+wcgzorro@users.noreply.github.com>
Date:   Wed Jun 5 22:15:00 2024 +0800

    fix:person head photo (#5749)

    before:

    https://github.com/twentyhq/twenty/assets/76474110/2d9d3e60-886e-4ad3-a1a3-b9484e49791c

    after:

    https://github.com/twentyhq/twenty/assets/76474110/877a15e6-ca72-450a-b25c-b4b323656d7f

commit 126d9ef2e6b5eaed65cdf000dbb0d13c6d84d412
Author: Weiko <corentin@twenty.com>
Date:   Wed Jun 5 15:26:27 2024 +0200

    Bump versions to 0.12.2 (#5751)

commit 5164c7fd3c502bc9cb22ec9d1b6fd27e699a21b4
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Wed Jun 5 11:07:48 2024 +0200

    Update icon and fix relation creation (#5742)

    A minor fix (update icon and fix relation creation when creating a
    relation in right drawer)

commit 6d869297b558b55a0a7077ac7280ef9f0acfdd2c
Author: Marie <51697796+ijreilly@users.noreply.github.com>
Date:   Wed Jun 5 11:06:22 2024 +0200

    Fix select field options update (#5736)

    Update of select fields options was failing if we deleted an option that
    was used for at least one row: former code would not update the value to
    null but leave it to the no-longer-allowed value.

commit 1bbfc0b715cc75dcd48dc2b1d688033a602ce95c
Author: Marie <51697796+ijreilly@users.noreply.github.com>
Date:   Tue Jun 4 22:27:27 2024 +0200

    Add unicity constraint between object nameSingular and namePlural (#5737)

commit bb7d94a455e2b1a0ddf9fd129c57c15693a72570
Author: gitstart-twenty <140154534+gitstart-twenty@users.noreply.github.com>
Date:   Tue Jun 4 11:04:57 2024 -0400

    Create ESLint rule to discourage usage of navigate() and prefer Link (#5642)

    ### Description
    Create ESLint rule to discourage usage of navigate() and prefer Link

    ### Refs
    #5468

    ### Demo

    ![Capture-2024-05-29-112852](https://github.com/twentyhq/twenty/assets/140154534/28378c09-86bb-49d3-9e9a-49aa1c07ad11)

    ![Capture-2024-05-29-112843](https://github.com/twentyhq/twenty/assets/140154534/2c05ea92-e19b-49ae-acb9-07f6ec9182ab)

    Fixes #5468

    ---------

    Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
    Co-authored-by: v1b3m <vibenjamin6@gmail.com>
    Co-authored-by: Matheus <matheus_benini@hotmail.com>
    Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

commit 234e0622327eb977bc8d694101418feecbcd3ae6
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Tue Jun 4 16:52:57 2024 +0200

    Refactor sync sub status and throttle (#5734)

    - Rename syncSubStatus to syncStage
    - Rename ongoingSyncStartedAt to syncStageStartedAt
    - Remove throttlePauseUntil from db and compute it with
    syncStageStartedAt and throttleFailureCount

commit ce1469cf0cbefc12e2106983b531b6dfa046502e
Author: Anand Krishnan M J <87609792+Anand-Krishnan-M-J@users.noreply.github.com>
Date:   Tue Jun 4 19:25:02 2024 +0530

    [ Fix ] [ Issue - 5701 ] Mouse down and drag is selecting records, while file import modal is open (#5716)

    ## Changes Made

    - Prevent mouse event propagation outside modal
    - Prevent text selection inside the modal during drag event

    ## Related Issue

    https://github.com/twentyhq/twenty/issues/5701

    ## Evidence

    ### Before

    https://github.com/twentyhq/twenty/assets/87609792/c15c2a1d-5e3b-4fc5-a98a-638615e8d7b9

    ### After

    Actual drag operation is done, but not visible in the video

    https://github.com/twentyhq/twenty/assets/87609792/f2e68e67-1eb1-4a15-83c8-8cb4313bcaa1

    ---------

    Co-authored-by: Thomas Trompette <thomas.trompette@sfr.fr>

commit fa70f9cfc7cf8b2889015e3f3cfd03c2a527b233
Author: Jeet Desai <52026385+jeet1desai@users.noreply.github.com>
Date:   Tue Jun 4 18:47:46 2024 +0530

    Fix: Reduce spacing gap between Task title and subtitle (#5711)

    Fixes: #5669

    ---------

    Co-authored-by: Thomas Trompette <thomas.trompette@sfr.fr>

commit 5e32cb215e9174e63e9e50c41b6fcdaa26bfc4b1
Author: Lucas Bordeau <bordeau.lucas@gmail.com>
Date:   Tue Jun 4 15:10:56 2024 +0200

    Fix 5598 - View field creation (#5732)

    - Fix duplicate view field creation
    - Fix redirect to proper settings data model page
    - Refetch view fields after field creation (temporary solution)

    Fixes  https://github.com/twentyhq/twenty/issues/5598

commit c5d5d183476c09a8a6bb4c45f49a711636c7e53d
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Tue Jun 4 15:02:19 2024 +0200

    Remove checkbox padding (#5733)

    Regression has been introduced by this PR
    https://github.com/twentyhq/twenty/pull/4883

    Production

    <img width="885" alt="Capture d’écran 2024-06-04 à 14 51 19"
    src="https://github.com/twentyhq/twenty/assets/22936103/ad6d8490-815c-485a-b9c0-945aa7fba45c">

    After fix

    <img width="885" alt="Capture d’écran 2024-06-04 à 14 51 41"
    src="https://github.com/twentyhq/twenty/assets/22936103/72fd6094-21c2-4737-bd20-0faf9adceb38">

commit 25f4e44aec8b630501d7aecae6f7773c0b235db3
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Tue Jun 4 14:10:58 2024 +0200

    Add backfill position job by workspace (#5725)

    - Removing existing listener that was backfilling created records
    without position
    - Switch to a job that backfill all objects within workspace
    - Adapting `FIND_BY_POSITION` so it can fetch objects without position.
    Currently we needed to input a number

commit b1f12d72570621693a984a55d2f4f9134dc8abae
Author: Thomas Trompette <thomas.trompette@sfr.fr>
Date:   Tue Jun 4 13:26:40 2024 +0200

    Fix input position backfill (#5731)

    Some objects do not have position field so they should not be backfilled

commit a4e5e486f58beab63e38eea7d15203f8413649a8
Author: Marie <51697796+ijreilly@users.noreply.github.com>
Date:   Tue Jun 4 13:02:38 2024 +0200

    Fix boolean field in table view (#5728)

    Boolean field was not working in display (unfocused) mode.

    Before fix
    <img width="269" alt="Capture d’écran 2024-06-04 à 11 50 55"
    src="https://github.com/twentyhq/twenty/assets/51697796/9140f71c-41e4-44b4-9514-933edab33dd6">

    https://github.com/twentyhq/twenty/assets/51697796/831c34a7-b91c-4df9-81d8-ced01cc7b9b6

    After fix
    <img width="284" alt="Capture d’écran 2024-06-04 à 11 51 01"
    src="https://github.com/twentyhq/twenty/assets/51697796/7e4a089d-0c55-4624-a5d3-44c00681c6ca">

    https://github.com/twentyhq/twenty/assets/51697796/b5103f39-64c1-4ace-ab32-353aba364471

commit 719cce1ea2b3b05aab1f2033d8cae6e9d8d81f3c
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Tue Jun 4 12:16:47 2024 +0200

    Improve design of fields menu (#5729)

    Improve design of field options menu and redirect to the right object
    edit page

    <img width="215" alt="Screenshot 2024-06-04 at 12 15 43"
    src="https://github.com/twentyhq/twenty/assets/6399865/a8da18a1-49d4-40e3-b2cd-3a1a384366b2">

commit d964f656f99f8659e46ac6a46528f77563acdb35
Author: Félix Malfait <felix.malfait@gmail.com>
Date:   Tue Jun 4 11:44:54 2024 +0200

    Fix field input offset (#5726)

    Fix issue introduced in https://github.com/twentyhq/twenty/pull/5426

    It's not a beautiful solution. Maybe one day we should have a dedicated
    component for title but it also comes with downsides (lot of code to
    copy paste, such as "esc" to leave field, copy button, etc.). This one
    doesn't create less debt in my opinion. Once we have the layout/widget
    system we might have a dedicated widget type and the right abstraction
    layers

commit cd9ac529a573dd1fe9be84b84f309233f5fcb036
Author: gitstart-twenty <140154534+gitstart-twenty@users.noreply.github.com>
Date:   Tue Jun 4 04:51:33 2024 -0400

    Add storybook tests for User & Metadata loading (#5650)

    ### Description
    Add storybook tests for User & Metadata loading

    ### Refs
    #5590

    ### Demo

    https://github.com/twentyhq/twenty/assets/140154534/2434fc50-8d95-420b-9f62-6fbdf43ce9e5

    Fixes #5590

    ---------

    Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
    Co-authored-by: v1b3m <vibenjamin6@gmail.com>
    Co-authored-by: Thiago Nascimbeni <tnascimbeni@gmail.com>

commit 3f9f2c3ba611b082f0b4f230283eeef937fbd729
Author: bosiraphael <71827178+bosiraphael@users.noreply.github.com>
Date:   Tue Jun 4 10:29:05 2024 +0200

    5620 implement throttle logic for message and calendar sync (#5718)

    Closes #5620 and improve messages filters

commit 32d4b37d372eaa8bf13e397e1b359fb9ee383d34
Author: Indrakant D <60315832+its-id@users.noreply.github.com>
Date:   Tue Jun 4 13:33:07 2024 +0530

    Change Navigation Font Weight (#5704)

    fixes [#5665](https://github.com/twentyhq/twenty/issues/5665).

    | Before | After |
    | --- | --- |
    | <img width="257" alt="Screenshot 2024-06-02 at 1 22 09 AM"
    src="https://github.com/twentyhq/twenty/assets/60315832/b78da8fa-cea8-45af-b32c-864d6bce050a">
    | <img width="248" alt="Screenshot 2024-06-02 at 1 21 01 AM"
    src="https://github…
JarWarren added a commit to funnelmink/crm that referenced this pull request Aug 9, 2024
* Add label to mocked connections (#5858)

<img width="865" alt="Capture d’écran 2024-06-13 à 17 48 03"
src="https://github.com/twentyhq/twenty/assets/22936103/2d313448-fbd5-4ff1-a65b-afd4df86117a">

* fix timeline activity pagination overflow (#5861)

## Before
<img width="250" alt="Screenshot 2024-06-13 at 18 51 56"
src="https://github.com/twentyhq/twenty/assets/1834158/d6c7f5fa-3cc7-48bc-a711-29345e93af92">


## After
<img width="284" alt="Screenshot 2024-06-13 at 18 51 41"
src="https://github.com/twentyhq/twenty/assets/1834158/25029e0a-c1b0-4458-b715-dbab217eeee0">

* Add log for errors on message import (#5863)

As per title :)

* Support orderBy as array (#5681)

closes: #4301

---------

Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

* fix: text field overflow beyond cell limits (#5834)

- fixes #5775 


https://github.com/twentyhq/twenty/assets/47355538/9e440018-ec1e-4faa-a9f3-7131615cf9f1

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Collapsible menu (#5846)

A mini PR to discuss with @Bonapara tomorrow

Separating remote objects from others and making the menu collapsible
(style to be changed)
<img width="225" alt="Screenshot 2024-06-12 at 23 25 59"
src="https://github.com/twentyhq/twenty/assets/6399865/b4b69d36-6770-43a2-a5e8-bfcdf0a629ea">

Biggest issue is we don't use local storage today so the collapsed state
gets lost.
I see we have localStorageEffect with recoil. Maybe store it there?
Seems easy but don't want to introduce a bad pattern.


Todo:
- style update
- collapsible favorites
- persistent storage

* Fix workspaceLogo in invite-email (#5865)

## Fixes wrong image url in email 

![image](https://github.com/twentyhq/twenty/assets/29927851/5fb1524b-874d-4723-8450-0284382bbeb3)

## Done
- duplicates and adapt `getImageAbsoluteURIOrBase64` from `twenty-front`
in `twenty-email`
- send `SERVER_URL` to email builder

* Fix error log on message import (#5866)

Modify #5863 to log the connected account id rather than the message
channel id to be consistent with the other logs and stringify the error.

* Fix sentry error (#5848)

Fixes
https://twenty-v7.sentry.io/issues/5363536663/?environment=prod&project=4507072499810304&query=is%3Aunresolved+issue.priority%3A%5Bhigh%2C+medium%5D&referrer=issue-stream&statsPeriod=7d&stream_index=0

- handle error properly in twenty-server
- display backend error message

* Fix overflow on notes (#5853)

##before

![image](https://github.com/twentyhq/twenty/assets/29927851/c1784340-0741-4701-b11f-d2cf50fab9fb)

##after

![image](https://github.com/twentyhq/twenty/assets/29927851/c095eaf1-15c4-4e68-8cff-c175f99856d0)

* Record horizontal scrolling mobile (#5843)

I have fixed the scrolling the record container page on mobile making it
hidden.
This PR aims to fix #5745

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* fix: 404 generate API key link (#5871)

- update api key link in the docs

* Wrote 0.20 changelog (#5870)

Created the changelog for 0.2

* Fix website docs (#5873)

There was a 500 on the playground and the switch between core and
metadata

* Added Thai Baht support (#5881)

Hey, saw Thai Baht support was
[requested](https://github.com/twentyhq/twenty/issues/5876) and thought
it was a cool first issue to get to know the project a little bit.

* feat: Enhancements to MessageQueue Module with Decorators (#5657)

### Overview

This PR introduces significant enhancements to the MessageQueue module
by integrating `@Processor`, `@Process`, and `@InjectMessageQueue`
decorators. These changes streamline the process of defining and
managing queue processors and job handlers, and also allow for
request-scoped handlers, improving compatibility with services that rely
on scoped providers like TwentyORM repositories.

### Key Features

1. **Decorator-based Job Handling**: Use `@Processor` and `@Process`
decorators to define job handlers declaratively.
2. **Request Scope Support**: Job handlers can be scoped per request,
enhancing integration with request-scoped services.

### Usage

#### Defining Processors and Job Handlers

The `@Processor` decorator is used to define a class that processes jobs
for a specific queue. The `@Process` decorator is applied to methods
within this class to define specific job handlers.

##### Example 1: Specific Job Handlers

```typescript
import { Processor, Process, InjectMessageQueue } from 'src/engine/integrations/message-queue';

@Processor('taskQueue')
export class TaskProcessor {

  @Process('taskA')
  async handleTaskA(job: { id: string, data: any }) {
    console.log(`Handling task A with data:`, job.data);
    // Logic for task A
  }

  @Process('taskB')
  async handleTaskB(job: { id: string, data: any }) {
    console.log(`Handling task B with data:`, job.data);
    // Logic for task B
  }
}
```

In the example above, `TaskProcessor` is responsible for processing jobs
in the `taskQueue`. The `handleTaskA` method will only be called for
jobs with the name `taskA`, while `handleTaskB` will be called for
`taskB` jobs.

##### Example 2: General Job Handler

```typescript
import { Processor, Process, InjectMessageQueue } from 'src/engine/integrations/message-queue';

@Processor('generalQueue')
export class GeneralProcessor {

  @Process()
  async handleAnyJob(job: { id: string, name: string, data: any }) {
    console.log(`Handling job ${job.name} with data:`, job.data);
    // Logic for any job
  }
}
```

In this example, `GeneralProcessor` handles all jobs in the
`generalQueue`, regardless of the job name. The `handleAnyJob` method
will be invoked for every job added to the `generalQueue`.

#### Adding Jobs to a Queue

You can use the `@InjectMessageQueue` decorator to inject a queue into a
service and add jobs to it.

##### Example:

```typescript
import { Injectable } from '@nestjs/common';
import { InjectMessageQueue, MessageQueue } from 'src/engine/integrations/message-queue';

@Injectable()
export class TaskService {
  constructor(
    @InjectMessageQueue('taskQueue') private readonly taskQueue: MessageQueue,
  ) {}

  async addTaskA(data: any) {
    await this.taskQueue.add('taskA', data);
  }

  async addTaskB(data: any) {
    await this.taskQueue.add('taskB', data);
  }
}
```

In this example, `TaskService` adds jobs to the `taskQueue`. The
`addTaskA` and `addTaskB` methods add jobs named `taskA` and `taskB`,
respectively, to the queue.

#### Using Scoped Job Handlers

To utilize request-scoped job handlers, specify the scope in the
`@Processor` decorator. This is particularly useful for services that
use scoped repositories like those in TwentyORM.

##### Example:

```typescript
import { Processor, Process, InjectMessageQueue, Scope } from 'src/engine/integrations/message-queue';

@Processor({ name: 'scopedQueue', scope: Scope.REQUEST })
export class ScopedTaskProcessor {

  @Process('scopedTask')
  async handleScopedTask(job: { id: string, data: any }) {
    console.log(`Handling scoped task with data:`, job.data);
    // Logic for scoped task, which might use request-scoped services
  }
}
```

Here, the `ScopedTaskProcessor` is associated with `scopedQueue` and
operates with request scope. This setup is essential when the job
handler relies on services that need to be instantiated per request,
such as scoped repositories.

### Migration Notes

- **Decorators**: Refactor job handlers to use `@Processor` and
`@Process` decorators.
- **Request Scope**: Utilize the scope option in `@Processor` if your
job handlers depend on request-scoped services.

Fix #5628

---------

Co-authored-by: Weiko <corentin@twenty.com>

* 5236 expandable list leave options when editing (#5890)

Fixes https://github.com/twentyhq/twenty/issues/5236
## After

![image](https://github.com/twentyhq/twenty/assets/29927851/5f0f910c-11b0-40ce-9c59-34e7ce0c2741)

* 5581 get httpsapitwentycomrestmetadata relations not working (#5867)

Filtering relations is not allowed
(see`packages/twenty-server/src/engine/metadata-modules/relation-metadata/dtos/relation-metadata.dto.ts`)
so we remove filtering for find many relation

we also fixed some bug in result structure and metadata open-api schema

* Fix verticale line timeline activity (#5894)

Before 

<img width="400" alt="Capture d’écran 2024-06-17 à 10 23 17"
src="https://github.com/twentyhq/twenty/assets/22936103/01408d7b-9a6c-4a21-9f08-c8cf304e2ea0">

After

<img width="400" alt="Capture d’écran 2024-06-17 à 10 05 39"
src="https://github.com/twentyhq/twenty/assets/22936103/df384726-bbf9-4828-ad47-d1c91724947d">

* Added and optimized missing RatingFieldDisplay component (#5904)

The display for Rating field type was missing, I just added it based on
RatingInput in readonly mode and optimized a bit for performance also.

Fixes https://github.com/twentyhq/twenty/issues/5900

* Fix secondaryLinks field input (#5911)

PR https://github.com/twentyhq/twenty/pull/5785/files broke links
update.

Also, dropdown "Add link" will be displayed only if a link is already
added. Otherwise, it should be a normal input.

* add multiple filters of same FieldMetadataType (#5892)

fixes: #5378

* Add South Korean won to currency codes (#5914)

Greetings from Seoul! I found this amazing project a few days ago, and
trying to introduce it to my team. However there is a tiny but
significant problem, that South Korean won is not available in twenty.

So I added `KRW` to the enum `CurrencyCode` and the constant
`SETTINGS_FIELD_CURRENCY_CODES`. I tested it locally and apparently
works fine.

* Upgrade pg graphql version to 1.5.6 (#5937)

- update `pg_graphql` version doc
- update `pg_graphql` version to 1.5.6

* Add loader and transition for details page tabs (#5935)

Closes https://github.com/twentyhq/twenty/issues/5656



https://github.com/twentyhq/twenty/assets/22936103/3e4beea2-9aa9-4015-bb99-ee22adb53b63

* website / Fix broken links, slow loading, and prod errors (#5932)

The code is in a bad state, this is just fixing it but not improving the
structure

* 5582 get httpsapitwentycomrestmetadata objects filters dont work (#5906)

- Remove filters from metadata rest api
- add limite before and after parameters for metadata
- remove update from metadata relations
- fix typing issue
- fix naming
- fix before parameter

---------

Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

* Add http status to graphql errors (#5896)

Graphql errors are not properly filtered by our handler. We still
receive errors like `NOT_FOUND` in sentry while they should be filtered.
Example
[here](https://twenty-v7.sentry.io/issues/5490383016/?environment=prod&project=4507072499810304&query=is%3Aunresolved+issue.priority%3A%5Bhigh%2C+medium%5D&referrer=issue-stream&statsPeriod=7d&stream_index=6).

We associate statuses with errors in our map
`graphQLPredefinedExceptions` but we cannot retrieve the status from the
error.

This PR lists the codes that should be filtered.

To test:
- call `findDuplicates` with an invalid id
- before, server would breaks
- now the error is simply returned

* Handle no concurrency option (#5952)

Fix error in local `teamConcurrency must be an integer between 1 and
1000`

* Favicons are being re-rendered on hover (#5849)

### Description

Favicons are being re-rendered on hover

### Refs

#3523

### Demo


https://www.loom.com/share/e3944d940a014283af8c26baac1fed57?sid=e3e96a81-3a54-4969-8602-99c64bb3ffe7

Fixes #3523

---------

Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
Co-authored-by: v1b3m <vibenjamin6@gmail.com>
Co-authored-by: Thiago Nascimbeni <tnascimbeni@gmail.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Add a ⏎ shortcut on Select options (#5641)

fixes #5540 

Added onkeyDown to 
1. Create new option and 
2. Move focus to it.

[screen-capture
(6).webm](https://github.com/twentyhq/twenty/assets/69167444/ede54ad8-22db-4b09-9617-4d999c6c08c7)

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Added a mechanism to reset error boundary on page change. (#5913)

Previously the error boundary component was re-rendering with the same
state as long as we stayed in the same router, so for page change inside
an index container, it would stay on error state.

The fix is to memorize the location the error page is on during its
first render, and then to reset the error boundary if it gets
re-rendered with a different location even in the same index container.

Fixes : #3592

* fix(twenty-front): update DateTimeInput styles to apply top border radius to date picker (#5946)

update DateTimeInput styled components to prevent the StyledInput from
overflowing out of it's parent container

<img width="860" alt="Screenshot 2024-06-19 at 9 55 04 AM"
src="https://github.com/twentyhq/twenty/assets/19223383/8c5daf6a-9eb6-4ecd-a2e9-aa2ba8db3874">



Fixes #5940

* (5943) Match country selector button's background to phone number input's background (#5956)

Fixes #5943

### Before
Light
<img width="218" alt="Screenshot 2024-06-19 at 12 37 22 PM"
src="https://github.com/twentyhq/twenty/assets/57673080/981d1877-be4e-4071-9a8d-9d0ed7e933ab">
Dark
<img width="223" alt="Screenshot 2024-06-19 at 12 39 42 PM"
src="https://github.com/twentyhq/twenty/assets/57673080/a3730ef5-21ba-4d90-998d-d330aec350ad">


### After
Light
<img width="216" alt="Screenshot 2024-06-19 at 12 39 00 PM"
src="https://github.com/twentyhq/twenty/assets/57673080/eef3b743-1b28-43a5-8c1c-bd944a4915c7">
Dark
<img width="228" alt="Screenshot 2024-06-19 at 12 39 29 PM"
src="https://github.com/twentyhq/twenty/assets/57673080/5bf10e51-5a07-4d55-99f1-734517b22781">

* [Bug] Put back subject is email right drawer  (#5955)

Fix https://github.com/twentyhq/twenty/issues/5903

* Data Skeleton Loading on Indexes (#5828)

### Description
Data Skeleton Loading on Indexes

### Refs
#4459

### Demo


https://github.com/twentyhq/twenty/assets/140154534/d9c9b0fa-2d8c-4b0d-8d48-cae09530622a


Fixes #4459

---------

Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
Co-authored-by: v1b3m <vibenjamin6@gmail.com>
Co-authored-by: Matheus <matheus_benini@hotmail.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* 5934 create alert banner component (#5950)

Closes #5934

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Fix reconnect google account bug (#5905)

Update syncStage to FULL_MESSAGE_LIST_FETCH_PENDING when reconnecting
the account to trigger a full sync on the next cron iteration.

* 5898 Create a cron to monitor messageChannelSyncStatus (#5933)

Closes #5898

* Feat : Introduced Delay Options for Tooltip (#5766)

Fixes https://github.com/twentyhq/twenty/issues/5727

---------

Co-authored-by: Rushikesh Tarapure <rushikeshtarapure@gofynd.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* add object id column to csv export (#5971)

closes: #5893

---------

Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

* fix: Column header menu Filter button (#5973)

fixes: #5957



https://github.com/twentyhq/twenty/assets/13139771/51d42aa5-c774-4cbe-adca-b95ea6e17bbd

* Fix date picker wrong on certain timezones (#5972)

Timezone with a negative offset weren't working good with date pickers.

I split the logic for display and parsing between date only and
datetime.

Date time is sending and displaying using timezone, and date only is
sending and displaying by forcing the date to take its UTC day and month
and 00:00:00 time.

This way its consistent across all timezones.

* Add the support of Empty and Non-Empty filter (#5773)

* Fix(view): `Create` Button is not visible when creating `Kanban` View (#5969)

Closes #5915 

This issue occurs only when there is no select field.

The user then creates a new one in settings and returns back to the view
picker.
And the bug arises, it because `viewPickerKanbanFieldMetadataId` is not
being set correctly.

When a user navigate to settings, the dirty state should be set to
false. As a result, after re-rendering the view picker component, it
triggers the effect to set `viewPickerKanbanFieldMetadataId`

---------

Co-authored-by: Achsan <achsanh@gmail.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Add disabled style on non-draggable menu items (#5974)

Closes https://github.com/twentyhq/twenty/issues/5653

<img width="256" alt="Capture d’écran 2024-06-20 à 17 19 44"
src="https://github.com/twentyhq/twenty/assets/22936103/c9d7e58f-818b-44f2-8aa4-4d85c8e1b6be">
<img width="231" alt="Capture d’écran 2024-06-20 à 17 20 03"
src="https://github.com/twentyhq/twenty/assets/22936103/5e981e93-9d59-403a-bb6b-0ff75151ace2">

* Update LOGGER_DRIVER env var description (#5968)

Update the docs to accurately reflect `LoggerDriverType`. Using `sentry`
throws an error on startup.

```
export enum LoggerDriverType {
  Console = 'console',
}
```

Happy to change the wording of course.

* Fix: Selected Line Not Fully Highlighted in Blue (#5966)

Fixes: #5942

<img width="1517" alt="Screenshot 2024-06-19 at 5 07 35 PM"
src="https://github.com/twentyhq/twenty/assets/63531478/c88a98e9-7ce3-43fe-a496-1a5dfe796b81">

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* fix: background colors for record table (#5967)

# Summary
- Address issue #5959 
- Update background color on hover & click for record table

# Test Plan

![Kapture 2024-06-19 at 20 32
44](https://github.com/twentyhq/twenty/assets/10789158/18a58c09-040a-47e6-953d-aac6f3803486)

* Fix links chip design (#5963)

Fix https://github.com/twentyhq/twenty/issues/5938 and
https://github.com/twentyhq/twenty/issues/5655

- Make sure chip count is displayed
- Fix padding
- Fix background colors, border
- Add hover and active states

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Navigation Panel UI Sizing Changes (#5964)

## Fixes #5902 :
- [x] Navigation items' height should be risen to 28px.
> For clarity:
- [x] Also increased the height of NavigationDrawerSectionTitle to 28px
to match navigation item.
- [x] The gap between sections should be reduced to 12px
> Was already completed it seems.
- [x] The workspace switcher should be aligned with the navigation items

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* feat: add brazilian real currency (#5989)

Added support to Brazilian Real currency code, added the new code on
`CurrencyCode.ts` and on `SETTINGS_FIELD_CURRENCY_CODES`

* feat: drop calendar repository (#5824)

This PR is replacing and removing all the raw queries and repositories
with the new `TwentyORM` and injection system using
`@InjectWorkspaceRepository`.
Some logic that was contained inside repositories has been moved to the
services.
In this PR we're only replacing repositories for calendar feature.

---------

Co-authored-by: Weiko <corentin@twenty.com>
Co-authored-by: bosiraphael <raphael.bosi@gmail.com>
Co-authored-by: Charles Bochet <charles@twenty.com>

* [FlexibleSchema] Add IndexMetadata decorator (#5981)

## Context
Our Flexible Schema engine dynamically generates entities/tables/APIs
for us but was not flexible enough to build indexes in the DB. With more
and more features involving heavy queries such as Messaging, we are now
adding a new WorkspaceIndex() decorator for our standard objects (will
come later for custom objects). This decorator will give enough
information to the workspace sync metadata manager to generate the
proper migrations that will create or drop indexes on demand.
To be aligned with the rest of the engine, we are adding 2 new tables:
IndexMetadata and IndexFieldMetadata, that will store the info of our
indexes.

## Implementation

```typescript
@WorkspaceEntity({
  standardId: STANDARD_OBJECT_IDS.person,
  namePlural: 'people',
  labelSingular: 'Person',
  labelPlural: 'People',
  description: 'A person',
  icon: 'IconUser',
})
export class PersonWorkspaceEntity extends BaseWorkspaceEntity {
  @WorkspaceField({
    standardId: PERSON_STANDARD_FIELD_IDS.email,
    type: FieldMetadataType.EMAIL,
    label: 'Email',
    description: 'Contact’s Email',
    icon: 'IconMail',
  })
  @WorkspaceIndex()
  email: string;
```
By simply adding the WorkspaceIndex decorator, sync-metadata command
will create a new index for that column.
We can also add composite indexes, note that the order is important for
PSQL.
```typescript
@WorkspaceEntity({
  standardId: STANDARD_OBJECT_IDS.person,
  namePlural: 'people',
  labelSingular: 'Person',
  labelPlural: 'People',
  description: 'A person',
  icon: 'IconUser',
})
@WorkspaceIndex(['phone', 'email'])
export class PersonWorkspaceEntity extends BaseWorkspaceEntity {
```

Currently composite fields and relation fields are not handled by
@WorkspaceIndex() and you will need to use this notation instead
```typescript
@WorkspaceIndex(['companyId', 'nameFirstName'])
export class PersonWorkspaceEntity extends BaseWorkspaceEntity {
```
<img width="700" alt="Screenshot 2024-06-21 at 15 15 45"
src="https://github.com/twentyhq/twenty/assets/1834158/ac6da1d9-d315-40a4-9ba6-6ab9ae4709d4">

Next step: We might need to implement more complex index expressions,
this is why we have an expression column in IndexMetadata.
What I had in mind for the decorator, still open to discussion
```typescript
@WorkspaceIndex(['nameFirstName', 'nameLastName'], { expression: "$1 || ' ' || $2"})
export class PersonWorkspaceEntity extends BaseWorkspaceEntity {
```

---------

Co-authored-by: Charles Bochet <charles@twenty.com>

* Improve tests (#5994)

Our tests on FE are red, which is a threat to code quality. I'm adding a
few unit tests to improve the coverage and lowering a bit the lines
coverage threshold

* Fix infinite scroll issue on table (#5996)

We had an issue on infinite scroll on table view.
The fetch more logic was modifying isTableLastRowVisible state (which is
wrong, how could it know)? This was done to prevent loading too much
data at once. This was causing some race condition on
isTableLastRowVisible (as the table itself was also changing it
depending on the real visibility of the line)

I have remove this hacky usage of isTableLastRowVisible and replaced it
by a setTimeout to let the user some time to scroll and introduce a
throttle logic.

* Remove Right-Edge Gap in Table Cell Display (#5992)

fixes #5941 

![Screenshot from 2024-06-23
17-24-24](https://github.com/twentyhq/twenty/assets/59247136/ae67603a-824d-4e6b-b873-2d58e6296341)

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Refactor infiniteScoll to use debouncing (#5999)

Same as https://github.com/twentyhq/twenty/pull/5996 but with
useDebounced as asked in review

* Create feature flag for calendar V2 (#5998)

Create feature flag for calendar V2

* Turned on tooltip on kanban cards with shortDelay (#5991)

fixes: #5982 

Demo:


https://github.com/twentyhq/twenty/assets/58113282/6593381c-c01a-4259-9caa-8612247a9e95

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* feat: add australian dollar currency (#5990)

Hi Twenty team,
I'd love to have Australian dollar as an option in Twenty! Please let me
me know if I have missed anything I need to change to enable this.
Thanks for a a great product

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Add update chevron (#5988)

Fixes #5986 


1. Added right chevron to Fields Menu Item
<img width="735" alt="Screenshot 2024-06-21 at 5 59 46 PM"
src="https://github.com/twentyhq/twenty/assets/63531478/1515aba0-6732-424d-a0b3-5cc826a35b16">



2. Changed color of Hidden fields menu item chevron and stroke of left
chevron
<img width="735" alt="Screenshot 2024-06-21 at 6 21 30 PM"
src="https://github.com/twentyhq/twenty/assets/63531478/20952197-2f09-486c-a3bb-5b6c285a6996">

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Fix(view): Show Kanban View Creation (#5985)

# This PR
- Revise my previous work (PR #5969)
Because it would break the current logic and cause unexpected behavior.
(Issue #5979)
- Solve (Issue #5915) with another way

@lucasbordeau  What do you think about my current approach?
@JarWarren Please check it out—I'd love to get your feedback too!

---------

Co-authored-by: Achsan <achsanh@gmail.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Remove multi select usage (#6004)

As per title!

Also, I'm removing an incorrect logic in the enum migration runner that
takes care of the case where we have no defaultValue but non nullable
which is not a valid business case.

* Create new sync statuses and stages for calendar (#5997)

Create fields:
- syncStatus
- syncStage
- syncStageStartedAt

* 5951 create a command to trigger the import of a single message (#5962)

Closes #5951

---------

Co-authored-by: Charles Bochet <charles@twenty.com>

* Add calendar cron command on self-hosting-var.mdx (#6009)

To enable Google Calendar integration, you need to run `yarn
command:prod cron:calendar:google-calendar-sync` in the worker
container. However, currently, the self-hosting guide does not tell you
how to do it. If you just follow the guide, only Gmail integration will
be enabled. So I added the command for calendar sync cron on
self-hosting-var.mdx.

* Remove useless api position parameter (#6010)

- remove buggy addition of position parameter
- check created records are in first position by default

* Fix sign up broken because of missing workspace schema (#6013)

Allow workspace datasource factory to return null if the workspace
schema has not been created yet

* 5615 create messageongoingstalecron (#6005)

Closes #5615

* feat: Dynamic hook registration for WorkspaceQueryHooks (#6008)

#### Overview

This PR introduces a new API for dynamically registering and executing
pre and post query hooks in the Workspace Query Hook system using the
`@WorkspaceQueryHook` decorator. This approach eliminates the need for
manual provider registration, and fix the issue of `undefined` or `null`
repository using `@InjectWorkspaceRepository`.

#### New API

**Define a Hook**

Use the `@WorkspaceQueryHook` decorator to define pre or post hooks:

```typescript
@WorkspaceQueryHook({
  key: `calendarEvent.findMany`,
  scope: Scope.REQUEST,
})
export class CalendarEventFindManyPreQueryHook implements WorkspaceQueryHookInstance {
  async execute(userId: string, workspaceId: string, payload: FindManyResolverArgs): Promise<void> {
    if (!payload?.filter?.id?.eq) {
      throw new BadRequestException('id filter is required');
    }

    // Implement hook logic here
  }
}
```

This API simplifies the registration and execution of query hooks,
providing a more flexible and maintainable approach.

---------

Co-authored-by: Weiko <corentin@twenty.com>

* Fix billing signup when workspace does not exist (#6018)

* Removed performance optimization and put back previous system with recoil states for  edit mode and soft focus to avoid side effects. (#6019)

Fixes https://github.com/twentyhq/twenty/issues/6016

This was another side effect of the optimization made on
RecordTableCellContainer to avoid using recoil states, but which causes
too many unpredictable side effects.

I just put back the previous system which works well. We'll see how to
optimize it again later.

* Remove message-import cache when connectedAccount is removed (#6021)

* Upsert endpoint and CSV import upsert (#5970)

This PR introduces an `upsert` parameter (along the existing `data`
param) for `createOne` and `createMany` mutations.

When upsert is set to `true`, the function will look for records with
the same id if an id was passed. If not id was passed, it will leverage
the existing duplicate check mechanism to find a duplicate. If a record
is found, then the function will perform an update instead of a create.

Unfortunately I had to remove some nice tests that existing on the args
factory. Those tests where mostly testing the duplication rule
generation logic but through a GraphQL angle. Since I moved the
duplication rule logic to a dedicated service, if I kept the tests but
mocked the service we wouldn't really be testing anything useful. The
right path would be to create new tests for this service that compare
the JSON output and not the GraphQL output but I chose not to work on
this as it's equivalent to rewriting the tests from scratch and I have
other competing priorities.

* Add mutationMaximumRecordAffected to clientConfig (#6039)

We are exposing the server mutationMaximumRecordAffected value via
clientConfig so it can be used by the FE.

This is a first step for https://github.com/twentyhq/twenty/issues/6025

<img width="610" alt="Screenshot 2024-06-26 at 14 58 26"
src="https://github.com/twentyhq/twenty/assets/1834158/9d192976-fd22-45d2-bdaa-a8ff6bb90ca2">

* Don't display unmatched columns in csv import (#6037)

Adding a toggle so that, by default, we don't see dozens of fields but
only the field we matched, during the data validation step in csv export

<img width="785" alt="Screenshot 2024-06-26 at 13 25 36"
src="https://github.com/twentyhq/twenty/assets/6399865/ae558eb5-7461-4bc8-a836-ecff8b6d0dff">

* Fix search in csv import (#6045)

A mini quality of life improvements, the search was case-sensitive which
was frustrating

* Rename mutation maximum affected records (#6042)

As per my last comment on https://github.com/twentyhq/twenty/pull/6039,
we decided to rename this var

* Basic import for select in CSV (#6047)

Enables basic support for Select import and field matching in CSV. 
It's not pretty! But it's better than what we had before.
We should iterate on that quickly

<img width="591" alt="Screenshot 2024-06-26 at 18 41 16"
src="https://github.com/twentyhq/twenty/assets/6399865/99f67f39-3f0f-4074-aac6-3200954be08a">

* Add boolean with toggle in csv import (#6050)

Better UI when importing boolean via CSV (with a toggle)

* Improve gmail error handling by catching and throttling for 400 failedPrecondition (#6044)

Closes #5897

* Fix cache flush in messaging-channel-sync-status.service (#6024)

Fix cache flush in messaging-channel-sync-status.service

* hide delete button for selection over 100 - issue #6023 (#6030)

hide the "Delete" Button when more than 100 records are Selected

---------

Co-authored-by: Weiko <corentin@twenty.com>

* Relations many in table view (#5842)

Closes #5924.

Adding the "many" side of relations in the table view, and fixing some
issues (glitch in Multi record select, cache update after update).

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* feat: manually implement joinColumn (#6022)

This PR introduce a new decorator named `@WorkspaceJoinColumn`, the goal
of this one is to manually declare the join columns inside the workspace
entities, so we don't have to rely on `ObjectRecord` type.

This decorator can be used that way:

```typescript
  @WorkspaceRelation({
    standardId: ACTIVITY_TARGET_STANDARD_FIELD_IDS.company,
    type: RelationMetadataType.MANY_TO_ONE,
    label: 'Company',
    description: 'ActivityTarget company',
    icon: 'IconBuildingSkyscraper',
    inverseSideTarget: () => CompanyWorkspaceEntity,
    inverseSideFieldKey: 'activityTargets',
  })
  @WorkspaceIsNullable()
  company: Relation<CompanyWorkspaceEntity> | null;

  // The argument is the name of the relation above
  @WorkspaceJoinColumn('company')
  companyId: string | null;
```

* Update create-workspace.mdx (#6053)

Fix a dead link that was redirecting to a 400

* Manage isFocused state for table cells (#6058)

as per title

* Replace ObjectRecord<MessageChannelWorkspaceEntity> with MessageChannelWorkspaceEntity (#6059)

Replace ObjectRecord<MessageChannelWorkspaceEntity> with
MessageChannelWorkspaceEntity

* Fixed board card field max width (#6061)

Add a max-width to prevent overflow of board card fields

* fix navigation panel workspace picker padding (#6062)

## Before
<img width="223" alt="Screenshot 2024-06-27 at 15 23 26"
src="https://github.com/twentyhq/twenty/assets/1834158/18cb5e15-352f-4e65-9cff-6e396abe4318">

## After



<img width="229" alt="Screenshot 2024-06-27 at 15 23 07"
src="https://github.com/twentyhq/twenty/assets/1834158/53502c23-d9b4-4967-9e56-26e62e5e50ea">

<img width="225" alt="Screenshot 2024-06-27 at 15 25 23"
src="https://github.com/twentyhq/twenty/assets/1834158/fbb751ba-2bde-44f0-9c70-a9091e9b9012">

* Create fields for calendar and messaging settings v2 (#6049)

Create fields for calendar and messaging settings v2

* Change messaging batch size and cron pattern (#6063)

Change messaging batch size and cron pattern to accelerate messages
import

* 5901 refactor email and calendar auto contact creation to create them by batch (#6038)

Closes #5901

* Refactor messaging refresh access token (#6034)

- Put error handling outside of `refreshAndSaveAccessToken`
- return after failing to refresh access token in
`processMessageBatchImport`
- remove unnecessary token refresh in `processMessageListFetch`

* 5095 move onboardingstatus computation from frontend to backend (#5954)

- move front `onboardingStatus` computing to server side
- add logic to `useSetNextOnboardingStatus`
- update some missing redirections in
`usePageChangeEffectNavigateLocation`
- separate subscriptionStatus from onboardingStatus

* 0.21 changelog (#6072)

* Clarify storybook tests (#6073)

In this PR, I'm simplifying storybook setup:
1) Remove build --test configuration that prevent autodocs. We are not
using autodocs at all (the dev experience is not good enough), so I have
completely disabled it.
2) Clarify `serve` vs `test` vs `serve-and-test` configurations


After this PR:
- you can serve storybook in two modes: `npx nx run
twenty-front:storybook:serve:dev` and `npx nx run
twenty-front:storybook:serve:static`
- you can run tests agains an already served storybook (this is useful
in dev so you don't have to rebuild everytime to run tests): `npx nx run
twenty-front:storybook:test`
- you can conbine both: `npx nx run
twenty-front:storybook:serve-and-test:static`

* Fix tests

* Fix tests on RelationManyFieldDisplay

* Improve use set next onboarding state (#6076)

querying workspaceMembers may be slow leads to wrong
setNextOnboardingStatus value. So we added a resolved field in workspace
to get workspaceMemberCount directly

* Allow s3 credentials via env (#6066)

closes #5072

* Remove CSS modules (#6017)

CSS modules were used as a first test for performance optimization.

We later found out that Linaria was a better tradeoff.

This PR removes what was implemented in CSS modules and also the CSS
theme file that was created that was overlapping with the TS theme
files.

* feat: message cleaner drop repository (#6052)

This PR use the new `TwentyORM` for the message-cleaner module by using
the new injection system with `@InjectWorkspaceRepository`.

* fix: message cleaner find operator (#6080)

This PR fix an issue with the `IsNull()` find operator applied on
one-to-many relation, this one is not supported by TypeORM.
We can instead filter by an empty array to retrieve object with empty
relations.

* Fix: Tasks-List-page-Person-Switcher (#6077)

Fixes #6007, adds context to the ObjectFilter DropdownRecordSelect

* Add exceptions for metadata modules (#6070)

Class exception for each metadata module + handler to map on graphql
error

TODO left :
- find a way to call handler on auto-resolvers nestjs query (probably
interceptors)
- discuss what should be done for pre-hooks errors
- discuss what should be done for Unauthorized exception

* 5748 Create contacts for emails sent and received by email aliases (#5855)

Closes #5748
- Create feature flag
- Add scope `https://www.googleapis.com/auth/profile.emails.read` when
connecting an account
- Get email aliases with google people API, store them in
connectedAccount and refresh them before each message-import
- Update the contact creation logic accordingly
- Refactor

---------

Co-authored-by: Charles Bochet <charles@twenty.com>

* Change Messaging import frequency

* Fix lint and used constant (#6082)

- Fixed lint after merge of #6077 
- Used constant for dropdown id

* Fix demo seed script by using usage of deprecated sub status

* Use invalid field input error for invalid object metadata input (#6083)

As title

* Fix Active Workspaces check (#6084)

We have recently deprecated our subscriptionStatus on workspace to
replace it by a check on existing subscription (+ freeAccess
featureFlag) but the logic was not properly implemented

* feature to reset value in select field (#6067)

Fixes #6064 



https://github.com/twentyhq/twenty/assets/55168611/8c553422-6ad2-4e6b-bd00-962dd81c0a93

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Reorganise calendar module (#6089)

Refactor Calendar into functional sub modules
<img width="437" alt="image"
src="https://github.com/twentyhq/twenty/assets/12035771/d9de3285-a226-4fe8-b3ef-2d8a21def2a5">

---------

Co-authored-by: bosiraphael <raphael.bosi@gmail.com>

* Fix calendar import cron job (#6096)

An error was introduced in the calendar cron job because we tried to
inject the workspace context inside the calendarChannelRepository where
we didn't have access to that context.

* feat: refactor workspace sync fields (#6069)

This PR was first here to fix the issue related to ticket #5004, after
some testing it seems that changing the name of a relation is actually
properly working, if we rename `ONE-TO-MANY` side, the only things that
is going to be updated is the FieldMetadata as the `joinColumn` is
stored on the opposite object.
For `MANY-TO-ONE` relations, the `joinColumn` migration is properly
generated. We need to take care that if we rename a side of a relation,
sometimes the opposite side doesn't have `inverseSideFieldKey`
implemented and used by default the name of the opposite object, so this
is going to throw an error as the field can't be found in the object.

---------

Co-authored-by: Marie <51697796+ijreilly@users.noreply.github.com>

* Use return await to catch exceptions (#6109)

So the exceptions are handled properly and filtered in sentry

* Fix rating field not editable if null (#6110)

## Context

Rating fields were not editable on the show page and kanban view when
they were null, this is because we don't have a way to leave the empty
state for fields that are editModeContentOnly.
~~This is actually an issue for bool fields (which is the other field
type that has editModeContentOnly) as well but they have default values
can't go be edited to NULL so it's not visible.~~
Actually let's fix bool, this could happen too

Hovering over "Empty" will now show the RatingField edit mode.
I'm not 100% sure about this solution though, we could also make this
behaviour on click? I preferred over since this is the behaviour on the
table view 🤔

## Test


https://github.com/twentyhq/twenty/assets/1834158/6825b5c3-2c62-41f2-8e03-343bc0e895e2

* Fix pg-boss worker not working with dynamic injection (#6119)

* Fix workspace sync issue (#6121)

Fixing an issue with typeORM not fetching existing metadata collection
while syncing fields and relations

* fix: small PR fixes workspace-sync-fields (#6107)

Small fixes of PR #6069

* Decrease messaging import batch size

* Improve performance/robustness of worker

* Text-to-SQL proof of concept (#5788)

Added:
- An "Ask AI" command to the command menu.
- A simple GraphQL resolver that converts the user's question into a
relevant SQL query using an LLM, runs the query, and returns the result.

<img width="428" alt="Screenshot 2024-06-09 at 20 53 09"
src="https://github.com/twentyhq/twenty/assets/171685816/57127f37-d4a6-498d-b253-733ffa0d209f">

No security concerns have been addressed, this is only a
proof-of-concept and not intended to be enabled in production.

All changes are behind a feature flag called `IS_ASK_AI_ENABLED`.

---------

Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

* Hotfix tests after AI PR (#6124)

I merged https://github.com/twentyhq/twenty/pull/5788 too quickly and
didn't noticed it was broken with
https://github.com/twentyhq/twenty/pull/6069

* fix: message queue injection issue (#6126)

* Forbid names above 63 characters to comply with pg identifier limit (#6095)

Fixes #6032.

Pg has a char limit on identifiers (= table, columns, enum names) of 63
bytes.
Let's limit the metadata names that will be converted to identifiers
(objects names, fields names, relation names, enum values) to 63 chars.
For the sake of simplicity in the FE we will limit the input length of
labels.

---------

Co-authored-by: Charles Bochet <charles@twenty.com>

* Fix website doc search (#6134)

NEXT_PUBLIC environnement variable values are set at build time and not
run time.
Build is currently performed in Github actions so setting those vars at
runtime has no effect.
We can use a package to automatically pass those variables at runtime

* Implement Settings Tabs (#6136)

In this PR:
- Renaming SettingsAccountsEmailBlocklist to
SettingsAccountsEmailBlocklist as the blocklist is not tied to
emails/messaging but is user level
- Changing the UI settings UI by removing /emails/{id} page and adding
tabs on /emails page

<img width="1512" alt="image"
src="https://github.com/twentyhq/twenty/assets/12035771/d215a891-fff9-477d-915d-0d7a697742e8">

* Add command to update boolean fields null values (#6113)

We have recently decided that boolean fields should only accept truthy
or falsy value, with users deciding of a default value at creation.

This command helps cleaning the existing data, by
1. updating all boolean fields default values from null to false
2. updating all boolean fields values for records from null to false

---------

Co-authored-by: Weiko <corentin@twenty.com>

* Fix sort with Email and FullName field types and add sort/filter to labelIdentifier column (#6132)

Fixes https://github.com/twentyhq/twenty/issues/5958

<img width="1088" alt="Screenshot 2024-07-04 at 16 23 25"
src="https://github.com/twentyhq/twenty/assets/1834158/746c45a4-7112-4322-8c26-04f3e98add06">

<img width="1280" alt="Screenshot 2024-07-04 at 16 15 39"
src="https://github.com/twentyhq/twenty/assets/1834158/9b9ecc60-9787-44a3-9ba7-0b33ec378e6f">

* 5421 box shadow on frozen header and first column (#6130)

- Refactored components in table
- Added a isTableRecordScrolledLeftState and
isTableRecordScrolledTopState to subscribe to table scroll
- Added a zIndex logic that subscribes to those new states in new tinier
components

---------

Co-authored-by: Charles Bochet <charles@twenty.com>

* Fix storybook tests (#6150)

The PRs merged on Friday introduced regressions on our storybook tests
suite

* Refactor Calendar Settings into tabs (#6153)

This PR migrates Calendar Settings into Tabs: 

<img width="1512" alt="image"
src="https://github.com/twentyhq/twenty/assets/12035771/2531d0f1-ddfd-46c6-8678-bd76d78447b6">

* Add new Settings to front-end (#6154)

<img width="1512" alt="image"
src="https://github.com/twentyhq/twenty/assets/12035771/cfcc6ac9-feeb-4d91-aa68-bd0119780d6d">

* Small fixes on accounts settings (#6157)

- Add keys in components map

* Add message import granulary on non-pro emails, group emails and received contact creation (#6156)

1) Remove featureFlag
2) Base contactCreation on messageChannel.autoContactCreationPolicy
4) add excludeProfessionalEmails + excludeGroupEmails logic

* Fix z-index issue on dropdown (#6160)

Recently, we've forced all dropdown menu to be displayed in portal. This
loses the z-index hieararchy structure and forces us to specify a higher
z-index in order for dropdown menus to be displayed on top

* Bump version to 0.21 (#6161)

* Refactor calendar to use new sync statuses and stages (#6141)

- Refactor calendar modules and some messaging modules to better
organize them by business rules and decouple them
- Work toward a common architecture for the different calendar providers
by introducing interfaces for the drivers
- Modify cron job to use the new sync statuses and stages

* Navigate to field settings page on Go to Settings (#6128)

Fixes #5661.

Thanks @AdvaitChandorkar07

* Fix wrong email direction (#6163)

Closes #6162

* Fix contactCreation ignoring connectedAccount mainHandle

* Update render deploy configuration (#6167)

* Add missing objectMetadataId column in auditLog (#6164)

Insert inside AuditLog table are all failing due to objectMetadataId
column missing.
The FieldMetadata was sharing the same standard-id with another one
(objectName) so it was skipped during the comparison step of the
sync-metadata.

Running a sync-metadata again should fix this issue. Note that this
column is non-nullable so if the table contains existing records, it
will fail. However, since the insert was failing I'm assuming the table
is empty anyway.

* Modify messaging message channel sync status monitoring cron pattern (#6173)

Change from every hour to every 10 minutes, starting at 2 minutes past
the hour

* [Flexible Schema] Create indexes for join columns (#6165)

## Context
We want to add an index on our foreign keys since PG does not do it for
us. An index can sometimes be expensive and not always meaningful
depending on different usages but in our case we decided to apply an
index for every foreign keys.

```typescript
  @WorkspaceIndex()
  @WorkspaceJoinColumn('author')
  authorId: string;
```
This syntax is valid but since we want to apply it to every join column
I've decided to update the code of WorkspaceJoinColumn so it properly
registers a new index at the same time which is less error-prone.

Note: We had a bug on index name generation since postgres index names
are unique per schema and not table, the object metadata id (hashed) has
been added to the formula that generates the name of the index

## Test
Sync metadata. We have 45 join columns as of today per workspace, we
should see 45 rows inside IndexMetadata table

* Authorize 0 depth (#6171)

Authorize depth 0


![image](https://github.com/twentyhq/twenty/assets/29927851/2e82eaba-01b4-440f-8412-d2878007a3b1)

![image](https://github.com/twentyhq/twenty/assets/29927851/f0137671-20dc-4e44-97b8-7a8e4c583493)

## Edit
### Depth = 0
```
{
  "data": {
    "people": [
      {
        "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
        "email": "christoph.calisto@linkedin.com",
        "jobTitle": "",
        "phone": "+33789012345",
        "city": "Seattle",
        "avatarUrl": "",
        "position": 1,
        "createdAt": "2024-07-08T16:08:50.011Z",
        "updatedAt": "2024-07-08T16:08:50.011Z",
        "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
        "name": {
          "firstName": "Christoph",
          "lastName": "Callisto"
        },
        "linkedinLink": {
          "label": "",
          "url": ""
        },
        "xLink": {
          "label": "",
          "url": ""
        }
      },
...
]}
```

### Depth = 1
```
{
  "data": {
    "people": [
      {
        "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
        "email": "christoph.calisto@linkedin.com",
        "jobTitle": "",
        "phone": "+33789012345",
        "city": "Seattle",
        "avatarUrl": "",
        "position": 1,
        "createdAt": "2024-07-08T16:08:50.011Z",
        "updatedAt": "2024-07-08T16:08:50.011Z",
        "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
        "name": {
          "firstName": "Christoph",
          "lastName": "Callisto"
        },
        "linkedinLink": {
          "label": "",
          "url": ""
        },
        "xLink": {
          "label": "",
          "url": ""
        },
        "activityTargets": [],
        "favorites": [],
        "attachments": [],
        "timelineActivities": [],
        "company": {
          "id": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
          "name": "Linkedin",
          "domainName": "linkedin.com",
          "address": "",
          "employees": null,
          "idealCustomerProfile": false,
          "position": 1,
          "createdAt": "2024-07-08T16:08:50.011Z",
          "updatedAt": "2024-07-08T16:08:50.011Z",
          "accountOwnerId": null,
          "linkedinLink": {
            "label": "",
            "url": ""
          },
          "xLink": {
            "label": "",
            "url": ""
          },
          "annualRecurringRevenue": {
            "amountMicros": null,
            "currencyCode": ""
          }
        },
        "messageParticipants": [
          {
            "id": "20202020-0f2a-49d8-8aa2-ec8786153a0b",
            "role": "from",
            "handle": "outgoing",
            "displayName": "Christoph",
            "createdAt": "2024-07-08T16:08:50.028Z",
            "updatedAt": "2024-07-08T16:08:50.028Z",
            "messageId": "20202020-2b8a-405d-8f42-e820ca921421",
            "personId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "workspaceMemberId": "20202020-0687-4c41-b707-ed1bfca972a7"
          },
          {
            "id": "20202020-fc7d-4ad8-9aea-b78bcbf79cdd",
            "role": "from",
            "handle": "outgoing",
            "displayName": "Christoph",
            "createdAt": "2024-07-08T16:08:50.028Z",
            "updatedAt": "2024-07-08T16:08:50.028Z",
            "messageId": "20202020-04c8-4f24-93f2-764948e95014",
            "personId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "workspaceMemberId": "20202020-0687-4c41-b707-ed1bfca972a7"
          }
        ],
        "calendarEventParticipants": [
          {
            "id": "da8f47c3-8055-49ad-b7e4-9c9d5bbc1ecc",
            "handle": "christoph.calisto@linkedin.com",
            "displayName": "Christoph Calisto",
            "isOrganizer": true,
            "responseStatus": "ACCEPTED",
            "createdAt": "2024-07-08T16:08:50.011Z",
            "updatedAt": "2024-07-08T16:08:50.011Z",
            "calendarEventId": "86083141-1c0e-494c-a1b6-85b1c6fefaa5",
            "personId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "workspaceMemberId": null
          }
        ],
        "pointOfContactForOpportunities": [
          {
            "id": "20202020-be10-412b-a663-16bd3c2228e1",
            "name": "Opportunity 1",
            "closeDate": "2024-07-08T16:08:50.018Z",
            "probability": "0.5",
            "stage": "NEW",
            "position": 1,
            "createdAt": "2024-07-08T16:08:50.011Z",
            "updatedAt": "2024-07-08T16:08:50.011Z",
            "pointOfContactId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
            "amount": {
              "amountMicros": 100000,
              "currencyCode": "USD"
            }
          }
        ]
      },
...
]}
```
### Depth = 2
```
{
  "data": {
    "people": [
      {
        "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
        "email": "christoph.calisto@linkedin.com",
        "jobTitle": "",
        "phone": "+33789012345",
        "city": "Seattle",
        "avatarUrl": "",
        "position": 1,
        "createdAt": "2024-07-08T16:08:50.011Z",
        "updatedAt": "2024-07-08T16:08:50.011Z",
        "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
        "name": {
          "firstName": "Christoph",
          "lastName": "Callisto"
        },
        "linkedinLink": {
          "label": "",
          "url": ""
        },
        "xLink": {
          "label": "",
          "url": ""
        },
        "activityTargets": [],
        "favorites": [],
        "attachments": [],
        "timelineActivities": [],
        "company": {
          "id": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
          "name": "Linkedin",
          "domainName": "linkedin.com",
          "address": "",
          "employees": null,
          "idealCustomerProfile": false,
          "position": 1,
          "createdAt": "2024-07-08T16:08:50.011Z",
          "updatedAt": "2024-07-08T16:08:50.011Z",
          "accountOwnerId": null,
          "accountOwner": null,
          "linkedinLink": {
            "label": "",
            "url": ""
          },
          "xLink": {
            "label": "",
            "url": ""
          },
          "annualRecurringRevenue": {
            "amountMicros": null,
            "currencyCode": ""
          },
          "activityTargets": [],
          "favorites": [],
          "attachments": [],
          "timelineActivities": [],
          "people": [
            {
              "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
              "email": "christoph.calisto@linkedin.com",
              "jobTitle": "",
              "phone": "+33789012345",
              "city": "Seattle",
              "avatarUrl": "",
              "position": 1,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "name": {
                "firstName": "Christoph",
                "lastName": "Callisto"
              },
              "linkedinLink": {
                "label": "",
                "url": ""
              },
              "xLink": {
                "label": "",
                "url": ""
              }
            },
            {
              "id": "20202020-ac73-4797-824e-87a1f5aea9e0",
              "email": "sylvie.palmer@linkedin.com",
              "jobTitle": "",
              "phone": "+33780123456",
              "city": "Los Angeles",
              "avatarUrl": "",
              "position": 2,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "name": {
                "firstName": "Sylvie",
                "lastName": "Palmer"
              },
              "linkedinLink": {
                "label": "",
                "url": ""
              },
              "xLink": {
                "label": "",
                "url": ""
              }
            }
          ],
          "opportunities": [
            {
              "id": "20202020-be10-412b-a663-16bd3c2228e1",
              "name": "Opportunity 1",
              "closeDate": "2024-07-08T16:08:50.018Z",
              "probability": "0.5",
              "stage": "NEW",
              "position": 1,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "pointOfContactId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
              "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "amount": {
                "amountMicros": 100000,
                "currencyCode": "USD"
              }
            }
          ]
        },
        "pointOfContactForOpportunities": [
          {
            "id": "20202020-be10-412b-a663-16bd3c2228e1",
            "name": "Opportunity 1",
            "closeDate": "2024-07-08T16:08:50.018Z",
            "probability": "0.5",
            "stage": "NEW",
            "position": 1,
            "createdAt": "2024-07-08T16:08:50.011Z",
            "updatedAt": "2024-07-08T16:08:50.011Z",
            "pointOfContactId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
            "amount": {
              "amountMicros": 100000,
              "currencyCode": "USD"
            },
            "favorites": [],
            "activityTargets": [],
            "attachments": [],
            "timelineActivities": [],
            "pointOfContact": {
              "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
              "email": "christoph.calisto@linkedin.com",
              "jobTitle": "",
              "phone": "+33789012345",
              "city": "Seattle",
              "avatarUrl": "",
              "position": 1,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "name": {
                "firstName": "Christoph",
                "lastName": "Callisto"
              },
              "linkedinLink": {
                "label": "",
                "url": ""
              },
              "xLink": {
                "label": "",
                "url": ""
              }
            },
            "company": {
              "id": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "name": "Linkedin",
              "domainName": "linkedin.com",
              "address": "",
              "employees": null,
              "idealCustomerProfile": false,
              "position": 1,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "accountOwnerId": null,
              "linkedinLink": {
                "label": "",
                "url": ""
              },
              "xLink": {
                "label": "",
                "url": ""
              },
              "annualRecurringRevenue": {
                "amountMicros": null,
                "currencyCode": ""
              }
            }
          }
        ],
        "messageParticipants": [
          {
            "id": "20202020-0f2a-49d8-8aa2-ec8786153a0b",
            "role": "from",
            "handle": "outgoing",
            "displayName": "Christoph",
            "createdAt": "2024-07-08T16:08:50.028Z",
            "updatedAt": "2024-07-08T16:08:50.028Z",
            "messageId": "20202020-2b8a-405d-8f42-e820ca921421",
            "personId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "workspaceMemberId": "20202020-0687-4c41-b707-ed1bfca972a7",
            "message": {
              "id": "20202020-2b8a-405d-8f42-e820ca921421",
              "headerMessageId": "99ef24a8-2b8a-405d-8f42-e820ca921421",
              "direction": "outgoing",
              "subject": "Meeting Request",
              "text": "Hello, \n I hope this email finds you well. I am writing to request a meeting. I believe it would be beneficial for both parties to collaborate and explore potential opportunities. Would you be available for a meeting sometime next week? Please let me know your availability, and I will arrange a suitable time. \n Looking forward to your response.\n Best regards",
              "receivedAt": "2024-07-08T16:08:50.022Z",
              "createdAt": "2024-07-08T16:08:50.022Z",
              "updatedAt": "2024-07-08T16:08:50.022Z",
              "messageThreadId": "20202020-8bfa-453b-b99b-bc435a7d4da8"
            },
            "person": {
              "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
              "email": "christoph.calisto@linkedin.com",
              "jobTitle": "",
              "phone": "+33789012345",
              "city": "Seattle",
              "avatarUrl": "",
              "position": 1,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "name": {
                "firstName": "Christoph",
                "lastName": "Callisto"
              },
              "linkedinLink": {
                "label": "",
                "url": ""
              },
              "xLink": {
                "label": "",
                "url": ""
              }
            },
            "workspaceMember": {
              "id": "20202020-0687-4c41-b707-ed1bfca972a7",
              "colorScheme": "Light",
              "locale": "en",
              "avatarUrl": "",
              "userEmail": "tim@apple.dev",
              "userId": "20202020-9e3b-46d4-a556-88b9ddc2b034",
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "name": {
                "firstName": "Tim",
                "lastName": "Apple"
              }
            }
          },
          {
            "id": "20202020-fc7d-4ad8-9aea-b78bcbf79cdd",
            "role": "from",
            "handle": "outgoing",
            "displayName": "Christoph",
            "createdAt": "2024-07-08T16:08:50.028Z",
            "updatedAt": "2024-07-08T16:08:50.028Z",
            "messageId": "20202020-04c8-4f24-93f2-764948e95014",
            "personId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "workspaceMemberId": "20202020-0687-4c41-b707-ed1bfca972a7",
            "message": {
              "id": "20202020-04c8-4f24-93f2-764948e95014",
              "headerMessageId": "8f804a9a-04c8-4f24-93f2-764948e95014",
              "direction": "outgoing",
              "subject": "Inquiry Regarding Topic",
              "text": "Good Morning,\n I am writing to inquire about information. Could you please provide me with details regarding this topic? \n Your assistance in this matter would be greatly appreciated. Thank you in advance for your prompt response. \n Best regards,Tim",
              "receivedAt": "2024-07-08T16:08:50.022Z",
              "createdAt": "2024-07-08T16:08:50.022Z",
              "updatedAt": "2024-07-08T16:08:50.022Z",
              "messageThreadId": "20202020-634a-4fde-aa7c-28a0eaf203ca"
            },
            "person": {
              "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
              "email": "christoph.calisto@linkedin.com",
              "jobTitle": "",
              "phone": "+33789012345",
              "city": "Seattle",
              "avatarUrl": "",
              "position": 1,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "name": {
                "firstName": "Christoph",
                "lastName": "Callisto"
              },
              "linkedinLink": {
                "label": "",
                "url": ""
              },
              "xLink": {
                "label": "",
                "url": ""
              }
            },
            "workspaceMember": {
              "id": "20202020-0687-4c41-b707-ed1bfca972a7",
              "colorScheme": "Light",
              "locale": "en",
              "avatarUrl": "",
              "userEmail": "tim@apple.dev",
              "userId": "20202020-9e3b-46d4-a556-88b9ddc2b034",
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "name": {
                "firstName": "Tim",
                "lastName": "Apple"
              }
            }
          }
        ],
        "calendarEventParticipants": [
          {
            "id": "da8f47c3-8055-49ad-b7e4-9c9d5bbc1ecc",
            "handle": "christoph.calisto@linkedin.com",
            "displayName": "Christoph Calisto",
            "isOrganizer": true,
            "responseStatus": "ACCEPTED",
            "createdAt": "2024-07-08T16:08:50.011Z",
            "updatedAt": "2024-07-08T16:08:50.011Z",
            "calendarEventId": "86083141-1c0e-494c-a1b6-85b1c6fefaa5",
            "personId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "workspaceMemberId": null,
            "workspaceMember": null,
            "calendarEvent": {
              "id": "86083141-1c0e-494c-a1b6-85b1c6fefaa5",
              "title": "Meeting with Christoph",
              "isCanceled": false,
              "isFullDay": false,
              "startsAt": "2024-07-08T08:00:50.030Z",
              "endsAt": "2024-07-08T09:00:50.030Z",
              "externalCreatedAt": "2024-07-08T16:08:50.030Z",
              "externalUpdatedAt": "2024-…
JarWarren added a commit to funnelmink/crm that referenced this pull request Aug 19, 2024
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724031436 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724031405 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724031152 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724031075 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724031068 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724031065 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724031064 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724031020 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030985 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030960 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030944 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030935 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030917 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030889 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030600 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030586 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030582 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030563 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030562 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030548 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030547 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030546 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030531 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030524 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030479 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030475 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030469 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030461 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030453 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030443 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030440 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030437 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030406 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030386 -0600

parent 65fc83a763516e66ba2820723636241c9cfbaa5c
author JarWarren <wrrn24@gmail.com> 1717255102 -0600
committer JarWarren <wrrn24@gmail.com> 1724030351 -0600

# This is a combination of 33 commits.
# This is the 1st commit message:

add funnelmink logo to twenty-front

# This is the commit message #2:

whitelabel strings

# This is the commit message #3:

change package name

# This is the commit message #4:

add logging to command.js

# This is the commit message #5:

disable some gh actions

# This is the commit message #6:

add to docker-compose environment

# This is the commit message #7:

add env vars for storage credentials

# This is the commit message #8:

add email server env vars

# This is the commit message #9:

hide integration requests for now

# This is the commit message #10:

more string replacement

# This is the commit message #11:

change asset url

# This is the commit message #12:

android launcher icons

# This is the commit message #13:

ios icons

# This is the commit message #14:

url changes

# This is the commit message #15:

change docker-compose images

# This is the commit message #16:

more string replacement

# This is the commit message #17:

replace base64 images

# This is the commit message #18:

update docker-compose.yml

# This is the commit message #19:

simplify readme

# This is the commit message #20:

switch readme to markdown

# This is the commit message #21:

sentry env vars

# This is the commit message #22:

update docker-compose.yml

# This is the commit message #23:

add google auth to docker-compose.yml

# This is the commit message #24:

add NODE_ENV to docker-compose.yml

# This is the commit message #25:

add cache storage type

# This is the commit message #26:

add redis info

# This is the commit message #27:

add redis

# This is the commit message #28:

fsm (#4)

* Add label to mocked connections (#5858)

<img width="865" alt="Capture d’écran 2024-06-13 à 17 48 03"
src="https://github.com/twentyhq/twenty/assets/22936103/2d313448-fbd5-4ff1-a65b-afd4df86117a">

* fix timeline activity pagination overflow (#5861)

## Before
<img width="250" alt="Screenshot 2024-06-13 at 18 51 56"
src="https://github.com/twentyhq/twenty/assets/1834158/d6c7f5fa-3cc7-48bc-a711-29345e93af92">

## After
<img width="284" alt="Screenshot 2024-06-13 at 18 51 41"
src="https://github.com/twentyhq/twenty/assets/1834158/25029e0a-c1b0-4458-b715-dbab217eeee0">

* Add log for errors on message import (#5863)

As per title :)

* Support orderBy as array (#5681)

closes: #4301

---------

Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

* fix: text field overflow beyond cell limits (#5834)

- fixes #5775

https://github.com/twentyhq/twenty/assets/47355538/9e440018-ec1e-4faa-a9f3-7131615cf9f1

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Collapsible menu (#5846)

A mini PR to discuss with @Bonapara tomorrow

Separating remote objects from others and making the menu collapsible
(style to be changed)
<img width="225" alt="Screenshot 2024-06-12 at 23 25 59"
src="https://github.com/twentyhq/twenty/assets/6399865/b4b69d36-6770-43a2-a5e8-bfcdf0a629ea">

Biggest issue is we don't use local storage today so the collapsed state
gets lost.
I see we have localStorageEffect with recoil. Maybe store it there?
Seems easy but don't want to introduce a bad pattern.

Todo:
- style update
- collapsible favorites
- persistent storage

* Fix workspaceLogo in invite-email (#5865)

## Fixes wrong image url in email

![image](https://github.com/twentyhq/twenty/assets/29927851/5fb1524b-874d-4723-8450-0284382bbeb3)

## Done
- duplicates and adapt `getImageAbsoluteURIOrBase64` from `twenty-front`
in `twenty-email`
- send `SERVER_URL` to email builder

* Fix error log on message import (#5866)

Modify #5863 to log the connected account id rather than the message
channel id to be consistent with the other logs and stringify the error.

* Fix sentry error (#5848)

Fixes
https://twenty-v7.sentry.io/issues/5363536663/?environment=prod&project=4507072499810304&query=is%3Aunresolved+issue.priority%3A%5Bhigh%2C+medium%5D&referrer=issue-stream&statsPeriod=7d&stream_index=0

- handle error properly in twenty-server
- display backend error message

* Fix overflow on notes (#5853)

##before

![image](https://github.com/twentyhq/twenty/assets/29927851/c1784340-0741-4701-b11f-d2cf50fab9fb)

##after

![image](https://github.com/twentyhq/twenty/assets/29927851/c095eaf1-15c4-4e68-8cff-c175f99856d0)

* Record horizontal scrolling mobile (#5843)

I have fixed the scrolling the record container page on mobile making it
hidden.
This PR aims to fix #5745

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* fix: 404 generate API key link (#5871)

- update api key link in the docs

* Wrote 0.20 changelog (#5870)

Created the changelog for 0.2

* Fix website docs (#5873)

There was a 500 on the playground and the switch between core and
metadata

* Added Thai Baht support (#5881)

Hey, saw Thai Baht support was
[requested](https://github.com/twentyhq/twenty/issues/5876) and thought
it was a cool first issue to get to know the project a little bit.

* feat: Enhancements to MessageQueue Module with Decorators (#5657)

### Overview

This PR introduces significant enhancements to the MessageQueue module
by integrating `@Processor`, `@Process`, and `@InjectMessageQueue`
decorators. These changes streamline the process of defining and
managing queue processors and job handlers, and also allow for
request-scoped handlers, improving compatibility with services that rely
on scoped providers like TwentyORM repositories.

### Key Features

1. **Decorator-based Job Handling**: Use `@Processor` and `@Process`
decorators to define job handlers declaratively.
2. **Request Scope Support**: Job handlers can be scoped per request,
enhancing integration with request-scoped services.

### Usage

#### Defining Processors and Job Handlers

The `@Processor` decorator is used to define a class that processes jobs
for a specific queue. The `@Process` decorator is applied to methods
within this class to define specific job handlers.

##### Example 1: Specific Job Handlers

```typescript
import { Processor, Process, InjectMessageQueue } from 'src/engine/integrations/message-queue';

@Processor('taskQueue')
export class TaskProcessor {

  @Process('taskA')
  async handleTaskA(job: { id: string, data: any }) {
    console.log(`Handling task A with data:`, job.data);
    // Logic for task A
  }

  @Process('taskB')
  async handleTaskB(job: { id: string, data: any }) {
    console.log(`Handling task B with data:`, job.data);
    // Logic for task B
  }
}
```

In the example above, `TaskProcessor` is responsible for processing jobs
in the `taskQueue`. The `handleTaskA` method will only be called for
jobs with the name `taskA`, while `handleTaskB` will be called for
`taskB` jobs.

##### Example 2: General Job Handler

```typescript
import { Processor, Process, InjectMessageQueue } from 'src/engine/integrations/message-queue';

@Processor('generalQueue')
export class GeneralProcessor {

  @Process()
  async handleAnyJob(job: { id: string, name: string, data: any }) {
    console.log(`Handling job ${job.name} with data:`, job.data);
    // Logic for any job
  }
}
```

In this example, `GeneralProcessor` handles all jobs in the
`generalQueue`, regardless of the job name. The `handleAnyJob` method
will be invoked for every job added to the `generalQueue`.

#### Adding Jobs to a Queue

You can use the `@InjectMessageQueue` decorator to inject a queue into a
service and add jobs to it.

##### Example:

```typescript
import { Injectable } from '@nestjs/common';
import { InjectMessageQueue, MessageQueue } from 'src/engine/integrations/message-queue';

@Injectable()
export class TaskService {
  constructor(
    @InjectMessageQueue('taskQueue') private readonly taskQueue: MessageQueue,
  ) {}

  async addTaskA(data: any) {
    await this.taskQueue.add('taskA', data);
  }

  async addTaskB(data: any) {
    await this.taskQueue.add('taskB', data);
  }
}
```

In this example, `TaskService` adds jobs to the `taskQueue`. The
`addTaskA` and `addTaskB` methods add jobs named `taskA` and `taskB`,
respectively, to the queue.

#### Using Scoped Job Handlers

To utilize request-scoped job handlers, specify the scope in the
`@Processor` decorator. This is particularly useful for services that
use scoped repositories like those in TwentyORM.

##### Example:

```typescript
import { Processor, Process, InjectMessageQueue, Scope } from 'src/engine/integrations/message-queue';

@Processor({ name: 'scopedQueue', scope: Scope.REQUEST })
export class ScopedTaskProcessor {

  @Process('scopedTask')
  async handleScopedTask(job: { id: string, data: any }) {
    console.log(`Handling scoped task with data:`, job.data);
    // Logic for scoped task, which might use request-scoped services
  }
}
```

Here, the `ScopedTaskProcessor` is associated with `scopedQueue` and
operates with request scope. This setup is essential when the job
handler relies on services that need to be instantiated per request,
such as scoped repositories.

### Migration Notes

- **Decorators**: Refactor job handlers to use `@Processor` and
`@Process` decorators.
- **Request Scope**: Utilize the scope option in `@Processor` if your
job handlers depend on request-scoped services.

Fix #5628

---------

Co-authored-by: Weiko <corentin@twenty.com>

* 5236 expandable list leave options when editing (#5890)

Fixes https://github.com/twentyhq/twenty/issues/5236
## After

![image](https://github.com/twentyhq/twenty/assets/29927851/5f0f910c-11b0-40ce-9c59-34e7ce0c2741)

* 5581 get httpsapitwentycomrestmetadata relations not working (#5867)

Filtering relations is not allowed
(see`packages/twenty-server/src/engine/metadata-modules/relation-metadata/dtos/relation-metadata.dto.ts`)
so we remove filtering for find many relation

we also fixed some bug in result structure and metadata open-api schema

* Fix verticale line timeline activity (#5894)

Before

<img width="400" alt="Capture d’écran 2024-06-17 à 10 23 17"
src="https://github.com/twentyhq/twenty/assets/22936103/01408d7b-9a6c-4a21-9f08-c8cf304e2ea0">

After

<img width="400" alt="Capture d’écran 2024-06-17 à 10 05 39"
src="https://github.com/twentyhq/twenty/assets/22936103/df384726-bbf9-4828-ad47-d1c91724947d">

* Added and optimized missing RatingFieldDisplay component (#5904)

The display for Rating field type was missing, I just added it based on
RatingInput in readonly mode and optimized a bit for performance also.

Fixes https://github.com/twentyhq/twenty/issues/5900

* Fix secondaryLinks field input (#5911)

PR https://github.com/twentyhq/twenty/pull/5785/files broke links
update.

Also, dropdown "Add link" will be displayed only if a link is already
added. Otherwise, it should be a normal input.

* add multiple filters of same FieldMetadataType (#5892)

fixes: #5378

* Add South Korean won to currency codes (#5914)

Greetings from Seoul! I found this amazing project a few days ago, and
trying to introduce it to my team. However there is a tiny but
significant problem, that South Korean won is not available in twenty.

So I added `KRW` to the enum `CurrencyCode` and the constant
`SETTINGS_FIELD_CURRENCY_CODES`. I tested it locally and apparently
works fine.

* Upgrade pg graphql version to 1.5.6 (#5937)

- update `pg_graphql` version doc
- update `pg_graphql` version to 1.5.6

* Add loader and transition for details page tabs (#5935)

Closes https://github.com/twentyhq/twenty/issues/5656

https://github.com/twentyhq/twenty/assets/22936103/3e4beea2-9aa9-4015-bb99-ee22adb53b63

* website / Fix broken links, slow loading, and prod errors (#5932)

The code is in a bad state, this is just fixing it but not improving the
structure

* 5582 get httpsapitwentycomrestmetadata objects filters dont work (#5906)

- Remove filters from metadata rest api
- add limite before and after parameters for metadata
- remove update from metadata relations
- fix typing issue
- fix naming
- fix before parameter

---------

Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

* Add http status to graphql errors (#5896)

Graphql errors are not properly filtered by our handler. We still
receive errors like `NOT_FOUND` in sentry while they should be filtered.
Example
[here](https://twenty-v7.sentry.io/issues/5490383016/?environment=prod&project=4507072499810304&query=is%3Aunresolved+issue.priority%3A%5Bhigh%2C+medium%5D&referrer=issue-stream&statsPeriod=7d&stream_index=6).

We associate statuses with errors in our map
`graphQLPredefinedExceptions` but we cannot retrieve the status from the
error.

This PR lists the codes that should be filtered.

To test:
- call `findDuplicates` with an invalid id
- before, server would breaks
- now the error is simply returned

* Handle no concurrency option (#5952)

Fix error in local `teamConcurrency must be an integer between 1 and
1000`

* Favicons are being re-rendered on hover (#5849)

### Description

Favicons are being re-rendered on hover

### Refs

#3523

### Demo

https://www.loom.com/share/e3944d940a014283af8c26baac1fed57?sid=e3e96a81-3a54-4969-8602-99c64bb3ffe7

Fixes #3523

---------

Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
Co-authored-by: v1b3m <vibenjamin6@gmail.com>
Co-authored-by: Thiago Nascimbeni <tnascimbeni@gmail.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Add a ⏎ shortcut on Select options (#5641)

fixes #5540

Added onkeyDown to
1. Create new option and
2. Move focus to it.

[screen-capture
(6).webm](https://github.com/twentyhq/twenty/assets/69167444/ede54ad8-22db-4b09-9617-4d999c6c08c7)

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Added a mechanism to reset error boundary on page change. (#5913)

Previously the error boundary component was re-rendering with the same
state as long as we stayed in the same router, so for page change inside
an index container, it would stay on error state.

The fix is to memorize the location the error page is on during its
first render, and then to reset the error boundary if it gets
re-rendered with a different location even in the same index container.

Fixes : #3592

* fix(twenty-front): update DateTimeInput styles to apply top border radius to date picker (#5946)

update DateTimeInput styled components to prevent the StyledInput from
overflowing out of it's parent container

<img width="860" alt="Screenshot 2024-06-19 at 9 55 04 AM"
src="https://github.com/twentyhq/twenty/assets/19223383/8c5daf6a-9eb6-4ecd-a2e9-aa2ba8db3874">

Fixes #5940

* (5943) Match country selector button's background to phone number input's background (#5956)

Fixes #5943

### Before
Light
<img width="218" alt="Screenshot 2024-06-19 at 12 37 22 PM"
src="https://github.com/twentyhq/twenty/assets/57673080/981d1877-be4e-4071-9a8d-9d0ed7e933ab">
Dark
<img width="223" alt="Screenshot 2024-06-19 at 12 39 42 PM"
src="https://github.com/twentyhq/twenty/assets/57673080/a3730ef5-21ba-4d90-998d-d330aec350ad">

### After
Light
<img width="216" alt="Screenshot 2024-06-19 at 12 39 00 PM"
src="https://github.com/twentyhq/twenty/assets/57673080/eef3b743-1b28-43a5-8c1c-bd944a4915c7">
Dark
<img width="228" alt="Screenshot 2024-06-19 at 12 39 29 PM"
src="https://github.com/twentyhq/twenty/assets/57673080/5bf10e51-5a07-4d55-99f1-734517b22781">

* [Bug] Put back subject is email right drawer  (#5955)

Fix https://github.com/twentyhq/twenty/issues/5903

* Data Skeleton Loading on Indexes (#5828)

### Description
Data Skeleton Loading on Indexes

### Refs
#4459

### Demo

https://github.com/twentyhq/twenty/assets/140154534/d9c9b0fa-2d8c-4b0d-8d48-cae09530622a

Fixes #4459

---------

Co-authored-by: gitstart-twenty <gitstart-twenty@users.noreply.github.com>
Co-authored-by: v1b3m <vibenjamin6@gmail.com>
Co-authored-by: Matheus <matheus_benini@hotmail.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* 5934 create alert banner component (#5950)

Closes #5934

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Fix reconnect google account bug (#5905)

Update syncStage to FULL_MESSAGE_LIST_FETCH_PENDING when reconnecting
the account to trigger a full sync on the next cron iteration.

* 5898 Create a cron to monitor messageChannelSyncStatus (#5933)

Closes #5898

* Feat : Introduced Delay Options for Tooltip (#5766)

Fixes https://github.com/twentyhq/twenty/issues/5727

---------

Co-authored-by: Rushikesh Tarapure <rushikeshtarapure@gofynd.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* add object id column to csv export (#5971)

closes: #5893

---------

Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

* fix: Column header menu Filter button (#5973)

fixes: #5957

https://github.com/twentyhq/twenty/assets/13139771/51d42aa5-c774-4cbe-adca-b95ea6e17bbd

* Fix date picker wrong on certain timezones (#5972)

Timezone with a negative offset weren't working good with date pickers.

I split the logic for display and parsing between date only and
datetime.

Date time is sending and displaying using timezone, and date only is
sending and displaying by forcing the date to take its UTC day and month
and 00:00:00 time.

This way its consistent across all timezones.

* Add the support of Empty and Non-Empty filter (#5773)

* Fix(view): `Create` Button is not visible when creating `Kanban` View (#5969)

Closes #5915

This issue occurs only when there is no select field.

The user then creates a new one in settings and returns back to the view
picker.
And the bug arises, it because `viewPickerKanbanFieldMetadataId` is not
being set correctly.

When a user navigate to settings, the dirty state should be set to
false. As a result, after re-rendering the view picker component, it
triggers the effect to set `viewPickerKanbanFieldMetadataId`

---------

Co-authored-by: Achsan <achsanh@gmail.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Add disabled style on non-draggable menu items (#5974)

Closes https://github.com/twentyhq/twenty/issues/5653

<img width="256" alt="Capture d’écran 2024-06-20 à 17 19 44"
src="https://github.com/twentyhq/twenty/assets/22936103/c9d7e58f-818b-44f2-8aa4-4d85c8e1b6be">
<img width="231" alt="Capture d’écran 2024-06-20 à 17 20 03"
src="https://github.com/twentyhq/twenty/assets/22936103/5e981e93-9d59-403a-bb6b-0ff75151ace2">

* Update LOGGER_DRIVER env var description (#5968)

Update the docs to accurately reflect `LoggerDriverType`. Using `sentry`
throws an error on startup.

```
export enum LoggerDriverType {
  Console = 'console',
}
```

Happy to change the wording of course.

* Fix: Selected Line Not Fully Highlighted in Blue (#5966)

Fixes: #5942

<img width="1517" alt="Screenshot 2024-06-19 at 5 07 35 PM"
src="https://github.com/twentyhq/twenty/assets/63531478/c88a98e9-7ce3-43fe-a496-1a5dfe796b81">

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* fix: background colors for record table (#5967)

# Summary
- Address issue #5959
- Update background color on hover & click for record table

# Test Plan

![Kapture 2024-06-19 at 20 32
44](https://github.com/twentyhq/twenty/assets/10789158/18a58c09-040a-47e6-953d-aac6f3803486)

* Fix links chip design (#5963)

Fix https://github.com/twentyhq/twenty/issues/5938 and
https://github.com/twentyhq/twenty/issues/5655

- Make sure chip count is displayed
- Fix padding
- Fix background colors, border
- Add hover and active states

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Navigation Panel UI Sizing Changes (#5964)

## Fixes #5902 :
- [x] Navigation items' height should be risen to 28px.
> For clarity:
- [x] Also increased the height of NavigationDrawerSectionTitle to 28px
to match navigation item.
- [x] The gap between sections should be reduced to 12px
> Was already completed it seems.
- [x] The workspace switcher should be aligned with the navigation items

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* feat: add brazilian real currency (#5989)

Added support to Brazilian Real currency code, added the new code on
`CurrencyCode.ts` and on `SETTINGS_FIELD_CURRENCY_CODES`

* feat: drop calendar repository (#5824)

This PR is replacing and removing all the raw queries and repositories
with the new `TwentyORM` and injection system using
`@InjectWorkspaceRepository`.
Some logic that was contained inside repositories has been moved to the
services.
In this PR we're only replacing repositories for calendar feature.

---------

Co-authored-by: Weiko <corentin@twenty.com>
Co-authored-by: bosiraphael <raphael.bosi@gmail.com>
Co-authored-by: Charles Bochet <charles@twenty.com>

* [FlexibleSchema] Add IndexMetadata decorator (#5981)

## Context
Our Flexible Schema engine dynamically generates entities/tables/APIs
for us but was not flexible enough to build indexes in the DB. With more
and more features involving heavy queries such as Messaging, we are now
adding a new WorkspaceIndex() decorator for our standard objects (will
come later for custom objects). This decorator will give enough
information to the workspace sync metadata manager to generate the
proper migrations that will create or drop indexes on demand.
To be aligned with the rest of the engine, we are adding 2 new tables:
IndexMetadata and IndexFieldMetadata, that will store the info of our
indexes.

## Implementation

```typescript
@WorkspaceEntity({
  standardId: STANDARD_OBJECT_IDS.person,
  namePlural: 'people',
  labelSingular: 'Person',
  labelPlural: 'People',
  description: 'A person',
  icon: 'IconUser',
})
export class PersonWorkspaceEntity extends BaseWorkspaceEntity {
  @WorkspaceField({
    standardId: PERSON_STANDARD_FIELD_IDS.email,
    type: FieldMetadataType.EMAIL,
    label: 'Email',
    description: 'Contact’s Email',
    icon: 'IconMail',
  })
  @WorkspaceIndex()
  email: string;
```
By simply adding the WorkspaceIndex decorator, sync-metadata command
will create a new index for that column.
We can also add composite indexes, note that the order is important for
PSQL.
```typescript
@WorkspaceEntity({
  standardId: STANDARD_OBJECT_IDS.person,
  namePlural: 'people',
  labelSingular: 'Person',
  labelPlural: 'People',
  description: 'A person',
  icon: 'IconUser',
})
@WorkspaceIndex(['phone', 'email'])
export class PersonWorkspaceEntity extends BaseWorkspaceEntity {
```

Currently composite fields and relation fields are not handled by
@WorkspaceIndex() and you will need to use this notation instead
```typescript
@WorkspaceIndex(['companyId', 'nameFirstName'])
export class PersonWorkspaceEntity extends BaseWorkspaceEntity {
```
<img width="700" alt="Screenshot 2024-06-21 at 15 15 45"
src="https://github.com/twentyhq/twenty/assets/1834158/ac6da1d9-d315-40a4-9ba6-6ab9ae4709d4">

Next step: We might need to implement more complex index expressions,
this is why we have an expression column in IndexMetadata.
What I had in mind for the decorator, still open to discussion
```typescript
@WorkspaceIndex(['nameFirstName', 'nameLastName'], { expression: "$1 || ' ' || $2"})
export class PersonWorkspaceEntity extends BaseWorkspaceEntity {
```

---------

Co-authored-by: Charles Bochet <charles@twenty.com>

* Improve tests (#5994)

Our tests on FE are red, which is a threat to code quality. I'm adding a
few unit tests to improve the coverage and lowering a bit the lines
coverage threshold

* Fix infinite scroll issue on table (#5996)

We had an issue on infinite scroll on table view.
The fetch more logic was modifying isTableLastRowVisible state (which is
wrong, how could it know)? This was done to prevent loading too much
data at once. This was causing some race condition on
isTableLastRowVisible (as the table itself was also changing it
depending on the real visibility of the line)

I have remove this hacky usage of isTableLastRowVisible and replaced it
by a setTimeout to let the user some time to scroll and introduce a
throttle logic.

* Remove Right-Edge Gap in Table Cell Display (#5992)

fixes #5941

![Screenshot from 2024-06-23
17-24-24](https://github.com/twentyhq/twenty/assets/59247136/ae67603a-824d-4e6b-b873-2d58e6296341)

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Refactor infiniteScoll to use debouncing (#5999)

Same as https://github.com/twentyhq/twenty/pull/5996 but with
useDebounced as asked in review

* Create feature flag for calendar V2 (#5998)

Create feature flag for calendar V2

* Turned on tooltip on kanban cards with shortDelay (#5991)

fixes: #5982

Demo:

https://github.com/twentyhq/twenty/assets/58113282/6593381c-c01a-4259-9caa-8612247a9e95

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* feat: add australian dollar currency (#5990)

Hi Twenty team,
I'd love to have Australian dollar as an option in Twenty! Please let me
me know if I have missed anything I need to change to enable this.
Thanks for a a great product

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Add update chevron (#5988)

Fixes #5986

1. Added right chevron to Fields Menu Item
<img width="735" alt="Screenshot 2024-06-21 at 5 59 46 PM"
src="https://github.com/twentyhq/twenty/assets/63531478/1515aba0-6732-424d-a0b3-5cc826a35b16">

2. Changed color of Hidden fields menu item chevron and stroke of left
chevron
<img width="735" alt="Screenshot 2024-06-21 at 6 21 30 PM"
src="https://github.com/twentyhq/twenty/assets/63531478/20952197-2f09-486c-a3bb-5b6c285a6996">

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Fix(view): Show Kanban View Creation (#5985)

# This PR
- Revise my previous work (PR #5969)
Because it would break the current logic and cause unexpected behavior.
(Issue #5979)
- Solve (Issue #5915) with another way

@lucasbordeau  What do you think about my current approach?
@JarWarren Please check it out—I'd love to get your feedback too!

---------

Co-authored-by: Achsan <achsanh@gmail.com>
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Remove multi select usage (#6004)

As per title!

Also, I'm removing an incorrect logic in the enum migration runner that
takes care of the case where we have no defaultValue but non nullable
which is not a valid business case.

* Create new sync statuses and stages for calendar (#5997)

Create fields:
- syncStatus
- syncStage
- syncStageStartedAt

* 5951 create a command to trigger the import of a single message (#5962)

Closes #5951

---------

Co-authored-by: Charles Bochet <charles@twenty.com>

* Add calendar cron command on self-hosting-var.mdx (#6009)

To enable Google Calendar integration, you need to run `yarn
command:prod cron:calendar:google-calendar-sync` in the worker
container. However, currently, the self-hosting guide does not tell you
how to do it. If you just follow the guide, only Gmail integration will
be enabled. So I added the command for calendar sync cron on
self-hosting-var.mdx.

* Remove useless api position parameter (#6010)

- remove buggy addition of position parameter
- check created records are in first position by default

* Fix sign up broken because of missing workspace schema (#6013)

Allow workspace datasource factory to return null if the workspace
schema has not been created yet

* 5615 create messageongoingstalecron (#6005)

Closes #5615

* feat: Dynamic hook registration for WorkspaceQueryHooks (#6008)

#### Overview

This PR introduces a new API for dynamically registering and executing
pre and post query hooks in the Workspace Query Hook system using the
`@WorkspaceQueryHook` decorator. This approach eliminates the need for
manual provider registration, and fix the issue of `undefined` or `null`
repository using `@InjectWorkspaceRepository`.

#### New API

**Define a Hook**

Use the `@WorkspaceQueryHook` decorator to define pre or post hooks:

```typescript
@WorkspaceQueryHook({
  key: `calendarEvent.findMany`,
  scope: Scope.REQUEST,
})
export class CalendarEventFindManyPreQueryHook implements WorkspaceQueryHookInstance {
  async execute(userId: string, workspaceId: string, payload: FindManyResolverArgs): Promise<void> {
    if (!payload?.filter?.id?.eq) {
      throw new BadRequestException('id filter is required');
    }

    // Implement hook logic here
  }
}
```

This API simplifies the registration and execution of query hooks,
providing a more flexible and maintainable approach.

---------

Co-authored-by: Weiko <corentin@twenty.com>

* Fix billing signup when workspace does not exist (#6018)

* Removed performance optimization and put back previous system with recoil states for  edit mode and soft focus to avoid side effects. (#6019)

Fixes https://github.com/twentyhq/twenty/issues/6016

This was another side effect of the optimization made on
RecordTableCellContainer to avoid using recoil states, but which causes
too many unpredictable side effects.

I just put back the previous system which works well. We'll see how to
optimize it again later.

* Remove message-import cache when connectedAccount is removed (#6021)

* Upsert endpoint and CSV import upsert (#5970)

This PR introduces an `upsert` parameter (along the existing `data`
param) for `createOne` and `createMany` mutations.

When upsert is set to `true`, the function will look for records with
the same id if an id was passed. If not id was passed, it will leverage
the existing duplicate check mechanism to find a duplicate. If a record
is found, then the function will perform an update instead of a create.

Unfortunately I had to remove some nice tests that existing on the args
factory. Those tests where mostly testing the duplication rule
generation logic but through a GraphQL angle. Since I moved the
duplication rule logic to a dedicated service, if I kept the tests but
mocked the service we wouldn't really be testing anything useful. The
right path would be to create new tests for this service that compare
the JSON output and not the GraphQL output but I chose not to work on
this as it's equivalent to rewriting the tests from scratch and I have
other competing priorities.

* Add mutationMaximumRecordAffected to clientConfig (#6039)

We are exposing the server mutationMaximumRecordAffected value via
clientConfig so it can be used by the FE.

This is a first step for https://github.com/twentyhq/twenty/issues/6025

<img width="610" alt="Screenshot 2024-06-26 at 14 58 26"
src="https://github.com/twentyhq/twenty/assets/1834158/9d192976-fd22-45d2-bdaa-a8ff6bb90ca2">

* Don't display unmatched columns in csv import (#6037)

Adding a toggle so that, by default, we don't see dozens of fields but
only the field we matched, during the data validation step in csv export

<img width="785" alt="Screenshot 2024-06-26 at 13 25 36"
src="https://github.com/twentyhq/twenty/assets/6399865/ae558eb5-7461-4bc8-a836-ecff8b6d0dff">

* Fix search in csv import (#6045)

A mini quality of life improvements, the search was case-sensitive which
was frustrating

* Rename mutation maximum affected records (#6042)

As per my last comment on https://github.com/twentyhq/twenty/pull/6039,
we decided to rename this var

* Basic import for select in CSV (#6047)

Enables basic support for Select import and field matching in CSV.
It's not pretty! But it's better than what we had before.
We should iterate on that quickly

<img width="591" alt="Screenshot 2024-06-26 at 18 41 16"
src="https://github.com/twentyhq/twenty/assets/6399865/99f67f39-3f0f-4074-aac6-3200954be08a">

* Add boolean with toggle in csv import (#6050)

Better UI when importing boolean via CSV (with a toggle)

* Improve gmail error handling by catching and throttling for 400 failedPrecondition (#6044)

Closes #5897

* Fix cache flush in messaging-channel-sync-status.service (#6024)

Fix cache flush in messaging-channel-sync-status.service

* hide delete button for selection over 100 - issue #6023 (#6030)

hide the "Delete" Button when more than 100 records are Selected

---------

Co-authored-by: Weiko <corentin@twenty.com>

* Relations many in table view (#5842)

Closes #5924.

Adding the "many" side of relations in the table view, and fixing some
issues (glitch in Multi record select, cache update after update).

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* feat: manually implement joinColumn (#6022)

This PR introduce a new decorator named `@WorkspaceJoinColumn`, the goal
of this one is to manually declare the join columns inside the workspace
entities, so we don't have to rely on `ObjectRecord` type.

This decorator can be used that way:

```typescript
  @WorkspaceRelation({
    standardId: ACTIVITY_TARGET_STANDARD_FIELD_IDS.company,
    type: RelationMetadataType.MANY_TO_ONE,
    label: 'Company',
    description: 'ActivityTarget company',
    icon: 'IconBuildingSkyscraper',
    inverseSideTarget: () => CompanyWorkspaceEntity,
    inverseSideFieldKey: 'activityTargets',
  })
  @WorkspaceIsNullable()
  company: Relation<CompanyWorkspaceEntity> | null;

  // The argument is the name of the relation above
  @WorkspaceJoinColumn('company')
  companyId: string | null;
```

* Update create-workspace.mdx (#6053)

Fix a dead link that was redirecting to a 400

* Manage isFocused state for table cells (#6058)

as per title

* Replace ObjectRecord<MessageChannelWorkspaceEntity> with MessageChannelWorkspaceEntity (#6059)

Replace ObjectRecord<MessageChannelWorkspaceEntity> with
MessageChannelWorkspaceEntity

* Fixed board card field max width (#6061)

Add a max-width to prevent overflow of board card fields

* fix navigation panel workspace picker padding (#6062)

## Before
<img width="223" alt="Screenshot 2024-06-27 at 15 23 26"
src="https://github.com/twentyhq/twenty/assets/1834158/18cb5e15-352f-4e65-9cff-6e396abe4318">

## After

<img width="229" alt="Screenshot 2024-06-27 at 15 23 07"
src="https://github.com/twentyhq/twenty/assets/1834158/53502c23-d9b4-4967-9e56-26e62e5e50ea">

<img width="225" alt="Screenshot 2024-06-27 at 15 25 23"
src="https://github.com/twentyhq/twenty/assets/1834158/fbb751ba-2bde-44f0-9c70-a9091e9b9012">

* Create fields for calendar and messaging settings v2 (#6049)

Create fields for calendar and messaging settings v2

* Change messaging batch size and cron pattern (#6063)

Change messaging batch size and cron pattern to accelerate messages
import

* 5901 refactor email and calendar auto contact creation to create them by batch (#6038)

Closes #5901

* Refactor messaging refresh access token (#6034)

- Put error handling outside of `refreshAndSaveAccessToken`
- return after failing to refresh access token in
`processMessageBatchImport`
- remove unnecessary token refresh in `processMessageListFetch`

* 5095 move onboardingstatus computation from frontend to backend (#5954)

- move front `onboardingStatus` computing to server side
- add logic to `useSetNextOnboardingStatus`
- update some missing redirections in
`usePageChangeEffectNavigateLocation`
- separate subscriptionStatus from onboardingStatus

* 0.21 changelog (#6072)

* Clarify storybook tests (#6073)

In this PR, I'm simplifying storybook setup:
1) Remove build --test configuration that prevent autodocs. We are not
using autodocs at all (the dev experience is not good enough), so I have
completely disabled it.
2) Clarify `serve` vs `test` vs `serve-and-test` configurations

After this PR:
- you can serve storybook in two modes: `npx nx run
twenty-front:storybook:serve:dev` and `npx nx run
twenty-front:storybook:serve:static`
- you can run tests agains an already served storybook (this is useful
in dev so you don't have to rebuild everytime to run tests): `npx nx run
twenty-front:storybook:test`
- you can conbine both: `npx nx run
twenty-front:storybook:serve-and-test:static`

* Fix tests

* Fix tests on RelationManyFieldDisplay

* Improve use set next onboarding state (#6076)

querying workspaceMembers may be slow leads to wrong
setNextOnboardingStatus value. So we added a resolved field in workspace
to get workspaceMemberCount directly

* Allow s3 credentials via env (#6066)

closes #5072

* Remove CSS modules (#6017)

CSS modules were used as a first test for performance optimization.

We later found out that Linaria was a better tradeoff.

This PR removes what was implemented in CSS modules and also the CSS
theme file that was created that was overlapping with the TS theme
files.

* feat: message cleaner drop repository (#6052)

This PR use the new `TwentyORM` for the message-cleaner module by using
the new injection system with `@InjectWorkspaceRepository`.

* fix: message cleaner find operator (#6080)

This PR fix an issue with the `IsNull()` find operator applied on
one-to-many relation, this one is not supported by TypeORM.
We can instead filter by an empty array to retrieve object with empty
relations.

* Fix: Tasks-List-page-Person-Switcher (#6077)

Fixes #6007, adds context to the ObjectFilter DropdownRecordSelect

* Add exceptions for metadata modules (#6070)

Class exception for each metadata module + handler to map on graphql
error

TODO left :
- find a way to call handler on auto-resolvers nestjs query (probably
interceptors)
- discuss what should be done for pre-hooks errors
- discuss what should be done for Unauthorized exception

* 5748 Create contacts for emails sent and received by email aliases (#5855)

Closes #5748
- Create feature flag
- Add scope `https://www.googleapis.com/auth/profile.emails.read` when
connecting an account
- Get email aliases with google people API, store them in
connectedAccount and refresh them before each message-import
- Update the contact creation logic accordingly
- Refactor

---------

Co-authored-by: Charles Bochet <charles@twenty.com>

* Change Messaging import frequency

* Fix lint and used constant (#6082)

- Fixed lint after merge of #6077
- Used constant for dropdown id

* Fix demo seed script by using usage of deprecated sub status

* Use invalid field input error for invalid object metadata input (#6083)

As title

* Fix Active Workspaces check (#6084)

We have recently deprecated our subscriptionStatus on workspace to
replace it by a check on existing subscription (+ freeAccess
featureFlag) but the logic was not properly implemented

* feature to reset value in select field (#6067)

Fixes #6064

https://github.com/twentyhq/twenty/assets/55168611/8c553422-6ad2-4e6b-bd00-962dd81c0a93

---------

Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com>

* Reorganise calendar module (#6089)

Refactor Calendar into functional sub modules
<img width="437" alt="image"
src="https://github.com/twentyhq/twenty/assets/12035771/d9de3285-a226-4fe8-b3ef-2d8a21def2a5">

---------

Co-authored-by: bosiraphael <raphael.bosi@gmail.com>

* Fix calendar import cron job (#6096)

An error was introduced in the calendar cron job because we tried to
inject the workspace context inside the calendarChannelRepository where
we didn't have access to that context.

* feat: refactor workspace sync fields (#6069)

This PR was first here to fix the issue related to ticket #5004, after
some testing it seems that changing the name of a relation is actually
properly working, if we rename `ONE-TO-MANY` side, the only things that
is going to be updated is the FieldMetadata as the `joinColumn` is
stored on the opposite object.
For `MANY-TO-ONE` relations, the `joinColumn` migration is properly
generated. We need to take care that if we rename a side of a relation,
sometimes the opposite side doesn't have `inverseSideFieldKey`
implemented and used by default the name of the opposite object, so this
is going to throw an error as the field can't be found in the object.

---------

Co-authored-by: Marie <51697796+ijreilly@users.noreply.github.com>

* Use return await to catch exceptions (#6109)

So the exceptions are handled properly and filtered in sentry

* Fix rating field not editable if null (#6110)

## Context

Rating fields were not editable on the show page and kanban view when
they were null, this is because we don't have a way to leave the empty
state for fields that are editModeContentOnly.
~~This is actually an issue for bool fields (which is the other field
type that has editModeContentOnly) as well but they have default values
can't go be edited to NULL so it's not visible.~~
Actually let's fix bool, this could happen too

Hovering over "Empty" will now show the RatingField edit mode.
I'm not 100% sure about this solution though, we could also make this
behaviour on click? I preferred over since this is the behaviour on the
table view 🤔

## Test

https://github.com/twentyhq/twenty/assets/1834158/6825b5c3-2c62-41f2-8e03-343bc0e895e2

* Fix pg-boss worker not working with dynamic injection (#6119)

* Fix workspace sync issue (#6121)

Fixing an issue with typeORM not fetching existing metadata collection
while syncing fields and relations

* fix: small PR fixes workspace-sync-fields (#6107)

Small fixes of PR #6069

* Decrease messaging import batch size

* Improve performance/robustness of worker

* Text-to-SQL proof of concept (#5788)

Added:
- An "Ask AI" command to the command menu.
- A simple GraphQL resolver that converts the user's question into a
relevant SQL query using an LLM, runs the query, and returns the result.

<img width="428" alt="Screenshot 2024-06-09 at 20 53 09"
src="https://github.com/twentyhq/twenty/assets/171685816/57127f37-d4a6-498d-b253-733ffa0d209f">

No security concerns have been addressed, this is only a
proof-of-concept and not intended to be enabled in production.

All changes are behind a feature flag called `IS_ASK_AI_ENABLED`.

---------

Co-authored-by: Félix Malfait <felix.malfait@gmail.com>

* Hotfix tests after AI PR (#6124)

I merged https://github.com/twentyhq/twenty/pull/5788 too quickly and
didn't noticed it was broken with
https://github.com/twentyhq/twenty/pull/6069

* fix: message queue injection issue (#6126)

* Forbid names above 63 characters to comply with pg identifier limit (#6095)

Fixes #6032.

Pg has a char limit on identifiers (= table, columns, enum names) of 63
bytes.
Let's limit the metadata names that will be converted to identifiers
(objects names, fields names, relation names, enum values) to 63 chars.
For the sake of simplicity in the FE we will limit the input length of
labels.

---------

Co-authored-by: Charles Bochet <charles@twenty.com>

* Fix website doc search (#6134)

NEXT_PUBLIC environnement variable values are set at build time and not
run time.
Build is currently performed in Github actions so setting those vars at
runtime has no effect.
We can use a package to automatically pass those variables at runtime

* Implement Settings Tabs (#6136)

In this PR:
- Renaming SettingsAccountsEmailBlocklist to
SettingsAccountsEmailBlocklist as the blocklist is not tied to
emails/messaging but is user level
- Changing the UI settings UI by removing /emails/{id} page and adding
tabs on /emails page

<img width="1512" alt="image"
src="https://github.com/twentyhq/twenty/assets/12035771/d215a891-fff9-477d-915d-0d7a697742e8">

* Add command to update boolean fields null values (#6113)

We have recently decided that boolean fields should only accept truthy
or falsy value, with users deciding of a default value at creation.

This command helps cleaning the existing data, by
1. updating all boolean fields default values from null to false
2. updating all boolean fields values for records from null to false

---------

Co-authored-by: Weiko <corentin@twenty.com>

* Fix sort with Email and FullName field types and add sort/filter to labelIdentifier column (#6132)

Fixes https://github.com/twentyhq/twenty/issues/5958

<img width="1088" alt="Screenshot 2024-07-04 at 16 23 25"
src="https://github.com/twentyhq/twenty/assets/1834158/746c45a4-7112-4322-8c26-04f3e98add06">

<img width="1280" alt="Screenshot 2024-07-04 at 16 15 39"
src="https://github.com/twentyhq/twenty/assets/1834158/9b9ecc60-9787-44a3-9ba7-0b33ec378e6f">

* 5421 box shadow on frozen header and first column (#6130)

- Refactored components in table
- Added a isTableRecordScrolledLeftState and
isTableRecordScrolledTopState to subscribe to table scroll
- Added a zIndex logic that subscribes to those new states in new tinier
components

---------

Co-authored-by: Charles Bochet <charles@twenty.com>

* Fix storybook tests (#6150)

The PRs merged on Friday introduced regressions on our storybook tests
suite

* Refactor Calendar Settings into tabs (#6153)

This PR migrates Calendar Settings into Tabs:

<img width="1512" alt="image"
src="https://github.com/twentyhq/twenty/assets/12035771/2531d0f1-ddfd-46c6-8678-bd76d78447b6">

* Add new Settings to front-end (#6154)

<img width="1512" alt="image"
src="https://github.com/twentyhq/twenty/assets/12035771/cfcc6ac9-feeb-4d91-aa68-bd0119780d6d">

* Small fixes on accounts settings (#6157)

- Add keys in components map

* Add message import granulary on non-pro emails, group emails and received contact creation (#6156)

1) Remove featureFlag
2) Base contactCreation on messageChannel.autoContactCreationPolicy
4) add excludeProfessionalEmails + excludeGroupEmails logic

* Fix z-index issue on dropdown (#6160)

Recently, we've forced all dropdown menu to be displayed in portal. This
loses the z-index hieararchy structure and forces us to specify a higher
z-index in order for dropdown menus to be displayed on top

* Bump version to 0.21 (#6161)

* Refactor calendar to use new sync statuses and stages (#6141)

- Refactor calendar modules and some messaging modules to better
organize them by business rules and decouple them
- Work toward a common architecture for the different calendar providers
by introducing interfaces for the drivers
- Modify cron job to use the new sync statuses and stages

* Navigate to field settings page on Go to Settings (#6128)

Fixes #5661.

Thanks @AdvaitChandorkar07

* Fix wrong email direction (#6163)

Closes #6162

* Fix contactCreation ignoring connectedAccount mainHandle

* Update render deploy configuration (#6167)

* Add missing objectMetadataId column in auditLog (#6164)

Insert inside AuditLog table are all failing due to objectMetadataId
column missing.
The FieldMetadata was sharing the same standard-id with another one
(objectName) so it was skipped during the comparison step of the
sync-metadata.

Running a sync-metadata again should fix this issue. Note that this
column is non-nullable so if the table contains existing records, it
will fail. However, since the insert was failing I'm assuming the table
is empty anyway.

* Modify messaging message channel sync status monitoring cron pattern (#6173)

Change from every hour to every 10 minutes, starting at 2 minutes past
the hour

* [Flexible Schema] Create indexes for join columns (#6165)

## Context
We want to add an index on our foreign keys since PG does not do it for
us. An index can sometimes be expensive and not always meaningful
depending on different usages but in our case we decided to apply an
index for every foreign keys.

```typescript
  @WorkspaceIndex()
  @WorkspaceJoinColumn('author')
  authorId: string;
```
This syntax is valid but since we want to apply it to every join column
I've decided to update the code of WorkspaceJoinColumn so it properly
registers a new index at the same time which is less error-prone.

Note: We had a bug on index name generation since postgres index names
are unique per schema and not table, the object metadata id (hashed) has
been added to the formula that generates the name of the index

## Test
Sync metadata. We have 45 join columns as of today per workspace, we
should see 45 rows inside IndexMetadata table

* Authorize 0 depth (#6171)

Authorize depth 0

![image](https://github.com/twentyhq/twenty/assets/29927851/2e82eaba-01b4-440f-8412-d2878007a3b1)

![image](https://github.com/twentyhq/twenty/assets/29927851/f0137671-20dc-4e44-97b8-7a8e4c583493)

## Edit
### Depth = 0
```
{
  "data": {
    "people": [
      {
        "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
        "email": "christoph.calisto@linkedin.com",
        "jobTitle": "",
        "phone": "+33789012345",
        "city": "Seattle",
        "avatarUrl": "",
        "position": 1,
        "createdAt": "2024-07-08T16:08:50.011Z",
        "updatedAt": "2024-07-08T16:08:50.011Z",
        "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
        "name": {
          "firstName": "Christoph",
          "lastName": "Callisto"
        },
        "linkedinLink": {
          "label": "",
          "url": ""
        },
        "xLink": {
          "label": "",
          "url": ""
        }
      },
...
]}
```

### Depth = 1
```
{
  "data": {
    "people": [
      {
        "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
        "email": "christoph.calisto@linkedin.com",
        "jobTitle": "",
        "phone": "+33789012345",
        "city": "Seattle",
        "avatarUrl": "",
        "position": 1,
        "createdAt": "2024-07-08T16:08:50.011Z",
        "updatedAt": "2024-07-08T16:08:50.011Z",
        "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
        "name": {
          "firstName": "Christoph",
          "lastName": "Callisto"
        },
        "linkedinLink": {
          "label": "",
          "url": ""
        },
        "xLink": {
          "label": "",
          "url": ""
        },
        "activityTargets": [],
        "favorites": [],
        "attachments": [],
        "timelineActivities": [],
        "company": {
          "id": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
          "name": "Linkedin",
          "domainName": "linkedin.com",
          "address": "",
          "employees": null,
          "idealCustomerProfile": false,
          "position": 1,
          "createdAt": "2024-07-08T16:08:50.011Z",
          "updatedAt": "2024-07-08T16:08:50.011Z",
          "accountOwnerId": null,
          "linkedinLink": {
            "label": "",
            "url": ""
          },
          "xLink": {
            "label": "",
            "url": ""
          },
          "annualRecurringRevenue": {
            "amountMicros": null,
            "currencyCode": ""
          }
        },
        "messageParticipants": [
          {
            "id": "20202020-0f2a-49d8-8aa2-ec8786153a0b",
            "role": "from",
            "handle": "outgoing",
            "displayName": "Christoph",
            "createdAt": "2024-07-08T16:08:50.028Z",
            "updatedAt": "2024-07-08T16:08:50.028Z",
            "messageId": "20202020-2b8a-405d-8f42-e820ca921421",
            "personId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "workspaceMemberId": "20202020-0687-4c41-b707-ed1bfca972a7"
          },
          {
            "id": "20202020-fc7d-4ad8-9aea-b78bcbf79cdd",
            "role": "from",
            "handle": "outgoing",
            "displayName": "Christoph",
            "createdAt": "2024-07-08T16:08:50.028Z",
            "updatedAt": "2024-07-08T16:08:50.028Z",
            "messageId": "20202020-04c8-4f24-93f2-764948e95014",
            "personId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "workspaceMemberId": "20202020-0687-4c41-b707-ed1bfca972a7"
          }
        ],
        "calendarEventParticipants": [
          {
            "id": "da8f47c3-8055-49ad-b7e4-9c9d5bbc1ecc",
            "handle": "christoph.calisto@linkedin.com",
            "displayName": "Christoph Calisto",
            "isOrganizer": true,
            "responseStatus": "ACCEPTED",
            "createdAt": "2024-07-08T16:08:50.011Z",
            "updatedAt": "2024-07-08T16:08:50.011Z",
            "calendarEventId": "86083141-1c0e-494c-a1b6-85b1c6fefaa5",
            "personId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "workspaceMemberId": null
          }
        ],
        "pointOfContactForOpportunities": [
          {
            "id": "20202020-be10-412b-a663-16bd3c2228e1",
            "name": "Opportunity 1",
            "closeDate": "2024-07-08T16:08:50.018Z",
            "probability": "0.5",
            "stage": "NEW",
            "position": 1,
            "createdAt": "2024-07-08T16:08:50.011Z",
            "updatedAt": "2024-07-08T16:08:50.011Z",
            "pointOfContactId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
            "amount": {
              "amountMicros": 100000,
              "currencyCode": "USD"
            }
          }
        ]
      },
...
]}
```
### Depth = 2
```
{
  "data": {
    "people": [
      {
        "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
        "email": "christoph.calisto@linkedin.com",
        "jobTitle": "",
        "phone": "+33789012345",
        "city": "Seattle",
        "avatarUrl": "",
        "position": 1,
        "createdAt": "2024-07-08T16:08:50.011Z",
        "updatedAt": "2024-07-08T16:08:50.011Z",
        "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
        "name": {
          "firstName": "Christoph",
          "lastName": "Callisto"
        },
        "linkedinLink": {
          "label": "",
          "url": ""
        },
        "xLink": {
          "label": "",
          "url": ""
        },
        "activityTargets": [],
        "favorites": [],
        "attachments": [],
        "timelineActivities": [],
        "company": {
          "id": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
          "name": "Linkedin",
          "domainName": "linkedin.com",
          "address": "",
          "employees": null,
          "idealCustomerProfile": false,
          "position": 1,
          "createdAt": "2024-07-08T16:08:50.011Z",
          "updatedAt": "2024-07-08T16:08:50.011Z",
          "accountOwnerId": null,
          "accountOwner": null,
          "linkedinLink": {
            "label": "",
            "url": ""
          },
          "xLink": {
            "label": "",
            "url": ""
          },
          "annualRecurringRevenue": {
            "amountMicros": null,
            "currencyCode": ""
          },
          "activityTargets": [],
          "favorites": [],
          "attachments": [],
          "timelineActivities": [],
          "people": [
            {
              "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
              "email": "christoph.calisto@linkedin.com",
              "jobTitle": "",
              "phone": "+33789012345",
              "city": "Seattle",
              "avatarUrl": "",
              "position": 1,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "name": {
                "firstName": "Christoph",
                "lastName": "Callisto"
              },
              "linkedinLink": {
                "label": "",
                "url": ""
              },
              "xLink": {
                "label": "",
                "url": ""
              }
            },
            {
              "id": "20202020-ac73-4797-824e-87a1f5aea9e0",
              "email": "sylvie.palmer@linkedin.com",
              "jobTitle": "",
              "phone": "+33780123456",
              "city": "Los Angeles",
              "avatarUrl": "",
              "position": 2,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "name": {
                "firstName": "Sylvie",
                "lastName": "Palmer"
              },
              "linkedinLink": {
                "label": "",
                "url": ""
              },
              "xLink": {
                "label": "",
                "url": ""
              }
            }
          ],
          "opportunities": [
            {
              "id": "20202020-be10-412b-a663-16bd3c2228e1",
              "name": "Opportunity 1",
              "closeDate": "2024-07-08T16:08:50.018Z",
              "probability": "0.5",
              "stage": "NEW",
              "position": 1,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "pointOfContactId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
              "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "amount": {
                "amountMicros": 100000,
                "currencyCode": "USD"
              }
            }
          ]
        },
        "pointOfContactForOpportunities": [
          {
            "id": "20202020-be10-412b-a663-16bd3c2228e1",
            "name": "Opportunity 1",
            "closeDate": "2024-07-08T16:08:50.018Z",
            "probability": "0.5",
            "stage": "NEW",
            "position": 1,
            "createdAt": "2024-07-08T16:08:50.011Z",
            "updatedAt": "2024-07-08T16:08:50.011Z",
            "pointOfContactId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
            "amount": {
              "amountMicros": 100000,
              "currencyCode": "USD"
            },
            "favorites": [],
            "activityTargets": [],
            "attachments": [],
            "timelineActivities": [],
            "pointOfContact": {
              "id": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
              "email": "christoph.calisto@linkedin.com",
              "jobTitle": "",
              "phone": "+33789012345",
              "city": "Seattle",
              "avatarUrl": "",
              "position": 1,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "companyId": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "name": {
                "firstName": "Christoph",
                "lastName": "Callisto"
              },
              "linkedinLink": {
                "label": "",
                "url": ""
              },
              "xLink": {
                "label": "",
                "url": ""
              }
            },
            "company": {
              "id": "20202020-3ec3-4fe3-8997-b76aa0bfa408",
              "name": "Linkedin",
              "domainName": "linkedin.com",
              "address": "",
              "employees": null,
              "idealCustomerProfile": false,
              "position": 1,
              "createdAt": "2024-07-08T16:08:50.011Z",
              "updatedAt": "2024-07-08T16:08:50.011Z",
              "accountOwnerId": null,
              "linkedinLink": {
                "label": "",
                "url": ""
              },
              "xLink": {
                "label": "",
                "url": ""
              },
              "annualRecurringRevenue": {
                "amountMicros": null,
                "currencyCode": ""
              }
            }
          }
        ],
        "messageParticipants": [
          {
            "id": "20202020-0f2a-49d8-8aa2-ec8786153a0b",
            "role": "from",
            "handle": "outgoing",
            "displayName": "Christoph",
            "createdAt": "2024-07-08T16:08:50.028Z",
            "updatedAt": "2024-07-08T16:08:50.028Z",
            "messageId": "20202020-2b8a-405d-8f42-e820ca921421",
            "personId": "20202020-1c0e-494c-a1b6-85b1c6fefaa5",
            "workspaceMemberId": "20202020-0687-4c41-b707-ed1bfca972a7",
            "message": {
              "id": "20202020-2b8a-405d-8f42-e820ca921421",
              "headerMessageId": "99ef24a8-2b8a-405d-8f42-e820ca921421",
              "direction": "outgoing",
              "subject": "Meeting Request",
              "text": "Hello, \n I hope this email finds you well. I am writing to request a meeting. I believe it would be beneficial for both parties to collaborate and explore potential opportunities. Would you be available for a meeting sometime next week? Please let me know your availability, and I will arrange a suitable time. \n Looking forward to your response.\n Best regards",
              "receivedAt": "2024-07-08T16:08:50.022Z",
              "createdAt": "2024-07-08T16:…
arnavsaxena17 pushed a commit to arnavsaxena17/twenty that referenced this pull request Oct 6, 2024
A mini PR to discuss with @Bonapara tomorrow

Separating remote objects from others and making the menu collapsible
(style to be changed)
<img width="225" alt="Screenshot 2024-06-12 at 23 25 59"
src="https://github.com/twentyhq/twenty/assets/6399865/b4b69d36-6770-43a2-a5e8-bfcdf0a629ea">

Biggest issue is we don't use local storage today so the collapsed state
gets lost.
I see we have localStorageEffect with recoil. Maybe store it there?
Seems easy but don't want to introduce a bad pattern.


Todo:
- style update
- collapsible favorites
- persistent storage
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants