Raphaël Bosi
19e77f9dd7
[DASHBOARDS] Update iFrame error message ( #16777 )
...
`Invalid URL` instead of `no data` for iFrame widgets.
<img width="1142" height="638" alt="CleanShot 2025-12-23 at 14 13 17@2x"
src="https://github.com/user-attachments/assets/22621e57-c4ba-4e1f-91d0-5c4ef435c649 "
/>
2025-12-23 15:33:55 +00:00
Baptiste Devessier
1324ad1ee3
Edit simple values in Field widget ( #16749 )
...
https://github.com/user-attachments/assets/116b8259-b366-47bf-8068-b5276b138e03
2025-12-22 14:21:39 +00:00
Baptiste Devessier
9984981e82
Field widget edit relations ( #16714 )
...
- Let the user edit their relations
- Create a `useCurrentWidget` that returns the widget information in the
context of a rendered widget. Relies on a component instance context.
https://github.com/user-attachments/assets/e908364f-2d53-4adb-97a1-4d950f51976a
Follow up:
- Show pen button for all Field widgets
2025-12-19 21:21:00 +01:00
Baptiste Devessier
b5ebc44fee
Add field widget ( #16609 )
...
- Ability to display the details of a field
- The field can be edited (relations edition will be supported later)
- For now, the widget configuration stores the name of the field instead
of its fieldMetadataId. A hook resolves the fieldMetadataId from the
list of fields and the provided name. This will be replaced once we
migrate the configuration to the backend.
## Demo
https://github.com/user-attachments/assets/ab7efbda-66b2-46c1-b641-c350977c31dd
## Remaining to do
- Edition of relations
2025-12-18 17:25:51 +00:00
Raphaël Bosi
01ffca0cef
[DASHBOARDS] Add the ability to click to create a widget ( #16673 )
...
## Video QA
https://github.com/user-attachments/assets/813a2040-6ee9-418c-b7da-1126c9720446
2025-12-18 14:37:22 +00:00
nitin
75f2c26d3f
lazy load rich text widget ( #16569 )
2025-12-15 16:30:54 +01:00
nitin
44f0cfdd9e
[Dashboards] Rich text editor frontend ( #16437 )
...
closes https://github.com/twentyhq/core-team-issues/issues/1894
2025-12-12 23:06:59 +05:30
Baptiste Devessier
fd54a2af5c
Create fields widget ( #16403 )
...
https://github.com/user-attachments/assets/b150815a-5d54-4d4a-b984-20dcf7b29aa7
2025-12-10 10:31:36 +01:00
nitin
2f36c2e82e
[Dashboards] Server: Rich Text Widget ( #16296 )
...
closes https://github.com/twentyhq/core-team-issues/issues/1893
sync in the transformation layer -
with just the blocknote format -
<img width="1532" height="1058" alt="CleanShot 2025-12-04 at 16 43 27"
src="https://github.com/user-attachments/assets/081483fb-0bd0-4f14-81fc-8ea2261367a2 "
/>
with just the mardown format -
<img width="1534" height="1056" alt="CleanShot 2025-12-04 at 16 45 03"
src="https://github.com/user-attachments/assets/4eae513b-423d-4597-b79c-97d1f33ab994 "
/>
attaching response since in screen shot its getting cut -
```
{
"id": "7189a10a-177c-4cc2-8946-950b8c125913",
"pageLayoutTabId": "82ac56dd-4351-43ad-bf3d-49624c057e17",
"workspaceId": "20202020-1c25-4d02-bf25-6aeccf7ea419",
"title": "awdawd awdawdawd",
"type": "STANDALONE_RICH_TEXT",
"objectMetadataId": null,
"gridPosition": {
"row": 1,
"column": 1,
"rowSpan": 1,
"columnSpan": 1
},
"configuration": {
"body": {
"markdown": "# Hello World",
"blocknote": "[{\"id\":\"2e744f21-7c71-414d-b87f-fb48400c593c\",\"type\":\"heading\",\"props\":{\"textColor\":\"default\",\"backgroundColor\":\"default\",\"textAlignment\":\"left\",\"level\":1},\"content\":[{\"type\":\"text\",\"text\":\"Hello World\",\"styles\":{}}],\"children\":[]}]"
}
},
"createdAt": "2025-12-04T11:14:52.212Z",
"updatedAt": "2025-12-04T11:14:52.212Z",
"deletedAt": null
}
```
2025-12-04 18:28:33 +05:30
Raphaël Bosi
2b80d9e015
[DASHBOARDS] Widget duplication ( #15979 )
...
## Widget duplication
- Created a shared component for the option menu shared by the record
page, the dashboards and the workflows
- Fix arrow selection in the option menu in workflows, which wasn't
working
- Scroll to the new widget after creation and open the new widget
settings
https://github.com/user-attachments/assets/47b8dade-44bd-4ba2-a81c-01b09e8718d3
2025-11-24 14:38:18 +01:00
Baptiste Devessier
f2df456588
Refactor Widget components ( #15996 )
...
## Demo
All components look the same as before.
https://github.com/user-attachments/assets/ddaf49f7-0e78-4755-af88-19d43b349078
## Catalog of all states of WidgetRenderer
Went really complete on all the states of the component.
https://github.com/user-attachments/assets/303f773a-254d-4469-b904-f5cd9831a823
2025-11-24 11:51:32 +01:00
Lucas Bordeau
061cc897af
Improve record group aggregate query performance ( #15828 )
...
This PR is a first step for improving the performance on boards and
table with groups.
It is related to :
https://github.com/twentyhq/core-team-issues/issues/1870
Here we implement only a groupBy query for aggregate values in the group
section.
This also allows to improve the DX of aggregate computing and group by
query creation and parsing.
## Demo
Main :
https://github.com/user-attachments/assets/5d2a8077-5322-4928-a551-f03583bcfb87
This PR :
https://github.com/user-attachments/assets/d0e82b28-72c3-40f0-b5cb-045f1a736ffb
## Aggregate update bug fix
This PR also solves a bug with aggregate update that was already present
on main.
The bug is linked to core views not being updated properly during a
modification of the aggregate operation on a view.
We should probably improve the view lifecycle and state management
because it is a bit too complex right now.
Main :
https://github.com/user-attachments/assets/10dbfb8b-dfa0-4f21-8698-d222871a43e7
This PR :
https://github.com/user-attachments/assets/bac41890-5191-4e4c-b82b-19b1039e9ab5
## Miscellaneous
- Fixed optimistic rendering of group by queries, when adding a new
record, the aggregate recomputes well.
## TODO
- We might want to improve the optimistic for group by queries that
don't have records nor more than one dimension.
2025-11-23 20:40:23 +01:00
nitin
fddac24e7f
connect line chart to backend ( #15657 )
...
https://github.com/user-attachments/assets/b797c5a8-32a8-4d3e-9fb1-7541d107a19f
optimizations:
before:
https://github.com/user-attachments/assets/bf45a3f1-5f89-40c1-9ce4-c2d912b77d63
after:
https://github.com/user-attachments/assets/61bfd603-7b63-4695-8ae8-68fe7d3bfea0
2025-11-13 11:35:08 +00:00
Raphaël Bosi
44d6ec2594
Widget: Allow resizing from all corners and sides ( #15680 )
...
https://github.com/user-attachments/assets/3e4e1da2-87e6-440e-8371-835ef6eccf59
2025-11-07 15:28:39 +01:00
Baptiste Devessier
bfe1f47065
Create old fields design widget ( #15645 )
...
In this PR:
- Pass `layoutMode` and `tabId` via PageLayoutContentContext provider
- Getting `pageLayoutType` from the current page layout
- Getting isInPinnedTab through `useIsInPinnedTab` hook
## Before
<img width="3456" height="2160" alt="CleanShot 2025-11-06 at 14 22
44@2x"
src="https://github.com/user-attachments/assets/763bb413-5739-45ef-85ed-82a72415886f "
/>
## After
<img width="3456" height="2162" alt="CleanShot 2025-11-06 at 14 20
38@2x"
src="https://github.com/user-attachments/assets/eee6cccd-9d36-426e-a22f-400e8f7f9413 "
/>
---------
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com >
2025-11-06 18:16:42 +01:00
Raphaël Bosi
931d12c77b
Add animations on widget buttons and on action buttons ( #15631 )
...
Animated:
- Grip
- Trash can
- Action buttons
https://github.com/user-attachments/assets/1cac7a5e-2036-4308-9622-3b4809ae90a3
2025-11-06 17:38:05 +01:00
nitin
902eb2c5d2
Instant widget placeholder placement on drag end ( #15496 )
...
closes -
https://discord.com/channels/1130383047699738754/1430596561137700957
fixed a bug - where on chart type change in side panel -- wont update
the widgets minimum size
---------
Co-authored-by: Raphaël Bosi <71827178+bosiraphael@users.noreply.github.com >
Co-authored-by: Lucas Bordeau <bordeau.lucas@gmail.com >
2025-11-03 17:08:13 +00:00
Baptiste Devessier
5f0d24798a
Support workflows in record page layouts ( #15471 )
...
https://github.com/user-attachments/assets/275a02a3-7054-45d1-9423-75bb5223a8ba
2025-10-31 18:45:58 +01:00
Ranjeet Baraik
0cbd1e8ec5
fix: login redirection to active objects ( #15366 )
...
Fixes - https://github.com/twentyhq/twenty/issues/15364
- Removed `activeNonSystemObjectMetadataItems` from the hook as it was
not necessary. Hook use `alphaSortedActiveNonSystemObjectMetadataItems`
now.
- Correctly check for read permissions.
---------
Co-authored-by: Charles Bochet <charles@twenty.com >
2025-10-30 17:31:26 +01:00
nitin
2510cbf614
Add lock on dashboard restricted charts ( #15476 )
...
closes
https://discord.com/channels/1130383047699738754/1433452994132840478
2025-10-30 14:59:34 +00:00
nitin
0fdf76560d
Widget cards ( #15387 )
...
figma -
https://www.figma.com/design/xt8O9mFeLl46C5InWwoMrN/Twenty?node-id=79795-372071&t=0Rg3h23G8F7v80cs-0
for the pinned tab column or the left column -- there is only one state
change! -- which, after talks with @Bonapara -- we should try to keep
the same if possible! -- right now, there is no way to test it -- so I
did not add the same
closes -
https://discord.com/channels/1130383047699738754/1430825706643918942 and
https://discord.com/channels/1130383047699738754/1430599763807436870
story QA -
<img width="1535" height="1239" alt="Screenshot 2025-10-28 at 00 46 23"
src="https://github.com/user-attachments/assets/9293983e-2d08-427b-971f-731e6f1517aa "
/>
2025-10-28 20:25:52 +05:30
Baptiste Devessier
9b2a73d50a
Support more standard objects in Record Page Layout ( #15288 )
...
Used the `PageLayoutRenderer` for people, opportunities, tasks and
notes.
## Demo
https://github.com/user-attachments/assets/35e61702-f338-47b3-91b7-fd3951a0c967
2025-10-24 17:38:49 +02:00
Raphaël Bosi
f301f07e43
Convert number chart to aggregate chart allowing date aggregates ( #15294 )
...
- Convert number chart to aggregate chart
- Allow date aggregates on all charts
- Only allow `EARLIEST` and `LATEST` on Aggregate chart and Gauge chart
- Various design fixes
https://github.com/user-attachments/assets/b5a2239d-7b11-48b5-93e6-98ceffae5cab
2025-10-24 05:48:42 +13:00
Raphaël Bosi
5e7bdd1e04
Create widget grip and update title color ( #15280 )
...
Changed grip size and stoped using IconButton
2025-10-23 09:10:25 +00:00
Raphaël Bosi
e9ab54766c
Remove blue border on hover on widgets when not in edit mode ( #15268 )
...
https://github.com/user-attachments/assets/5370e068-fc42-4f8c-9ce5-db88ee0f303d
2025-10-22 18:26:50 +02:00
Raphaël Bosi
1c27206b41
Use aggregate operations in the widget configuration instead of extended aggregate operations ( #15248 )
...
- Use aggregate operations in the widget configuration instead of
extended aggregate operations
- Use aggregate operation from generated graphql in the frontend
2025-10-22 14:19:02 +02:00
Félix Malfait
f7421c5fc0
Add queue management dashboard ( #15202 )
...
Adds a comprehensive queue management interface to the admin panel for
viewing and managing background jobs.
**Features:**
- Queue detail pages showing paginated job lists (50 per page)
- Filter jobs by state: completed, failed, active, waiting, delayed,
paused
- Checkbox selection with bulk actions (delete jobs, retry failed jobs)
- Per-job dropdown menu for individual retry/delete
- Expandable rows showing error messages, stack traces, and job data
- Relative timestamps with hover tooltips
- Display attempt counts on failed jobs
- Dynamic retention policy info from backend
**Changes:**
- Backend: New AdminPanelQueueService with GraphQL endpoints for job
listing, retry, and delete
- Frontend: Queue detail page with QueueJobsTable component
- Updated retention policy: completed jobs kept 4 hours, failed jobs
kept 7 days (max 1000 each)
- Added JobState enum for type safety
<img width="634" height="696" alt="Screenshot_2025-10-20_at_11 45 25"
src="https://github.com/user-attachments/assets/c67bcd27-26cf-47f5-9575-3cd5684d006b "
/>
<img width="484" height="680" alt="Screenshot_2025-10-20_at_11 45 14"
src="https://github.com/user-attachments/assets/68725cc6-b3ec-4098-99ca-f9a717d6f8f1 "
/>
<img width="490" height="643" alt="Screenshot_2025-10-20_at_11 45 05"
src="https://github.com/user-attachments/assets/b68a5809-33ff-4452-b48b-741aff7f1dd6 "
/>
<img width="685" height="662" alt="Screenshot 2025-10-20 at 13 15 01"
src="https://github.com/user-attachments/assets/eeb5207b-de5c-4b18-bdde-392892053dab "
/>
2025-10-21 16:02:50 +02:00
Baptiste Devessier
f6d133f285
Scaffold all company cards as widgets ( #15149 )
...
This PR doesn't support mobile and side-panel modes. The fields tab will
be displayed in these cases.
## Demo
https://github.com/user-attachments/assets/0b2e699c-2b8e-4212-8c75-00d7d2e25237
---------
Co-authored-by: Félix Malfait <felix.malfait@gmail.com >
2025-10-18 22:26:27 +02:00
Baptiste Devessier
1b6c9e851f
Companies show page as record page ( #15132 )
...
Example showing two widgets positioned in a vertical list:
https://github.com/user-attachments/assets/cf3e9793-7d80-4cab-b708-aad9f2bca7d8
2025-10-16 16:45:06 +02:00
nitin
bd16c77fed
Dashboards followups 2 ( #15107 )
...
adding min height and widths on each chart
this Pr address this followups -
-
https://github.com/twentyhq/core-team-issues/issues/1710#issuecomment-3405312108
- <img width="843" height="38" alt="Screenshot 2025-10-15 at 15 19 27"
src="https://github.com/user-attachments/assets/f33da21f-a605-40f9-b7fa-02be9dff5908 "
/>
- <img width="830" height="42" alt="Screenshot 2025-10-15 at 15 19 40"
src="https://github.com/user-attachments/assets/bf6f3783-b5cc-44c0-94a2-029a489c852e "
/>
video QA
before:
https://github.com/user-attachments/assets/28262a7b-531f-4dcb-9047-c587fe3d8af6
after:
https://github.com/user-attachments/assets/b0fdbc18-3a7e-4c85-98b6-5799d7207bb4
2025-10-15 19:35:56 +05:30
Baptiste Devessier
41c970e163
Make page layouts less specific ( #15102 )
...
This PR makes some hooks/functions/components more generic. I untied
them from dashboards as they will be needed for any page layout type.
---------
Co-authored-by: Félix Malfait <felix.malfait@gmail.com >
2025-10-15 14:34:34 +02:00
nitin
436084f8f4
Split bar graph into two distinct horizontal and vertical bars ( #15061 )
...
### Summary
Split BAR into VERTICAL_BAR and HORIZONTAL_BAR as separate chart types.
### The Problem
Initially wanted a simple vertical/horizontal toggle for bar charts, but
ran into a GraphQL union type
constraint: union types can't have the same field name with different
nullability.
- Vertical bars need groupByFieldMetadataIdX as required (categories on
X)
- Horizontal bars need groupByFieldMetadataIdY as required (categories
on Y)
- GraphQL schema generation fails with this setup
### The Solution
Use semantic primaryAxis and secondaryAxis naming that's
orientation-agnostic:
- primaryAxisGroupByFieldMetadataId = main grouping field (e.g.,
"Company Name")
- secondaryAxisGroupByFieldMetadataId = optional secondary grouping
(e.g., "Stage")
These fields have consistent meaning regardless of orientation. The
visual mapping happens at the UI layer:
- Vertical bars: primary data renders on X-axis, secondary on Y-axis
- Horizontal bars: primary data renders on Y-axis, secondary on X-axis
Both chart types share the same DTO structure with consistent
nullability.
### What Changed
- Split GraphType.BAR → VERTICAL_BAR | HORIZONTAL_BAR
- Renamed fields: primaryAxisGroupByFieldMetadataId,
secondaryAxisGroupByFieldMetadataId (+ subfield
variants)
- useChartSettingsValues(): Maps semantic fields to setting values (no
swapping)
- getBarChartSettings(): Dynamically arranges settings panel based on
orientation
- transformGroupByDataToBarChartData(): Maps semantic fields to Nivo's
layout prop
video QA
https://github.com/user-attachments/assets/479061b5-712e-4ca6-9858-95273d1f16c1
2025-10-15 11:38:48 +02:00
Raphaël Bosi
f84d0514b7
Remove edit widget button and add on click edition ( #15034 )
...
Remove edit widget button and add on click edition when in edit mode
Before:
https://github.com/user-attachments/assets/1579aa35-f67e-4ba5-9500-5999c7b2164b
After:
https://github.com/user-attachments/assets/3c7677ab-57f7-485d-b619-116ea9ec6c06
2025-10-10 16:13:21 +00:00
nitin
44f97058ac
Tidy up validation for configuration ( #14939 )
...
closes https://github.com/twentyhq/core-team-issues/issues/1605
TODO:
~~- add stories~~
~~- add base graph on companies when creating a new graph widget~~
2025-10-09 20:34:51 +00:00
nitin
fced148724
Fix widget header shrink and make widget placeholder to change state on click ( #14999 )
...
closes closes https://github.com/twentyhq/core-team-issues/issues/1609
2025-10-09 17:06:53 +05:30
Raphaël Bosi
d10ab5f67c
Chart editor - Part 1 ( #14820 )
...
This PR is the first part of the creation of the Chart editor.
https://github.com/user-attachments/assets/8b0af8ea-be41-4506-84cb-e40f5521cbf0
Done:
- Bar chart settings (except filters)
- Line chart settings (except filters)
In progress:
- Pie chart settings
- Number chart settings
- Gauge chart settings
Left to do:
- Loosen the backend validation to allow the user to save a partial
configuration, validate the graph configuration in the frontend and
display a error friendly message in the graph if the config is not
completed yet
- Implement the filter edition
- Finish the other graph types settings
2025-10-03 10:25:45 +02:00
nitin
274f4333b4
Field level permission checks on widgets ( #14774 )
2025-09-30 16:00:09 +02:00
nitin
ea144c434b
Add configuration types for widgets ( #14717 )
...
closes https://github.com/twentyhq/core-team-issues/issues/1532
2025-09-29 11:41:26 +00:00
Raphaël Bosi
66a6190e3c
Create save dashboard record action ( #14665 )
...
Closes https://github.com/twentyhq/core-team-issues/issues/1502
- Created the save action
- Removed the temporary data attribute from the page layout widget since
we will connect widgets to real data soon
https://github.com/user-attachments/assets/2b46b511-f2c2-4e11-873c-a76fd31704e5
2025-09-24 12:03:27 +00:00
Raphaël Bosi
0750bcaefc
Create edit dashboard action ( #14564 )
...
Closes https://github.com/twentyhq/core-team-issues/issues/1435
Introduced a new pattern to force to register an action or not.
Discussed this with @charlesBochet
2025-09-17 15:58:26 +00:00
Raphaël Bosi
3b868c3d2a
Page layout refactoring ( #14535 )
...
In this PR:
- Refactored the page layout renderer
- Converted all the states to component states
- Removed the page layout edition in settings
TODOs in next PRs:
- Fix bug with the drag selector not taking the scroll into account to
display the dragged area
- Readd the tab edition in edit mode
2025-09-16 15:42:51 +00:00
Raphaël Bosi
e80c552ae7
Create the Dashboard record show page ( #14423 )
...
Closes https://github.com/twentyhq/core-team-issues/issues/1438
- Reorganized PageLayout module
- Created `DashboardRenderer` and `PageLayoutRenderer`
- Created stories for the `PageLayoutRenderer`
- Refactored the Widget components
https://github.com/user-attachments/assets/27e9ac8f-b237-4c21-8494-3fab6d65af3a
2025-09-11 18:26:26 +02:00