Compare commits

..
Author SHA1 Message Date
Claude 8168565d26 Fix admin panel Forbidden error for users with server-level admin flags
The AdminPanelResolver had a class-level SettingsPermissionGuard(SECURITY)
that checked workspace-role permissions on every request, blocking server-level
admins (canAccessFullAdminPanel/canImpersonate) who lacked the workspace SECURITY
permission flag. Replace with AdminPanelSecurityGuard that bypasses the
workspace permission check when server-level admin flags are set.

https://claude.ai/code/session_01HrMrsJALsayr5zn5cqPtVP
2026-04-15 20:33:37 +00:00
cddc47b61f i18n - translations (#19731)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2026-04-15 19:08:24 +02:00
Charles BochetandGitHub 446c39d1c0 Fix silent failures in logic function route trigger execution (#19698)
## Summary

Route-triggered logic functions were returning empty 500 responses with
zero server-side logging when the Lambda build chain failed. This PR
makes those failures observable and returns meaningful HTTP responses to
API clients.

- **Observability** — Log errors (with stack traces) at each layer of
the execution chain: `LambdaDriver` (deps-layer fetch, SDK-layer fetch,
invocation), `LogicFunctionExecutorService`, and `RouteTriggerService`.
- **Typed exceptions** — Replace raw `throw error` sites with
`LogicFunctionException` carrying an appropriate code and
`userFriendlyMessage` (new codes: `LOGIC_FUNCTION_EXECUTION_FAILED`,
`LOGIC_FUNCTION_LAYER_BUILD_FAILED`).
- **Correct HTTP semantics** — `RouteTriggerService` maps inner
exception codes to the right `RouteTriggerExceptionCode` so
`LOGIC_FUNCTION_NOT_FOUND` returns 404 and `RATE_LIMIT_EXCEEDED` returns
429 (new code + filter case) instead of a generic 500.
- **User-facing messages** — Forward the inner
`CustomException.userFriendlyMessage` when wrapping into
`RouteTriggerException`, without leaking raw internal error text into
the public exception message.
- **Infra** — Bump Lambda ephemeral storage from 2048 to 4096 MB to
prevent `ENOSPC` errors during yarn install layer builds (root cause of
the original silent failures).
2026-04-15 16:49:43 +00:00
5eda10760c Fix navbar folder opening lag by deferring navigation until expand animation completes (#19686)
### Before


https://github.com/user-attachments/assets/7d57aa55-8d4c-43e1-8835-f40206e5e453



### After


https://github.com/user-attachments/assets/2457c8ee-fcb9-41ae-a8f7-08f8c7b4a233

---------

Co-authored-by: Etienne <45695613+etiennejouan@users.noreply.github.com>
2026-04-15 16:31:33 +00:00
b9605a3003 Refactor SnackBar duration handling and progress bar visibility logic (#19712)
## Summary

Fixes error snackbars disappearing too quickly by **disabling
auto-dismiss for error variants by default**. Error snackbars now remain
visible until the user closes them.

Closes #19694

## What changed

- Error snackbars no longer default to a 6s timeout (they only
auto-dismiss if an explicit `duration` is provided).
- Non-error snackbars keep the existing default auto-dismiss behavior
(6s).
- Progress bar animation/visibility is tied to auto-dismiss (no progress
bar when there’s no duration).

**Files**
-
packages/twenty-front/src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx

## How to test

1. Trigger a long error snackbar (example: spreadsheet/CSV import error
with a long message).
2. Confirm the snackbar **stays visible** until clicking **Close**.
3. Trigger a success/info snackbar and confirm it **still
auto-dismisses** after ~6s.

## Notes

- Call sites that explicitly pass `options.duration` for error snackbars
will continue to auto-dismiss (intentional).

---------

Co-authored-by: Charles Bochet <charles@twenty.com>
2026-04-15 16:22:28 +00:00
WeikoandGitHub 56d6e13b5d Fix fields widget flash during reset (#19726)
Summary

- Remove the evictViewMetadataForViewIds step from the page-layout reset
flow. It synchronously cleared viewFields/viewFieldGroups rows from the
metadata store, leaving a window where
useFieldsWidgetGroups saw a view with no fields and fell back to
buildDefaultFieldsWidgetGroups, briefly rendering a synthetic "General"
+ "Other" layout before the real reset defaults
arrived.
- invalidateMetadataStore() alone is sufficient: it marks the
collections stale and triggers MinimalMetadataLoadEffect to refetch,
which replaces current atomically. The UI now
transitions old-layout → new-default with no synthetic flash.
- Simplified refreshPageLayoutAfterReset to no longer take a
collectAffectedViewIds callback, and updated both tab/widget reset call
sites plus ObjectLayout.tsx accordingly.
- Deleted the now-unused evictViewMetadataForViewIds and
collectViewIdsFromWidgets utils.
2026-04-15 16:08:24 +00:00
725171bfd3 i18n - translations (#19729)
Created by Github action

Co-authored-by: github-actions <github-actions@twenty.com>
2026-04-15 18:11:26 +02:00
Raphaël BosiandGitHub 3b85747d3f Go back to the original command K button (#19727)
## Before


https://github.com/user-attachments/assets/868e5293-8843-44c8-8011-b7130e97fa95


## After


https://github.com/user-attachments/assets/89cf46cc-1fb1-4e78-bfef-53e1d04e8ebf
2026-04-15 15:53:26 +00:00
Paul RastoinandGitHub a4cc7fb9c5 [Upgrade] Fix workspace creation cursor (#19701)
## Summary

### Problem

The upgrade migration system required new workspaces to always start
from a workspace command, which was too rigid. When the system was
mid-upgrade within an instance command (IC) segment, workspace creation
would fail or produce inconsistent state.

### Solution

#### Workspace-scoped instance command rows

Instance commands now write upgrade migration rows for **all
active/suspended workspaces** alongside the global row. This means every
workspace has a complete migration history, including instance command
records.

- `InstanceCommandRunnerService` reloads `activeOrSuspendedWorkspaceIds`
immediately before writing records (both success and failure paths) to
mitigate race conditions with concurrent workspace creation.
- `recordUpgradeMigration` in `UpgradeMigrationService` accepts a
discriminated union over `status`, handles `error: unknown` formatting
internally, and writes global + workspace rows in batch.

#### Flexible initial cursor for new workspaces

`getInitialCursorForNewWorkspace` now accepts the last **attempted**
(not just completed) instance command with its status:

- If the IC is `completed` and the next step is a workspace segment →
cursor is set to the last WC of that segment (existing behavior).
- If the IC is `failed` or not the last of its segment → cursor is set
to that IC itself, preserving its status.

This allows workspaces to be created at any point during the upgrade
lifecycle, including mid-IC-segment and after IC failure.

#### Relaxed workspace segment validation

`validateWorkspaceCursorsAreInWorkspaceSegment` accepts workspaces whose
cursor is:
1. Within the current workspace segment, OR
2. At the immediately preceding instance command with `completed` status
(handles the `-w` single-workspace upgrade scenario).

Workspaces with cursors in a previous segment, ahead of the current
segment, or at a preceding IC with `failed` status are rejected.

### Test plan
created empty workspaces to allow testing upgrade with several active
workspaces
2026-04-15 15:41:10 +00:00
Raphaël BosiandGitHub 0f8152f536 Fix command menu item edit record selection dropdown icons (#19725)
## Before
<img width="816" height="126" alt="CleanShot 2026-04-15 at 17 20 11@2x"
src="https://github.com/user-attachments/assets/647d6aa6-1000-41d9-9351-c1489bc095c6"
/>


## After
<img width="808" height="120" alt="CleanShot 2026-04-15 at 17 19 05@2x"
src="https://github.com/user-attachments/assets/e7685370-b6eb-4720-a5dd-401dfae8dc6b"
/>
2026-04-15 15:31:59 +00:00
Charles BochetandGitHub a328c127f3 Fix standalone page migration failing on navigationMenuItem enum type change (#19724)
## Summary
- The `AddStandalonePageFastInstanceCommand` migration was failing with:
`default for column "type" cannot be cast automatically to type
core."navigationMenuItem_type_enum"`
- The migration was missing `DROP DEFAULT` / `SET DEFAULT` around the
`ALTER COLUMN TYPE` for `navigationMenuItem.type`. PostgreSQL cannot
automatically cast the existing default (`'VIEW'::old_enum`) to the new
enum type.
- The same 3-step pattern (DROP DEFAULT → ALTER TYPE → SET DEFAULT) was
already correctly applied for `pageLayout.type` in the same migration —
this fix brings `navigationMenuItem.type` in line.
2026-04-15 17:25:55 +02:00
Baptiste DevessierandGitHub 8cb803cedf Various bug fixes Record page layouts (#19719)
Fixes:

- Can't add multiple widgets in a row
- Ensure newly created is always focused
2026-04-15 15:12:57 +00:00
WeikoandGitHub 5e83ad43de Update backfill page layout command (#19687) 2026-04-15 14:55:42 +00:00
Raphaël BosiandGitHub 7ba5fe32f8 Add new html tags to the remote elements (#19723)
- Add 72 missing HTML and SVG elements to the remote-dom component
registry (48 HTML + 24 SVG), bringing the total from 47 to 119 supported
elements
- HTML additions include semantic inline text (b, i, u, s, mark, sub,
sup, kbd, etc.), description lists, ruby annotations, structural
elements (figure, details, dialog), and form utilities (fieldset,
progress, meter, optgroup)
- SVG additions include containers (svg, g, defs), shapes (path, circle,
rect, line, polygon), text (text, tspan), gradients (linearGradient,
radialGradient, stop), and utilities (clipPath, mask, foreignObject,
marker)
- Add htmlTag override to support SVG elements with camelCase names
(e.g. clipPath, foreignObject) while keeping custom element tags
lowercase per the Web Components spec
2026-04-15 14:53:23 +00:00
7601dbc218 i18n - translations (#19722)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2026-04-15 16:12:03 +02:00
Thomas TrompetteandGitHub 8a968d1e31 Hide workflow manual trigger from command menu on "Select All" (#19718)
https://github.com/user-attachments/assets/e19c6d23-03c1-49c8-8b83-5c8f5f0f1135
2026-04-15 13:55:38 +00:00
0c4a194c7a i18n - translations (#19720)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2026-04-15 15:50:21 +02:00
EtienneandGitHub 94b8e34362 Object view widget - Introduce new TABLE_WIDGET view type (#19545)
closes
https://discord.com/channels/1130383047699738754/1491549365263667230/1491804729397743666
2026-04-15 13:30:37 +00:00
MarieandGitHub 2fccd194f3 [Billing for self host] End dummy enterprise key validity (#19560)
<img width="1504" height="755" alt="Screenshot 2026-04-10 at 16 40 07"
src="https://github.com/user-attachments/assets/68a12e40-a077-48df-9e18-885493520a32"
/>


Re-using hasValidEnterpriseKey to avoid breaking changes. 
This will be entirely removed in the next versions.
2026-04-15 13:26:38 +00:00
762fb6fd64 Fix active navigation item disambiguation (#19664)
## Summary

- Introduce a `activeNavigationMenuItemState` Jotai atom (persisted via
localStorage) to disambiguate active navigation items when multiple
items share the same URL
- Add active item evaluation for record show pages with three scenarios:
1. Navigating from a nav item → parent stays active + dedicated RECORD
item also active
  2. Clicking a dedicated RECORD nav item → only that item active
3. Navigating via search/direct link → OBJECT nav item fallback, or
Opened section if none exists
- Extract shared active logic into `isNavigationMenuItemActive` utility
to eliminate duplication between orphan items and folder items
- Support multiple simultaneously active items within folders via
`Set<number>` instead of a single index

---------

Co-authored-by: Etienne <45695613+etiennejouan@users.noreply.github.com>
2026-04-15 13:00:47 +00:00
Raphaël BosiandGitHub 7956ecc7b2 Invert pinned and dots icon buttons in command menu items edit mode (#19717)
## Before
<img width="804" height="158" alt="CleanShot 2026-04-15 at 14 22 22@2x"
src="https://github.com/user-attachments/assets/65c4d4f1-6f17-47e2-b964-f3b7132d2f18"
/>

## After
<img width="804" height="168" alt="CleanShot 2026-04-15 at 14 21 38@2x"
src="https://github.com/user-attachments/assets/2f1d4fff-5f07-4df0-833e-129ad85391a9"
/>
2026-04-15 12:38:52 +00:00
WeikoandGitHub e12b55a951 Fix duplicate Fields widget (#19696)
## Context
Tab duplication was broken after the view creation logic was deferred
and moved to the FE.

- Duplicating a tab or a FIELDS widget now produces a fully independent
copy: new view, new view field groups, new view fields — all with fresh
IDs — while preserving any unsaved edits
  from the source widget.
- Removed the backend auto-seed of default view fields / view field
groups in ViewService.createOne for FIELDS_WIDGET views. The frontend
always sends the complete layout via
upsertFieldsWidget, so the auto-seed was both redundant and the source
of potential bugs.
- Extracted a shared useDuplicateFieldsWidgetForPageLayout hook used by
both tab and widget duplication paths, plus a small
useCloneViewInMetadataStore helper that clones the FlatView
in the metadata store and returns the copied flat view fields/groups for
the caller.
2026-04-15 12:29:44 +00:00
239 changed files with 8952 additions and 2724 deletions
@@ -735,6 +735,7 @@ enum ViewType {
KANBAN
CALENDAR
FIELDS_WIDGET
TABLE_WIDGET
}
enum ViewKey {
@@ -534,7 +534,7 @@ export interface View {
__typename: 'View'
}
export type ViewType = 'TABLE' | 'KANBAN' | 'CALENDAR' | 'FIELDS_WIDGET'
export type ViewType = 'TABLE' | 'KANBAN' | 'CALENDAR' | 'FIELDS_WIDGET' | 'TABLE_WIDGET'
export type ViewKey = 'INDEX'
@@ -9267,7 +9267,8 @@ export const enumViewType = {
TABLE: 'TABLE' as const,
KANBAN: 'KANBAN' as const,
CALENDAR: 'CALENDAR' as const,
FIELDS_WIDGET: 'FIELDS_WIDGET' as const
FIELDS_WIDGET: 'FIELDS_WIDGET' as const,
TABLE_WIDGET: 'TABLE_WIDGET' as const
}
export const enumViewKey = {
@@ -45,7 +45,7 @@ const getHtmlElementSchemas = (): ComponentSchema[] => {
events: element.events
? [...COMMON_HTML_EVENTS, ...element.events]
: COMMON_HTML_EVENTS,
htmlTag: extractHtmlTag(element.tag),
htmlTag: element.htmlTag ?? extractHtmlTag(element.tag),
}));
};
@@ -12,6 +12,7 @@ export const HtmlElementConfigZ = z.object({
.regex(/^Html[A-Z]/, 'Name must be PascalCase starting with Html'),
properties: z.record(z.string(), PropertySchemaZ),
events: z.array(z.string()).optional(),
htmlTag: z.string().optional(),
});
export const HtmlElementConfigArrayZ = z.array(HtmlElementConfigZ);
@@ -1,13 +1,12 @@
type PropertySchema = {
type: 'string' | 'number' | 'boolean';
optional: boolean;
};
import { type PropertySchema } from './PropertySchema';
import { SVG_PRESENTATION_PROPERTIES } from './SvgPresentationProperties';
export type AllowedHtmlElement = {
tag: string;
name: string;
properties: Record<string, PropertySchema>;
events?: string[];
htmlTag?: string;
};
export const ALLOWED_HTML_ELEMENTS: AllowedHtmlElement[] = [
@@ -249,4 +248,421 @@ export const ALLOWED_HTML_ELEMENTS: AllowedHtmlElement[] = [
height: { type: 'number', optional: true },
},
},
// Semantic inline text
{ tag: 'html-b', name: 'HtmlB', properties: {} },
{ tag: 'html-i', name: 'HtmlI', properties: {} },
{ tag: 'html-u', name: 'HtmlU', properties: {} },
{ tag: 'html-s', name: 'HtmlS', properties: {} },
{ tag: 'html-mark', name: 'HtmlMark', properties: {} },
{ tag: 'html-sub', name: 'HtmlSub', properties: {} },
{ tag: 'html-sup', name: 'HtmlSup', properties: {} },
{ tag: 'html-abbr', name: 'HtmlAbbr', properties: {} },
{ tag: 'html-cite', name: 'HtmlCite', properties: {} },
{ tag: 'html-kbd', name: 'HtmlKbd', properties: {} },
{ tag: 'html-samp', name: 'HtmlSamp', properties: {} },
{ tag: 'html-var', name: 'HtmlVar', properties: {} },
{ tag: 'html-dfn', name: 'HtmlDfn', properties: {} },
{ tag: 'html-bdi', name: 'HtmlBdi', properties: {} },
{
tag: 'html-bdo',
name: 'HtmlBdo',
properties: {
dir: { type: 'string', optional: true },
},
},
{
tag: 'html-data',
name: 'HtmlData',
properties: {
value: { type: 'string', optional: true },
},
},
// Edited/annotated text
{
tag: 'html-del',
name: 'HtmlDel',
properties: {
cite: { type: 'string', optional: true },
dateTime: { type: 'string', optional: true },
},
},
{
tag: 'html-ins',
name: 'HtmlIns',
properties: {
cite: { type: 'string', optional: true },
dateTime: { type: 'string', optional: true },
},
},
{
tag: 'html-q',
name: 'HtmlQ',
properties: {
cite: { type: 'string', optional: true },
},
},
{
tag: 'html-time',
name: 'HtmlTime',
properties: {
dateTime: { type: 'string', optional: true },
},
},
// Ruby annotations
{ tag: 'html-ruby', name: 'HtmlRuby', properties: {} },
{ tag: 'html-rt', name: 'HtmlRt', properties: {} },
{ tag: 'html-rp', name: 'HtmlRp', properties: {} },
// Description lists
{ tag: 'html-dl', name: 'HtmlDl', properties: {} },
{ tag: 'html-dt', name: 'HtmlDt', properties: {} },
{ tag: 'html-dd', name: 'HtmlDd', properties: {} },
// Structural/semantic
{ tag: 'html-figure', name: 'HtmlFigure', properties: {} },
{ tag: 'html-figcaption', name: 'HtmlFigcaption', properties: {} },
{
tag: 'html-details',
name: 'HtmlDetails',
properties: {
open: { type: 'boolean', optional: true },
},
},
{ tag: 'html-summary', name: 'HtmlSummary', properties: {} },
{ tag: 'html-address', name: 'HtmlAddress', properties: {} },
{
tag: 'html-dialog',
name: 'HtmlDialog',
properties: {
open: { type: 'boolean', optional: true },
},
},
{ tag: 'html-hgroup', name: 'HtmlHgroup', properties: {} },
{ tag: 'html-search', name: 'HtmlSearch', properties: {} },
// Table additions
{ tag: 'html-caption', name: 'HtmlCaption', properties: {} },
{
tag: 'html-colgroup',
name: 'HtmlColgroup',
properties: {
span: { type: 'number', optional: true },
},
},
{
tag: 'html-col',
name: 'HtmlCol',
properties: {
span: { type: 'number', optional: true },
},
},
// Form additions
{
tag: 'html-fieldset',
name: 'HtmlFieldset',
properties: {
disabled: { type: 'boolean', optional: true },
name: { type: 'string', optional: true },
},
},
{ tag: 'html-legend', name: 'HtmlLegend', properties: {} },
{
tag: 'html-output',
name: 'HtmlOutput',
properties: {
name: { type: 'string', optional: true },
htmlFor: { type: 'string', optional: true },
},
},
{
tag: 'html-progress',
name: 'HtmlProgress',
properties: {
value: { type: 'number', optional: true },
max: { type: 'number', optional: true },
},
},
{
tag: 'html-meter',
name: 'HtmlMeter',
properties: {
value: { type: 'number', optional: true },
min: { type: 'number', optional: true },
max: { type: 'number', optional: true },
low: { type: 'number', optional: true },
high: { type: 'number', optional: true },
optimum: { type: 'number', optional: true },
},
},
{
tag: 'html-optgroup',
name: 'HtmlOptgroup',
properties: {
label: { type: 'string', optional: true },
disabled: { type: 'boolean', optional: true },
},
},
{ tag: 'html-datalist', name: 'HtmlDatalist', properties: {} },
// Media additions
{ tag: 'html-picture', name: 'HtmlPicture', properties: {} },
{
tag: 'html-track',
name: 'HtmlTrack',
properties: {
src: { type: 'string', optional: true },
kind: { type: 'string', optional: true },
srclang: { type: 'string', optional: true },
label: { type: 'string', optional: true },
default: { type: 'boolean', optional: true },
},
},
// Miscellaneous
{ tag: 'html-wbr', name: 'HtmlWbr', properties: {} },
{ tag: 'html-menu', name: 'HtmlMenu', properties: {} },
// SVG container/structural
{
tag: 'html-svg',
name: 'HtmlSvg',
properties: {
...SVG_PRESENTATION_PROPERTIES,
viewBox: { type: 'string', optional: true },
xmlns: { type: 'string', optional: true },
width: { type: 'string', optional: true },
height: { type: 'string', optional: true },
preserveAspectRatio: { type: 'string', optional: true },
},
},
{
tag: 'html-g',
name: 'HtmlG',
properties: {
...SVG_PRESENTATION_PROPERTIES,
},
},
{ tag: 'html-defs', name: 'HtmlDefs', properties: {} },
{
tag: 'html-symbol',
name: 'HtmlSymbol',
properties: {
viewBox: { type: 'string', optional: true },
},
},
{
tag: 'html-use',
name: 'HtmlUse',
properties: {
href: { type: 'string', optional: true },
x: { type: 'string', optional: true },
y: { type: 'string', optional: true },
width: { type: 'string', optional: true },
height: { type: 'string', optional: true },
},
},
{
tag: 'html-clippath',
name: 'HtmlClipPath',
htmlTag: 'clipPath',
properties: {
clipPathUnits: { type: 'string', optional: true },
},
},
{
tag: 'html-mask',
name: 'HtmlMask',
properties: {
maskUnits: { type: 'string', optional: true },
},
},
// SVG shapes
{
tag: 'html-circle',
name: 'HtmlCircle',
properties: {
...SVG_PRESENTATION_PROPERTIES,
cx: { type: 'string', optional: true },
cy: { type: 'string', optional: true },
r: { type: 'string', optional: true },
},
},
{
tag: 'html-ellipse',
name: 'HtmlEllipse',
properties: {
...SVG_PRESENTATION_PROPERTIES,
cx: { type: 'string', optional: true },
cy: { type: 'string', optional: true },
rx: { type: 'string', optional: true },
ry: { type: 'string', optional: true },
},
},
{
tag: 'html-rect',
name: 'HtmlRect',
properties: {
...SVG_PRESENTATION_PROPERTIES,
x: { type: 'string', optional: true },
y: { type: 'string', optional: true },
width: { type: 'string', optional: true },
height: { type: 'string', optional: true },
rx: { type: 'string', optional: true },
ry: { type: 'string', optional: true },
},
},
{
tag: 'html-line',
name: 'HtmlLine',
properties: {
...SVG_PRESENTATION_PROPERTIES,
x1: { type: 'string', optional: true },
y1: { type: 'string', optional: true },
x2: { type: 'string', optional: true },
y2: { type: 'string', optional: true },
},
},
{
tag: 'html-path',
name: 'HtmlPath',
properties: {
...SVG_PRESENTATION_PROPERTIES,
d: { type: 'string', optional: true },
},
},
{
tag: 'html-polygon',
name: 'HtmlPolygon',
properties: {
...SVG_PRESENTATION_PROPERTIES,
points: { type: 'string', optional: true },
},
},
{
tag: 'html-polyline',
name: 'HtmlPolyline',
properties: {
...SVG_PRESENTATION_PROPERTIES,
points: { type: 'string', optional: true },
},
},
// SVG text
{
tag: 'html-text',
name: 'HtmlText',
properties: {
...SVG_PRESENTATION_PROPERTIES,
x: { type: 'string', optional: true },
y: { type: 'string', optional: true },
dx: { type: 'string', optional: true },
dy: { type: 'string', optional: true },
textAnchor: { type: 'string', optional: true },
dominantBaseline: { type: 'string', optional: true },
},
},
{
tag: 'html-tspan',
name: 'HtmlTspan',
properties: {
...SVG_PRESENTATION_PROPERTIES,
x: { type: 'string', optional: true },
y: { type: 'string', optional: true },
dx: { type: 'string', optional: true },
dy: { type: 'string', optional: true },
},
},
// SVG gradients/patterns
{
tag: 'html-lineargradient',
name: 'HtmlLinearGradient',
htmlTag: 'linearGradient',
properties: {
x1: { type: 'string', optional: true },
y1: { type: 'string', optional: true },
x2: { type: 'string', optional: true },
y2: { type: 'string', optional: true },
gradientUnits: { type: 'string', optional: true },
gradientTransform: { type: 'string', optional: true },
},
},
{
tag: 'html-radialgradient',
name: 'HtmlRadialGradient',
htmlTag: 'radialGradient',
properties: {
cx: { type: 'string', optional: true },
cy: { type: 'string', optional: true },
r: { type: 'string', optional: true },
fx: { type: 'string', optional: true },
fy: { type: 'string', optional: true },
gradientUnits: { type: 'string', optional: true },
gradientTransform: { type: 'string', optional: true },
},
},
{
tag: 'html-stop',
name: 'HtmlStop',
properties: {
offset: { type: 'string', optional: true },
stopColor: { type: 'string', optional: true },
stopOpacity: { type: 'string', optional: true },
},
},
{
tag: 'html-pattern',
name: 'HtmlPattern',
properties: {
x: { type: 'string', optional: true },
y: { type: 'string', optional: true },
width: { type: 'string', optional: true },
height: { type: 'string', optional: true },
patternUnits: { type: 'string', optional: true },
patternTransform: { type: 'string', optional: true },
},
},
// SVG other
{
tag: 'html-image',
name: 'HtmlImage',
properties: {
href: { type: 'string', optional: true },
x: { type: 'string', optional: true },
y: { type: 'string', optional: true },
width: { type: 'string', optional: true },
height: { type: 'string', optional: true },
preserveAspectRatio: { type: 'string', optional: true },
},
},
{
tag: 'html-foreignobject',
name: 'HtmlForeignObject',
htmlTag: 'foreignObject',
properties: {
x: { type: 'string', optional: true },
y: { type: 'string', optional: true },
width: { type: 'string', optional: true },
height: { type: 'string', optional: true },
},
},
{
tag: 'html-marker',
name: 'HtmlMarker',
properties: {
markerWidth: { type: 'string', optional: true },
markerHeight: { type: 'string', optional: true },
refX: { type: 'string', optional: true },
refY: { type: 'string', optional: true },
orient: { type: 'string', optional: true },
markerUnits: { type: 'string', optional: true },
},
},
{ tag: 'html-title', name: 'HtmlTitle', properties: {} },
];
@@ -4,24 +4,29 @@ const UTILITY_TAG_MAPPINGS: Record<string, string> = {
'remote-style': 'RemoteStyle',
};
const getHostTagName = (element: (typeof ALLOWED_HTML_ELEMENTS)[number]) =>
element.htmlTag ??
(element.tag.startsWith('html-') ? element.tag.slice(5) : element.tag);
export const HTML_TAG_TO_REMOTE_COMPONENT: Record<string, string> = {
...Object.fromEntries(
ALLOWED_HTML_ELEMENTS.map((element) => [
element.tag.startsWith('html-') ? element.tag.slice(5) : element.tag,
getHostTagName(element),
element.name,
]),
),
...UTILITY_TAG_MAPPINGS,
};
// Maps standard HTML tag names to their custom element equivalents
// used by the remote DOM polyfill (e.g. "div" → "html-div").
// Maps standard HTML/SVG tag names to their custom element equivalents
// used by the remote DOM polyfill (e.g. "div" → "html-div",
// "clipPath" → "html-clippath").
// Consumed by the jsx-runtime wrapper so React creates the correct
// custom elements instead of standard HTML tags.
// custom elements instead of standard HTML/SVG tags.
export const HTML_TAG_TO_CUSTOM_ELEMENT_TAG: Record<string, string> = {
...Object.fromEntries(
ALLOWED_HTML_ELEMENTS.map((element) => [
element.tag.startsWith('html-') ? element.tag.slice(5) : element.tag,
getHostTagName(element),
element.tag,
]),
),
@@ -0,0 +1,22 @@
import { type PropertySchema } from './PropertySchema';
export const SVG_PRESENTATION_PROPERTIES: Record<string, PropertySchema> = {
fill: { type: 'string', optional: true },
fillOpacity: { type: 'string', optional: true },
fillRule: { type: 'string', optional: true },
stroke: { type: 'string', optional: true },
strokeWidth: { type: 'string', optional: true },
strokeOpacity: { type: 'string', optional: true },
strokeLinecap: { type: 'string', optional: true },
strokeLinejoin: { type: 'string', optional: true },
strokeDasharray: { type: 'string', optional: true },
strokeDashoffset: { type: 'string', optional: true },
strokeMiterlimit: { type: 'string', optional: true },
opacity: { type: 'string', optional: true },
transform: { type: 'string', optional: true },
clipPath: { type: 'string', optional: true },
clipRule: { type: 'string', optional: true },
mask: { type: 'string', optional: true },
filter: { type: 'string', optional: true },
pointerEvents: { type: 'string', optional: true },
};
@@ -92,6 +92,162 @@ export const componentRegistry: Map<string, ComponentRegistryValue> = new Map([
'html-source',
createRemoteComponentRenderer(createHtmlHostWrapper('source')),
],
['html-b', createRemoteComponentRenderer(createHtmlHostWrapper('b'))],
['html-i', createRemoteComponentRenderer(createHtmlHostWrapper('i'))],
['html-u', createRemoteComponentRenderer(createHtmlHostWrapper('u'))],
['html-s', createRemoteComponentRenderer(createHtmlHostWrapper('s'))],
['html-mark', createRemoteComponentRenderer(createHtmlHostWrapper('mark'))],
['html-sub', createRemoteComponentRenderer(createHtmlHostWrapper('sub'))],
['html-sup', createRemoteComponentRenderer(createHtmlHostWrapper('sup'))],
['html-abbr', createRemoteComponentRenderer(createHtmlHostWrapper('abbr'))],
['html-cite', createRemoteComponentRenderer(createHtmlHostWrapper('cite'))],
['html-kbd', createRemoteComponentRenderer(createHtmlHostWrapper('kbd'))],
['html-samp', createRemoteComponentRenderer(createHtmlHostWrapper('samp'))],
['html-var', createRemoteComponentRenderer(createHtmlHostWrapper('var'))],
['html-dfn', createRemoteComponentRenderer(createHtmlHostWrapper('dfn'))],
['html-bdi', createRemoteComponentRenderer(createHtmlHostWrapper('bdi'))],
['html-bdo', createRemoteComponentRenderer(createHtmlHostWrapper('bdo'))],
['html-data', createRemoteComponentRenderer(createHtmlHostWrapper('data'))],
['html-del', createRemoteComponentRenderer(createHtmlHostWrapper('del'))],
['html-ins', createRemoteComponentRenderer(createHtmlHostWrapper('ins'))],
['html-q', createRemoteComponentRenderer(createHtmlHostWrapper('q'))],
['html-time', createRemoteComponentRenderer(createHtmlHostWrapper('time'))],
['html-ruby', createRemoteComponentRenderer(createHtmlHostWrapper('ruby'))],
['html-rt', createRemoteComponentRenderer(createHtmlHostWrapper('rt'))],
['html-rp', createRemoteComponentRenderer(createHtmlHostWrapper('rp'))],
['html-dl', createRemoteComponentRenderer(createHtmlHostWrapper('dl'))],
['html-dt', createRemoteComponentRenderer(createHtmlHostWrapper('dt'))],
['html-dd', createRemoteComponentRenderer(createHtmlHostWrapper('dd'))],
[
'html-figure',
createRemoteComponentRenderer(createHtmlHostWrapper('figure')),
],
[
'html-figcaption',
createRemoteComponentRenderer(createHtmlHostWrapper('figcaption')),
],
[
'html-details',
createRemoteComponentRenderer(createHtmlHostWrapper('details')),
],
[
'html-summary',
createRemoteComponentRenderer(createHtmlHostWrapper('summary')),
],
[
'html-address',
createRemoteComponentRenderer(createHtmlHostWrapper('address')),
],
[
'html-dialog',
createRemoteComponentRenderer(createHtmlHostWrapper('dialog')),
],
[
'html-hgroup',
createRemoteComponentRenderer(createHtmlHostWrapper('hgroup')),
],
[
'html-search',
createRemoteComponentRenderer(createHtmlHostWrapper('search')),
],
[
'html-caption',
createRemoteComponentRenderer(createHtmlHostWrapper('caption')),
],
[
'html-colgroup',
createRemoteComponentRenderer(createHtmlHostWrapper('colgroup')),
],
['html-col', createRemoteComponentRenderer(createHtmlHostWrapper('col'))],
[
'html-fieldset',
createRemoteComponentRenderer(createHtmlHostWrapper('fieldset')),
],
[
'html-legend',
createRemoteComponentRenderer(createHtmlHostWrapper('legend')),
],
[
'html-output',
createRemoteComponentRenderer(createHtmlHostWrapper('output')),
],
[
'html-progress',
createRemoteComponentRenderer(createHtmlHostWrapper('progress')),
],
['html-meter', createRemoteComponentRenderer(createHtmlHostWrapper('meter'))],
[
'html-optgroup',
createRemoteComponentRenderer(createHtmlHostWrapper('optgroup')),
],
[
'html-datalist',
createRemoteComponentRenderer(createHtmlHostWrapper('datalist')),
],
[
'html-picture',
createRemoteComponentRenderer(createHtmlHostWrapper('picture')),
],
['html-track', createRemoteComponentRenderer(createHtmlHostWrapper('track'))],
['html-wbr', createRemoteComponentRenderer(createHtmlHostWrapper('wbr'))],
['html-menu', createRemoteComponentRenderer(createHtmlHostWrapper('menu'))],
['html-svg', createRemoteComponentRenderer(createHtmlHostWrapper('svg'))],
['html-g', createRemoteComponentRenderer(createHtmlHostWrapper('g'))],
['html-defs', createRemoteComponentRenderer(createHtmlHostWrapper('defs'))],
[
'html-symbol',
createRemoteComponentRenderer(createHtmlHostWrapper('symbol')),
],
['html-use', createRemoteComponentRenderer(createHtmlHostWrapper('use'))],
[
'html-clippath',
createRemoteComponentRenderer(createHtmlHostWrapper('clipPath')),
],
['html-mask', createRemoteComponentRenderer(createHtmlHostWrapper('mask'))],
[
'html-circle',
createRemoteComponentRenderer(createHtmlHostWrapper('circle')),
],
[
'html-ellipse',
createRemoteComponentRenderer(createHtmlHostWrapper('ellipse')),
],
['html-rect', createRemoteComponentRenderer(createHtmlHostWrapper('rect'))],
['html-line', createRemoteComponentRenderer(createHtmlHostWrapper('line'))],
['html-path', createRemoteComponentRenderer(createHtmlHostWrapper('path'))],
[
'html-polygon',
createRemoteComponentRenderer(createHtmlHostWrapper('polygon')),
],
[
'html-polyline',
createRemoteComponentRenderer(createHtmlHostWrapper('polyline')),
],
['html-text', createRemoteComponentRenderer(createHtmlHostWrapper('text'))],
['html-tspan', createRemoteComponentRenderer(createHtmlHostWrapper('tspan'))],
[
'html-lineargradient',
createRemoteComponentRenderer(createHtmlHostWrapper('linearGradient')),
],
[
'html-radialgradient',
createRemoteComponentRenderer(createHtmlHostWrapper('radialGradient')),
],
['html-stop', createRemoteComponentRenderer(createHtmlHostWrapper('stop'))],
[
'html-pattern',
createRemoteComponentRenderer(createHtmlHostWrapper('pattern')),
],
['html-image', createRemoteComponentRenderer(createHtmlHostWrapper('image'))],
[
'html-foreignobject',
createRemoteComponentRenderer(createHtmlHostWrapper('foreignObject')),
],
[
'html-marker',
createRemoteComponentRenderer(createHtmlHostWrapper('marker')),
],
['html-title', createRemoteComponentRenderer(createHtmlHostWrapper('title'))],
['remote-style', createRemoteComponentRenderer(RemoteStyleRenderer)],
['remote-fragment', RemoteFragmentRenderer],
]);
@@ -13,14 +13,14 @@ const EVENT_NAME_MAP: Record<string, string> = Object.fromEntries(
);
const VOID_ELEMENTS = new Set([
'input',
'br',
'hr',
'img',
'area',
'base',
'br',
'col',
'embed',
'hr',
'img',
'input',
'link',
'meta',
'source',
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Aksies gebruikers kan uitvoer op hierdie voorwerp"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Aktiveer"
@@ -3189,7 +3189,6 @@ msgstr "Knipbord vereis 'n veilige verbinding (HTTPS). Gebruik asseblief hierdie
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Maak toe"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Sluit banier"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Maak sypaneel toe"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Meer"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Maak Outlook oop"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Maak sypaneel oop"
@@ -12347,6 +12343,11 @@ msgstr "Voer {formattedName} uit"
msgid "Running function"
msgstr "Funksie word uitgevoer"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "Jou ondernemingsfunksies sal gedeaktiveer word"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Jou ondernemingsfunksies sal aktief bly tot {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Jou ondernemingssleutelformaat is verouderd. Aktiveer asseblief 'n nuwe sleutel om ondernemingsfunksies te behou."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "الإجراءات التي يمكن للمستخدمين تنفيذها
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "تفعيل"
@@ -3189,7 +3189,6 @@ msgstr "تتطلب الحافظة اتصالاً آمناً (HTTPS). يُرجى
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "إغلاق"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "إغلاق اللافتة"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "إغلاق اللوحة الجانبية"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "المزيد"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "فتح Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "فتح اللوحة الجانبية"
@@ -12347,6 +12343,11 @@ msgstr "جارٍ تشغيل {formattedName}"
msgid "Running function"
msgstr "الدالة قيد التشغيل"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16454,10 +16455,10 @@ msgstr "سيتم تعطيل ميزات Enterprise لديك"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "ستظل ميزات Enterprise لديك نشطة حتى {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "تنسيق مفتاح Enterprise الخاص بك لم يعد مدعومًا. يُرجى تفعيل مفتاح جديد للإبقاء على ميزات Enterprise."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Accions que poden realitzar els usuaris en aquest objecte"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Activa"
@@ -3189,7 +3189,6 @@ msgstr "El porta-retalls requereix una connexió segura (HTTPS). Accedeix a aque
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Tanca"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Tanca el bàner"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Tanca el panell lateral"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Més"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Obrir en Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Obre el panell lateral"
@@ -12347,6 +12343,11 @@ msgstr "Executant {formattedName}"
msgid "Running function"
msgstr "Funció en execució"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "Les vostres funcionalitats Enterprise es desactivaran"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Les vostres funcionalitats Enterprise romandran actives fins al {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "El format de la vostra clau Enterprise és obsolet. Activeu una clau nova per mantenir les funcionalitats Enterprise."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Akce, které uživatelé mohou provádět na tomto objektu"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Aktivovat"
@@ -3189,7 +3189,6 @@ msgstr "Schránka vyžaduje zabezpečené připojení (HTTPS). Pro povolení kop
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Zavřít"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Zavřít banner"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Zavřít postranní panel"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Více"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Otevřít Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Otevřít postranní panel"
@@ -12347,6 +12343,11 @@ msgstr "Spouští se {formattedName}"
msgid "Running function"
msgstr "Spouští se funkce"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "Vaše funkce Enterprise budou deaktivovány"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Vaše funkce Enterprise zůstanou aktivní do {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Formát vašeho klíče Enterprise je zastaralý. Aktivujte prosím nový klíč, abyste zachovali funkce Enterprise."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Handlinger brugere kan udføre på denne genstand"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Aktivér"
@@ -3189,7 +3189,6 @@ msgstr "Udklipsholderen kræver en sikker forbindelse (HTTPS). Tilgå venligst d
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Luk"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Luk banner"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Luk sidepanelet"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Mere"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Åbn Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Åbn sidepanelet"
@@ -12347,6 +12343,11 @@ msgstr "Kører {formattedName}"
msgid "Running function"
msgstr "Kører funktion"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16458,10 +16459,10 @@ msgstr "Dine Enterprise-funktioner vil blive deaktiveret"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Dine Enterprise-funktioner forbliver aktive indtil {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Formatet på din Enterprise-nøgle er udfaset. Aktivér en ny nøgle for at beholde Enterprise-funktionerne."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Aktionen, die Benutzer auf diesem Objekt durchführen können"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Aktivieren"
@@ -3189,7 +3189,6 @@ msgstr "Die Zwischenablage erfordert eine sichere Verbindung (HTTPS). Bitte grei
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Schließen"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Banner schließen"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Seitenpanel schließen"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Mehr"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Outlook öffnen"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Seitenpanel öffnen"
@@ -12347,6 +12343,11 @@ msgstr "{formattedName} wird ausgeführt"
msgid "Running function"
msgstr "Funktion wird ausgeführt"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "Ihre Enterprise-Funktionen werden deaktiviert"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Ihre Enterprise-Funktionen bleiben bis {cancelAtDate} aktiv."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Das Format Ihres Enterprise-Schlüssels ist veraltet. Bitte aktivieren Sie einen neuen Schlüssel, um die Enterprise-Funktionen beizubehalten."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Ενέργειες χρηστών που μπορούν να εκτελ
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Ενεργοποίηση"
@@ -3189,7 +3189,6 @@ msgstr "Το Πρόχειρο απαιτεί ασφαλή σύνδεση (HTTPS)
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Κλείσιμο"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Κλείσιμο banner"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Κλείσιμο πλευρικού πάνελ"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Περισσότερα"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Άνοιγμα με Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Άνοιγμα πλευρικού πάνελ"
@@ -12347,6 +12343,11 @@ msgstr "Εκτελείται {formattedName}"
msgid "Running function"
msgstr "Εκτέλεση λειτουργίας"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16460,10 +16461,10 @@ msgstr "Οι δυνατότητες Enterprise θα απενεργοποιηθο
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Οι δυνατότητες Enterprise θα παραμείνουν ενεργές έως {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Η μορφή του κλειδιού Enterprise δεν υποστηρίζεται πλέον. Ενεργοποιήστε ένα νέο κλειδί για να διατηρήσετε τις δυνατότητες Enterprise."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -785,7 +785,7 @@ msgstr "Actions users can perform on this object"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Activate"
@@ -3184,7 +3184,6 @@ msgstr "Clipboard requires a secure connection (HTTPS). Please access this app o
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Close"
@@ -3195,7 +3194,6 @@ msgid "Close banner"
msgstr "Close banner"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Close side panel"
@@ -9276,7 +9274,6 @@ msgstr "months"
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "More"
@@ -10719,7 +10716,6 @@ msgid "Open Outlook"
msgstr "Open Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Open side panel"
@@ -12342,6 +12338,11 @@ msgstr "Running {formattedName}"
msgid "Running function"
msgstr "Running function"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr "Running workflows on all records is not yet supported. Please select records manually."
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16453,10 +16454,10 @@ msgstr "Your enterprise features will be disabled"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Your enterprise features will remain active until {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Acciones que los usuarios pueden realizar en este objeto"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Activar"
@@ -3189,7 +3189,6 @@ msgstr "El portapapeles requiere una conexión segura (HTTPS). Accede a esta apl
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Cerrar"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Cerrar banner"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Cerrar panel lateral"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Más"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Abrir Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Abrir panel lateral"
@@ -12347,6 +12343,11 @@ msgstr "Ejecutando {formattedName}"
msgid "Running function"
msgstr "Ejecutando función"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16458,10 +16459,10 @@ msgstr "Tus funciones Enterprise se desactivarán"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Tus funciones Enterprise seguirán activas hasta {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "El formato de tu clave Enterprise está obsoleto. Activa una nueva clave para mantener las funciones Enterprise."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Toiminnot, joita käyttäjät voivat suorittaa tällä kohteella"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Aktivoi"
@@ -3189,7 +3189,6 @@ msgstr "Leikepöytä edellyttää suojattua yhteyttä (HTTPS). Avaa tämä sovel
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Sulje"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Sulje banneri"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Sulje sivupaneeli"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Lisää"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Avaa Outlookissa"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Avaa sivupaneeli"
@@ -12347,6 +12343,11 @@ msgstr "Suoritetaan {formattedName}"
msgid "Running function"
msgstr "Suoritetaan funktiota"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "Enterprise-ominaisuudet poistetaan käytöstä"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Enterprise-ominaisuudet pysyvät aktiivisina {cancelAtDate} asti."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Enterprise-avaimesi muoto on vanhentunut. Aktivoi uusi avain säilyttääksesi Enterprise-ominaisuudet."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Actions que les utilisateurs peuvent effectuer sur cet objet"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Activer"
@@ -3189,7 +3189,6 @@ msgstr "Le presse-papiers nécessite une connexion sécurisée (HTTPS). Veuillez
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Fermer"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Fermer la bannière"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Fermer le panneau latéral"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Plus"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Ouvrir Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Ouvrir le panneau latéral"
@@ -12347,6 +12343,11 @@ msgstr "Exécution de {formattedName}"
msgid "Running function"
msgstr "Exécution de la fonction"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16458,10 +16459,10 @@ msgstr "Vos fonctionnalités Enterprise seront désactivées"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Vos fonctionnalités Enterprise resteront actives jusqu'au {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Le format de votre clé Enterprise est obsolète. Veuillez activer une nouvelle clé pour conserver les fonctionnalités Enterprise."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "פעולות משתמשים יכולים לבצע על אובייקט ז
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "הפעל"
@@ -3189,7 +3189,6 @@ msgstr "לוח הגזירים דורש חיבור מאובטח (HTTPS). יש ל
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "סגור"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "סגור באנר"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "סגור את חלונית הצד"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "עוד"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "פתח ב-Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "פתח את חלונית הצד"
@@ -12347,6 +12343,11 @@ msgstr "מריץ את {formattedName}"
msgid "Running function"
msgstr "מריץ פונקציה"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "תכונות ה-Enterprise שלך יושבתו"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "תכונות ה-Enterprise שלך יישארו פעילות עד {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "תבנית מפתח ה-Enterprise שלך הוצאה משימוש. אנא הפעל מפתח חדש כדי לשמור על תכונות ה-Enterprise."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Műveletek, amelyeket a felhasználók ezen az objektumon végrehajthatn
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Aktiválás"
@@ -3189,7 +3189,6 @@ msgstr ""
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Bezár"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Banner bezárása"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Oldalsó panel bezárása"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Több"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Outlook megnyitása"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Oldalsó panel megnyitása"
@@ -12347,6 +12343,11 @@ msgstr "{formattedName} futtatása"
msgid "Running function"
msgstr "Függvény fut"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "Az Enterprise funkciók le lesznek tiltva"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Az Enterprise funkciók {cancelAtDate} időpontig maradnak aktívak."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Az Enterprise kulcs formátuma elavult. Az Enterprise funkciók megtartásához aktiváljon egy új kulcsot."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Azioni che gli utenti possono eseguire su questo oggetto"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Attiva"
@@ -3189,7 +3189,6 @@ msgstr "Gli appunti richiedono una connessione sicura (HTTPS). Accedi a questa a
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Chiudi"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Chiudi banner"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Chiudi il pannello laterale"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Altro"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Aprire Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Apri il pannello laterale"
@@ -12347,6 +12343,11 @@ msgstr "Esecuzione di {formattedName}"
msgid "Running function"
msgstr "Funzione in esecuzione"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16458,10 +16459,10 @@ msgstr "Le tue funzionalità Enterprise verranno disabilitate"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Le tue funzionalità Enterprise rimarranno attive fino al {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Il formato della tua chiave Enterprise è deprecato. Attiva una nuova chiave per mantenere le funzionalità Enterprise."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "このオブジェクトにユーザーが行えるアクション"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "有効化"
@@ -3189,7 +3189,6 @@ msgstr "クリップボードの使用にはセキュアな接続 (HTTPS) が必
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "閉じる"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "バナーを閉じる"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "サイドパネルを閉じる"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "もっと"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Outlookで開く"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "サイドパネルを開く"
@@ -12347,6 +12343,11 @@ msgstr "{formattedName} を実行中"
msgid "Running function"
msgstr "関数を実行中"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "Enterprise 機能は無効になります"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Enterprise 機能は {cancelAtDate} まで有効のままです。"
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Enterprise キーの形式は非推奨です。Enterprise 機能を維持するには、新しいキーを有効化してください。"
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "사용자가 이 객체에서 수행할 수 있는 작업"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "활성화"
@@ -3189,7 +3189,6 @@ msgstr "클립보드는 보안 연결(HTTPS)이 필요합니다. 복사 기능
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "닫기"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "배너 닫기"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "사이드 패널 닫기"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "더보기"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Outlook 열기"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "사이드 패널 열기"
@@ -12347,6 +12343,11 @@ msgstr "{formattedName} 실행 중"
msgid "Running function"
msgstr "함수 실행 중"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "엔터프라이즈 기능이 비활성화됩니다"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "엔터프라이즈 기능은 {cancelAtDate}까지 계속 활성화됩니다."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "엔터프라이즈 키 형식이 더 이상 사용되지 않습니다. 엔터프라이즈 기능을 유지하려면 새 키를 활성화하세요."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Acties die gebruikers op dit object kunnen uitvoeren"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Activeren"
@@ -3189,7 +3189,6 @@ msgstr ""
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Sluiten"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Banner sluiten"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Zijpaneel sluiten"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Meer"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Open Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Zijpaneel openen"
@@ -12347,6 +12343,11 @@ msgstr "Voert {formattedName} uit"
msgid "Running function"
msgstr "Functie wordt uitgevoerd"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16458,10 +16459,10 @@ msgstr "Uw Enterprise-functies worden uitgeschakeld"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Uw Enterprise-functies blijven actief tot {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "De indeling van uw Enterprise-sleutel is verouderd. Activeer een nieuwe sleutel om Enterprise-functies te behouden."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Handlinger brukere kan utføre på dette objektet"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Aktiver"
@@ -3189,7 +3189,6 @@ msgstr "Utklippstavlen krever en sikker tilkobling (HTTPS). Åpne denne appen ov
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Lukk"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Lukk banner"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Lukk sidepanelet"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Mer"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Åpne Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Åpne sidepanelet"
@@ -12347,6 +12343,11 @@ msgstr "Kjører {formattedName}"
msgid "Running function"
msgstr "Kjører funksjon"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "Enterprise-funksjonene dine vil bli deaktivert"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Enterprise-funksjonene dine forblir aktive til {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Formatet på Enterprise-nøkkelen din er foreldet. Aktiver en ny nøkkel for å beholde Enterprise-funksjonene."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Działania, które użytkownicy mogą wykonywać na tym obiekcie"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Aktywuj"
@@ -3189,7 +3189,6 @@ msgstr "Schowek wymaga bezpiecznego połączenia (HTTPS). Otwórz tę aplikację
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Zamknij"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Zamknij baner"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Zamknij panel boczny"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Więcej"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Otwórz Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Otwórz panel boczny"
@@ -12347,6 +12343,11 @@ msgstr "Uruchamianie {formattedName}"
msgid "Running function"
msgstr "Uruchamianie funkcji"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "Twoje funkcje Enterprise zostaną wyłączone"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Twoje funkcje Enterprise pozostaną aktywne do {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Format Twojego klucza Enterprise jest przestarzały. Aktywuj nowy klucz, aby zachować funkcje Enterprise."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
@@ -785,7 +785,7 @@ msgstr ""
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr ""
@@ -3184,7 +3184,6 @@ msgstr ""
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr ""
@@ -3195,7 +3194,6 @@ msgid "Close banner"
msgstr ""
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr ""
@@ -9276,7 +9274,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr ""
@@ -10719,7 +10716,6 @@ msgid "Open Outlook"
msgstr ""
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr ""
@@ -12342,6 +12338,11 @@ msgstr ""
msgid "Running function"
msgstr ""
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16449,9 +16450,9 @@ msgstr ""
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr ""
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Ações que os usuários podem realizar neste objeto"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Ativar"
@@ -3189,7 +3189,6 @@ msgstr "A área de transferência requer uma conexão segura (HTTPS). Acesse est
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Fechar"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Fechar banner"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr ""
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Mais"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Abrir Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr ""
@@ -12347,6 +12343,11 @@ msgstr ""
msgid "Running function"
msgstr "Executando função"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "Seus recursos Enterprise serão desativados"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Seus recursos Enterprise permanecerão ativos até {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "O formato da sua chave Enterprise está obsoleto. Ative uma nova chave para manter os recursos Enterprise."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Ações que os usuários podem realizar neste objeto"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Ativar"
@@ -3189,7 +3189,6 @@ msgstr "A área de transferência requer uma conexão segura (HTTPS). Acesse est
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Fechar"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Fechar banner"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Fechar painel lateral"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Mais"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Abrir Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Abrir painel lateral"
@@ -12347,6 +12343,11 @@ msgstr "Executando {formattedName}"
msgid "Running function"
msgstr "A executar função"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "Os seus recursos Enterprise serão desativados"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Os seus recursos Enterprise permanecerão ativos até {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "O formato da sua chave Enterprise está obsoleto. Ative uma nova chave para manter os recursos Enterprise."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Acțiuni pe care utilizatorii le pot efectua asupra acestui obiect"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Activează"
@@ -3189,7 +3189,6 @@ msgstr "Clipboardul necesită o conexiune securizată (HTTPS). Accesați aceast
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Închide"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Închide bannerul"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Închide panoul lateral"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Mai mult"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Deschide Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Deschide panoul lateral"
@@ -12347,6 +12343,11 @@ msgstr "Se rulează {formattedName}"
msgid "Running function"
msgstr "Se rulează funcția"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "Funcționalitățile dvs. Enterprise vor fi dezactivate"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Funcționalitățile dvs. Enterprise vor rămâne active până la {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Formatul cheii dvs. Enterprise este învechit. Activați o cheie nouă pentru a păstra funcționalitățile Enterprise."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
Binary file not shown.
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Акције које корисници могу спровести н
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Активирајте"
@@ -3189,7 +3189,6 @@ msgstr "Клипборд захтева безбедну везу (HTTPS). Пр
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Затвори"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Затвори банер"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Затвори бочни панел"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Још"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Отвори Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Отвори бочни панел"
@@ -12347,6 +12343,11 @@ msgstr "Покреће се {formattedName}"
msgid "Running function"
msgstr "Извршавање функције"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "Ваше Enterprise функције ће бити онемогућен
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Ваше Enterprise функције ће остати активне до {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Формат вашег Enterprise кључа је застарео. Активирајте нови кључ да бисте задржали Enterprise функције."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Åtgärder användare kan utföra på det här objektet"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Aktivera"
@@ -3189,7 +3189,6 @@ msgstr "Urklipp kräver en säker anslutning (HTTPS). Öppna den här appen via
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Stäng"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Stäng banner"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Stäng sidopanelen"
@@ -9283,7 +9281,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Mer"
@@ -10726,7 +10723,6 @@ msgid "Open Outlook"
msgstr "Öppna Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Öppna sidopanelen"
@@ -12349,6 +12345,11 @@ msgstr "Kör {formattedName}"
msgid "Running function"
msgstr "Funktionen körs"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16464,10 +16465,10 @@ msgstr "Dina Enterprise-funktioner kommer att inaktiveras"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Dina Enterprise-funktioner förblir aktiva fram till {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Formatet för din Enterprise-nyckel är föråldrat. Aktivera en ny nyckel för att behålla Enterprise-funktionerna."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Kullanıcıların bu nesne üzerinde gerçekleştirebileceği eylemler"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Aktif Et"
@@ -3189,7 +3189,6 @@ msgstr "Pano güvenli bir bağlantı (HTTPS) gerektirir. Kopyalamayı etkinleşt
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Kapat"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Afişi kapat"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Yan paneli kapat"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Daha Fazla"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Outlook'u Aç"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Yan paneli aç"
@@ -12347,6 +12343,11 @@ msgstr "{formattedName} çalıştırılıyor"
msgid "Running function"
msgstr "İşlev çalıştırılıyor"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "Kurumsal özellikleriniz devre dışı bırakılacak"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Kurumsal özellikleriniz {cancelAtDate} tarihine kadar etkin kalacaktır."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Kurumsal anahtar biçiminiz kullanımdan kaldırıldı. Kurumsal özellikleri korumak için lütfen yeni bir anahtar etkinleştirin."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Дії, які користувачі можуть виконувати
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Активувати"
@@ -3189,7 +3189,6 @@ msgstr "Буфер обміну вимагає захищеного з'єдна
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Закрити"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Закрити банер"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Закрити бічну панель"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Більше"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Відкрити Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Відкрити бічну панель"
@@ -12347,6 +12343,11 @@ msgstr "Виконання {formattedName}"
msgid "Running function"
msgstr "Виконується функція"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16458,10 +16459,10 @@ msgstr "Ваші функції Enterprise будуть вимкнені"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Ваші функції Enterprise залишатимуться активними до {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Формат вашого ключа Enterprise застарів. Активуйте новий ключ, щоб зберегти функції Enterprise."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "Các hành động người dùng có thể thực hiện trên đối t
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "Kích hoạt"
@@ -3189,7 +3189,6 @@ msgstr "Bộ nhớ tạm yêu cầu kết nối bảo mật (HTTPS). Vui lòng t
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "Đóng"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "Đóng biểu ngữ"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "Đóng ngăn bên"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "Thêm nữa"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "Mở Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "Mở ngăn bên"
@@ -12347,6 +12343,11 @@ msgstr "Đang chạy {formattedName}"
msgid "Running function"
msgstr "Đang chạy hàm"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "Các tính năng Enterprise của bạn sẽ bị vô hiệu hóa"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "Các tính năng Enterprise của bạn sẽ vẫn hoạt động đến {cancelAtDate}."
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "Định dạng khóa Enterprise của bạn không còn được hỗ trợ. Vui lòng kích hoạt một khóa mới để giữ các tính năng Enterprise."
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "用户可以在此对象上执行的操作"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "激活"
@@ -3189,7 +3189,6 @@ msgstr "剪贴板功能需要安全连接 (HTTPS)。请通过 HTTPS 访问此应
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "关闭"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "关闭横幅"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "关闭侧边栏"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "更多"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "打开Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "打开侧边栏"
@@ -12347,6 +12343,11 @@ msgstr "正在运行 {formattedName}"
msgid "Running function"
msgstr "正在运行函数"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "您的企业功能将被禁用"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "您的企业功能将保持启用至 {cancelAtDate}。"
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "您的企业密钥格式已弃用。请激活新的密钥以保持企业功能可用。"
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
+10 -9
View File
@@ -790,7 +790,7 @@ msgstr "用戶可以對此對象執行的操作"
#: src/modules/settings/data-model/objects/components/SettingsObjectInactiveMenuDropDown.tsx
#: src/modules/settings/data-model/object-details/components/SettingsObjectFieldDisabledActionDropdown.tsx
#: src/modules/settings/components/SettingsEnterpriseFeatureGateCard.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Activate"
msgstr "啟用"
@@ -3189,7 +3189,6 @@ msgstr "剪貼簿需要安全連線 (HTTPS)。請透過 HTTPS 存取此應用程
#. js-lingui-id: yz7wBu
#: src/modules/ui/feedback/snack-bar-manager/components/SnackBar.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close"
msgstr "關閉"
@@ -3200,7 +3199,6 @@ msgid "Close banner"
msgstr "關閉橫幅"
#. js-lingui-id: saip/v
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Close side panel"
msgstr "關閉側邊面板"
@@ -9281,7 +9279,6 @@ msgstr ""
#. js-lingui-id: 2FYpfJ
#: src/pages/settings/ai/SettingsAI.tsx
#: src/modules/ui/layout/tab-list/components/TabMoreButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "More"
msgstr "更多"
@@ -10724,7 +10721,6 @@ msgid "Open Outlook"
msgstr "打開Outlook"
#. js-lingui-id: bY2Xkv
#: src/modules/ui/layout/page-header/components/PageHeaderToggleSidePanelButton.tsx
#: src/modules/side-panel/components/SidePanelToggleButton.tsx
msgid "Open side panel"
msgstr "開啟側邊面板"
@@ -12347,6 +12343,11 @@ msgstr "正在執行 {formattedName}"
msgid "Running function"
msgstr "正在執行函式"
#. js-lingui-id: SoR81K
#: src/modules/command-menu-item/engine-command/hooks/useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInformation.ts
msgid "Running workflows on all records is not yet supported. Please select records manually."
msgstr ""
#. js-lingui-id: LTC198
#: src/modules/ai/components/CodeExecutionDisplay.tsx
msgid "Running..."
@@ -16456,10 +16457,10 @@ msgstr "您的企業功能將被停用"
msgid "Your enterprise features will remain active until {cancelAtDate}."
msgstr "您的企業功能將維持啟用至 {cancelAtDate}。"
#. js-lingui-id: 69Siss
#: src/modules/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey.tsx
msgid "Your enterprise key format is deprecated. Please activate a new key to keep enterprise features."
msgstr "您的企業授權金鑰格式已過時。請啟用新的金鑰以維持企業功能。"
#. js-lingui-id: 5TsUUL
#: src/modules/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey.tsx
msgid "Your enterprise key is no longer valid. Activate a new key to continue using enterprise features."
msgstr ""
#. js-lingui-id: NTpA4U
#: src/pages/settings/enterprise/SettingsEnterprise.tsx
@@ -11,13 +11,14 @@ import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { styled } from '@linaria/react';
import { useLingui } from '@lingui/react/macro';
import { useContext } from 'react';
import {
IconChevronDown,
IconSquareCheck,
IconSquareX,
} from 'twenty-ui/display';
import { MenuItemSelect } from 'twenty-ui/navigation';
import { themeCssVariables } from 'twenty-ui/theme-constants';
import { ThemeContext, themeCssVariables } from 'twenty-ui/theme-constants';
const DROPDOWN_ID = 'command-menu-edit-record-selection-dropdown';
@@ -55,6 +56,7 @@ export const CommandMenuItemEditRecordSelectionDropdown = ({
isRecordPage = false,
}: CommandMenuItemEditRecordSelectionDropdownProps) => {
const { t } = useLingui();
const { theme } = useContext(ThemeContext);
const { closeDropdown } = useCloseDropdown();
const mainContextStoreHasSelectedRecords = useAtomStateValue(
@@ -92,9 +94,17 @@ export const CommandMenuItemEditRecordSelectionDropdown = ({
disabled={isRecordPage}
data-click-outside-id={COMMAND_MENU_DROPDOWN_CLICK_OUTSIDE_ID}
>
<TriggerIcon size={16} />
<TriggerIcon
size={16}
color={theme.font.color.primary}
stroke={theme.icon.stroke.sm}
/>
<StyledLabel>{triggerLabel}</StyledLabel>
<IconChevronDown size={16} />
<IconChevronDown
size={16}
color={theme.font.color.primary}
stroke={theme.icon.stroke.sm}
/>
</StyledClickableArea>
}
dropdownPlacement="bottom-start"
@@ -272,6 +272,11 @@ export const SidePanelCommandMenuItemEditPage = () => {
gripMode="onHover"
isIconDisplayedOnHoverOnly={false}
iconButtons={[
{
Icon: IconDotsVertical,
Wrapper: makeOptionsDropdownWrapper(item),
onClick: () => {},
},
{
Icon: IconPinnedOff,
onClick: (event) => {
@@ -279,11 +284,6 @@ export const SidePanelCommandMenuItemEditPage = () => {
handleTogglePin(item.id, true);
},
},
{
Icon: IconDotsVertical,
Wrapper: makeOptionsDropdownWrapper(item),
onClick: () => {},
},
]}
/>
</SelectableListItem>
@@ -74,12 +74,23 @@ export const useEnrichHeadlessCommandContextApiWithWorkflowVersionTriggerInforma
return undefined;
}
const selectedRecordIds =
if (
headlessEngineCommandContextApi.targetedRecordsRule.mode ===
'selection'
? headlessEngineCommandContextApi.targetedRecordsRule
.selectedRecordIds
: [];
'exclusion'
) {
enqueueWarningSnackBar({
message: t`Running workflows on all records is not yet supported. Please select records manually.`,
options: {
dedupeKey: 'workflow-manual-trigger-select-all-not-supported',
},
});
return undefined;
}
const selectedRecordIds =
headlessEngineCommandContextApi.targetedRecordsRule
.selectedRecordIds;
if (selectedRecordIds.length > QUERY_MAX_RECORDS) {
const selectedCountFormatted =
@@ -6,7 +6,7 @@ import { InformationBannerBillingSubscriptionPaused } from '@/information-banner
import { InformationBannerEndTrialPeriod } from '@/information-banner/components/billing/InformationBannerEndTrialPeriod';
import { InformationBannerFailPaymentInfo } from '@/information-banner/components/billing/InformationBannerFailPaymentInfo';
import { InformationBannerNoBillingSubscription } from '@/information-banner/components/billing/InformationBannerNoBillingSubscription';
import { InformationBannerLegacyEnterpriseKey } from '@/information-banner/components/enterprise/InformationBannerLegacyEnterpriseKey';
import { InformationBannerInvalidEnterpriseKey } from '@/information-banner/components/enterprise/InformationBannerInvalidEnterpriseKey';
import { InformationBannerMaintenance } from '@/information-banner/components/maintenance/InformationBannerMaintenance';
import { InformationBannerReconnectAccountEmailAliases } from '@/information-banner/components/reconnect-account/InformationBannerReconnectAccountEmailAliases';
import { InformationBannerReconnectAccountInsufficientPermissions } from '@/information-banner/components/reconnect-account/InformationBannerReconnectAccountInsufficientPermissions';
@@ -55,7 +55,7 @@ export const InformationBannerWrapper = () => {
return (
<StyledInformationBannerWrapper>
<InformationBannerMaintenance />
<InformationBannerLegacyEnterpriseKey />
<InformationBannerInvalidEnterpriseKey />
{isAccountSyncEnabled && (
<InformationBannerReconnectAccountInsufficientPermissions />
)}
@@ -9,9 +9,9 @@ import { SettingsPath } from 'twenty-shared/types';
import { getSettingsPath } from 'twenty-shared/utils';
import { IconKey } from 'twenty-ui/display';
const COMPONENT_INSTANCE_ID = 'information-banner-legacy-enterprise-key';
const COMPONENT_INSTANCE_ID = 'information-banner-invalid-enterprise-key';
export const InformationBannerLegacyEnterpriseKey = () => {
export const InformationBannerInvalidEnterpriseKey = () => {
const { t } = useLingui();
const navigate = useNavigate();
const currentWorkspace = useAtomStateValue(currentWorkspaceState);
@@ -21,11 +21,12 @@ export const InformationBannerLegacyEnterpriseKey = () => {
COMPONENT_INSTANCE_ID,
);
const hasLegacyKey =
const hasInvalidKey =
currentWorkspace?.hasValidEnterpriseKey === true &&
currentWorkspace?.hasValidSignedEnterpriseKey !== true;
currentWorkspace?.hasValidSignedEnterpriseKey !== true &&
currentWorkspace?.hasValidEnterpriseValidityToken !== true;
if (!hasLegacyKey) {
if (!hasInvalidKey) {
return null;
}
@@ -33,7 +34,7 @@ export const InformationBannerLegacyEnterpriseKey = () => {
<InformationBanner
componentInstanceId={COMPONENT_INSTANCE_ID}
variant="secondary"
message={t`Your enterprise key format is deprecated. Please activate a new key to keep enterprise features.`}
message={t`Your enterprise key is no longer valid. Activate a new key to continue using enterprise features.`}
buttonTitle={t`Activate`}
buttonIcon={IconKey}
buttonOnClick={() =>
@@ -13,6 +13,7 @@ import {
FindManyCommandMenuItemsDocument,
FindAllRecordPageLayoutsDocument,
FindFieldsWidgetViewsDocument,
FindTableWidgetViewsDocument,
FindManyFrontComponentsDocument,
FindManyLogicFunctionsDocument,
FindManyNavigationMenuItemsDocument,
@@ -44,6 +45,7 @@ const PAGE_LAYOUTS_GROUP_KEYS: MetadataEntityKey[] = [
const INDEX_VIEW_TYPES = [ViewType.TABLE, ViewType.KANBAN, ViewType.CALENDAR];
const FIELDS_WIDGET_VIEW_TYPES = [ViewType.FIELDS_WIDGET];
const TABLE_WIDGET_VIEW_TYPES = [ViewType.TABLE_WIDGET];
const hasOverlap = (
staleKeys: MetadataEntityKey[],
@@ -93,30 +95,42 @@ export const useLoadStaleMetadataEntities = () => {
variables: { viewTypes: FIELDS_WIDGET_VIEW_TYPES },
fetchPolicy: 'network-only',
}),
]).then(([indexViewsResult, fieldsWidgetViewsResult]) => {
const allViews = [
...(indexViewsResult.data?.getViews ?? []),
...(fieldsWidgetViewsResult.data?.getViews ?? []),
];
client.query({
query: FindTableWidgetViewsDocument,
variables: { viewTypes: TABLE_WIDGET_VIEW_TYPES },
fetchPolicy: 'network-only',
}),
]).then(
([
indexViewsResult,
fieldsWidgetViewsResult,
tableWidgetViewsResult,
]) => {
const allViews = [
...(indexViewsResult.data?.getViews ?? []),
...(fieldsWidgetViewsResult.data?.getViews ?? []),
...(tableWidgetViewsResult.data?.getViews ?? []),
];
const {
flatViews,
flatViewFields,
flatViewFilters,
flatViewSorts,
flatViewGroups,
flatViewFilterGroups,
flatViewFieldGroups,
} = splitViewWithRelated(allViews);
const {
flatViews,
flatViewFields,
flatViewFilters,
flatViewSorts,
flatViewGroups,
flatViewFilterGroups,
flatViewFieldGroups,
} = splitViewWithRelated(allViews);
replaceDraft('views', flatViews);
replaceDraft('viewFields', flatViewFields);
replaceDraft('viewFilters', flatViewFilters);
replaceDraft('viewSorts', flatViewSorts);
replaceDraft('viewGroups', flatViewGroups);
replaceDraft('viewFilterGroups', flatViewFilterGroups);
replaceDraft('viewFieldGroups', flatViewFieldGroups);
}),
replaceDraft('views', flatViews);
replaceDraft('viewFields', flatViewFields);
replaceDraft('viewFilters', flatViewFilters);
replaceDraft('viewSorts', flatViewSorts);
replaceDraft('viewGroups', flatViewGroups);
replaceDraft('viewFilterGroups', flatViewFilterGroups);
replaceDraft('viewFieldGroups', flatViewFieldGroups);
},
),
);
}
@@ -0,0 +1,9 @@
import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState';
export const lastClickedNavigationMenuItemIdState = createAtomState<
string | null
>({
key: 'lastClickedNavigationMenuItemIdState',
defaultValue: null,
useSessionStorage: true,
});
@@ -1,42 +0,0 @@
import { NavigationMenuItemType } from 'twenty-shared/types';
import { isLocationMatchingNavigationMenuItem } from '@/navigation-menu-item/common/utils/isLocationMatchingNavigationMenuItem';
describe('isLocationMatchingNavigationMenuItem', () => {
it('should return true when item link matches current path (non-view) or current view path (view)', () => {
expect(
isLocationMatchingNavigationMenuItem(
'/app/objects/people',
'/app/objects/people?viewId=123',
NavigationMenuItemType.RECORD,
'/app/objects/people',
),
).toBe(true);
expect(
isLocationMatchingNavigationMenuItem(
'/app/objects/companies',
'/app/objects/companies?viewId=123',
NavigationMenuItemType.VIEW,
'/app/objects/companies?viewId=123',
),
).toBe(true);
});
it('should return false when item link does not match path', () => {
expect(
isLocationMatchingNavigationMenuItem(
'/app/objects/people',
'/app/objects/people?viewId=123',
NavigationMenuItemType.RECORD,
'/app/objects/company',
),
).toBe(false);
expect(
isLocationMatchingNavigationMenuItem(
'/app/objects/companies',
'/app/objects/companies?viewId=123',
NavigationMenuItemType.VIEW,
'/app/objects/companies?viewId=456',
),
).toBe(false);
});
});
@@ -1,15 +0,0 @@
import { NavigationMenuItemType } from 'twenty-shared/types';
export const isLocationMatchingNavigationMenuItem = (
currentPath: string,
currentViewPath: string,
navigationMenuItemType: NavigationMenuItemType,
computedLink: string,
) => {
const isViewBasedItem =
navigationMenuItemType === NavigationMenuItemType.VIEW ||
navigationMenuItemType === NavigationMenuItemType.OBJECT;
return isViewBasedItem
? computedLink === currentViewPath
: computedLink === currentPath;
};
@@ -47,7 +47,8 @@ export const NavigationMenuItemFolder = ({
const folderName = item.name ?? 'Folder';
const folderIconKey = item.icon;
const folderColor = 'color' in item ? (item.color as string | null) : null;
const navigationMenuItems = folderChildrenById.get(folderId) ?? [];
const folderChildrenNavigationMenuItems =
folderChildrenById.get(folderId) ?? [];
const isGroup = folderCount > 1;
if (readOnly) {
@@ -57,7 +58,7 @@ export const NavigationMenuItemFolder = ({
folderName={folderName}
folderIconKey={folderIconKey}
folderColor={folderColor}
navigationMenuItems={navigationMenuItems}
navigationMenuItems={folderChildrenNavigationMenuItems}
isGroup={isGroup}
/>
);
@@ -71,7 +72,7 @@ export const NavigationMenuItemFolder = ({
folderName={folderName}
folderIconKey={folderIconKey}
folderColor={folderColor}
navigationMenuItems={navigationMenuItems}
navigationMenuItems={folderChildrenNavigationMenuItems}
isGroup={isGroup}
/>
}
@@ -81,7 +82,7 @@ export const NavigationMenuItemFolder = ({
folderName={folderName}
folderIconKey={folderIconKey}
folderColor={folderColor}
navigationMenuItems={navigationMenuItems}
navigationMenuItems={folderChildrenNavigationMenuItems}
isGroup={isGroup}
isEditInPlace={isEditInPlace}
editModeProps={editModeProps}
@@ -115,8 +116,11 @@ const NavigationMenuItemFolderReadOnlyContent = ({
const { theme } = useContext(ThemeContext);
const FolderIcon = getIcon(folderIconKey ?? FOLDER_ICON_DEFAULT);
const { isOpen, handleToggle, selectedNavigationMenuItemIndex } =
useNavigationMenuItemFolderOpenState({ folderId, navigationMenuItems });
const { isOpen, handleToggle, hasActiveChild } =
useNavigationMenuItemFolderOpenState({
folderId,
folderChildrenNavigationMenuItems: navigationMenuItems,
});
return (
<NavigationMenuItemFolderLayout
@@ -129,7 +133,7 @@ const NavigationMenuItemFolderReadOnlyContent = ({
? folderColor
: DEFAULT_NAVIGATION_MENU_ITEM_COLOR_FOLDER
}
active={!isOpen && selectedNavigationMenuItemIndex >= 0}
active={!isOpen && hasActiveChild}
onClick={handleToggle}
className="navigation-drawer-item"
triggerEvent="CLICK"
@@ -161,7 +165,6 @@ const NavigationMenuItemFolderReadOnlyContent = ({
navigationMenuItem={navigationMenuItem}
index={index}
arrayLength={navigationMenuItems.length}
selectedNavigationMenuItemIndex={selectedNavigationMenuItemIndex}
isDragging={false}
/>
))}
@@ -39,8 +39,8 @@ import { NavigationMenuItemFolderLayout } from '@/navigation-menu-item/display/f
import { NavigationMenuItemFolderNavigationDrawerItemDropdown } from '@/navigation-menu-item/display/folder/components/NavigationMenuItemFolderNavigationDrawerItemDropdown';
import { NavigationMenuItemFolderSubItem } from '@/navigation-menu-item/display/folder/components/NavigationMenuItemFolderSubItem';
import { useNavigationMenuItemFolderOpenState } from '@/navigation-menu-item/display/folder/hooks/useNavigationMenuItemFolderOpenState';
import type { NavigationMenuItemClickParams } from '@/navigation-menu-item/display/hooks/useNavigationMenuItemSectionItems';
import { useIsNavigationMenuItemEditHighlighted } from '@/navigation-menu-item/display/hooks/useIsNavigationMenuItemEditHighlighted';
import type { NavigationMenuItemClickParams } from '@/navigation-menu-item/display/hooks/useNavigationMenuItemSectionItems';
import { useFavoritesFolderEdit } from '@/navigation-menu-item/edit/folder/hooks/useFavoritesFolderEdit';
import { useOpenAddItemToFolderPage } from '@/navigation-menu-item/edit/hooks/useOpenAddItemToFolderPage';
import type { EditModeProps } from '@/object-metadata/components/EditModeProps';
@@ -116,8 +116,11 @@ export const NavigationMenuItemFolderDnd = ({
? NavigationSections.FAVORITES
: NavigationSections.WORKSPACE;
const { isOpen, handleToggle, selectedNavigationMenuItemIndex } =
useNavigationMenuItemFolderOpenState({ folderId, navigationMenuItems });
const { isOpen, handleToggle, hasActiveChild } =
useNavigationMenuItemFolderOpenState({
folderId,
folderChildrenNavigationMenuItems: navigationMenuItems,
});
const { isDragging: isContextDragging } = useContext(
NavigationMenuItemDragContext,
@@ -228,7 +231,7 @@ export const NavigationMenuItemFolderDnd = ({
Icon={FolderIcon}
iconColor={iconColor}
active={
(!isOpen && selectedNavigationMenuItemIndex >= 0) ||
(!isOpen && hasActiveChild) ||
(isWorkspace && isSelectedInEditMode && !isOpen)
}
onClick={handleHeaderClick}
@@ -348,9 +351,6 @@ export const NavigationMenuItemFolderDnd = ({
navigationMenuItem={navigationMenuItem}
index={index}
arrayLength={folderContentLength}
selectedNavigationMenuItemIndex={
selectedNavigationMenuItemIndex
}
isDragging={isDragging}
rightOptions={
isEditInPlace ? (
@@ -399,7 +399,7 @@ export const NavigationMenuItemFolderDnd = ({
subItemState={getNavigationSubItemLeftAdornment({
index: navigationMenuItems.length,
arrayLength: folderContentLength,
selectedIndex: selectedNavigationMenuItemIndex,
selectedIndex: -1,
})}
/>
)}
@@ -1,5 +1,5 @@
import { styled } from '@linaria/react';
import { useState, type ReactNode } from 'react';
import { useDeferredValue, useState, type ReactNode } from 'react';
import { AnimatedExpandableContainer } from 'twenty-ui/layout';
import { NavigationDrawerItemsCollapsableContainer } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItemsCollapsableContainer';
@@ -25,12 +25,15 @@ export const NavigationMenuItemFolderLayout = ({
}: NavigationMenuItemFolderLayoutProps) => {
const [skipInitialExpandAnimation] = useState(() => isOpen);
const deferredIsOpen = useDeferredValue(isOpen);
const isExpandedForAnimation = isOpen ? deferredIsOpen : false;
return (
<NavigationDrawerItemsCollapsableContainer isGroup={isGroup}>
{header}
<StyledFolderExpandableWrapper>
<AnimatedExpandableContainer
isExpanded={isOpen}
isExpanded={isExpandedForAnimation}
dimension="height"
mode="fit-content"
containAnimation
@@ -1,28 +1,31 @@
import { type ReactNode } from 'react';
import { useNavigate } from 'react-router-dom';
import { NavigationMenuItemType } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { type NavigationMenuItem } from '~/generated-metadata/graphql';
import { lastClickedNavigationMenuItemIdState } from '@/navigation-menu-item/common/states/lastClickedNavigationMenuItemIdState';
import { getNavigationMenuItemColor } from '@/navigation-menu-item/common/utils/getNavigationMenuItemColor';
import { NavigationMenuItemIcon } from '@/navigation-menu-item/display/components/NavigationMenuItemIcon';
import type { EnrichedObjectMetadataItem } from '@/object-metadata/types/EnrichedObjectMetadataItem';
import { getObjectMetadataForNavigationMenuItem } from '@/navigation-menu-item/display/object/utils/getObjectMetadataForNavigationMenuItem';
import { useIdentifyActiveNavigationMenuItems } from '@/navigation-menu-item/display/hooks/useIdentifyActiveNavigationMenuItems';
import { useIsNavigationMenuItemEditHighlighted } from '@/navigation-menu-item/display/hooks/useIsNavigationMenuItemEditHighlighted';
import { getNavigationMenuItemObjectNameSingular } from '@/navigation-menu-item/display/object/utils/getNavigationMenuItemObjectNameSingular';
import { getObjectMetadataForNavigationMenuItem } from '@/navigation-menu-item/display/object/utils/getObjectMetadataForNavigationMenuItem';
import { getObjectNavigationMenuItemSecondaryLabel } from '@/navigation-menu-item/display/object/utils/getObjectNavigationMenuItemSecondaryLabel';
import { getNavigationMenuItemComputedLink } from '@/navigation-menu-item/display/utils/getNavigationMenuItemComputedLink';
import { useIsNavigationMenuItemEditHighlighted } from '@/navigation-menu-item/display/hooks/useIsNavigationMenuItemEditHighlighted';
import { getNavigationMenuItemLabel } from '@/navigation-menu-item/display/utils/getNavigationMenuItemLabel';
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
import type { EnrichedObjectMetadataItem } from '@/object-metadata/types/EnrichedObjectMetadataItem';
import { NavigationDrawerSubItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSubItem';
import { getNavigationSubItemLeftAdornment } from '@/ui/navigation/navigation-drawer/utils/getNavigationSubItemLeftAdornment';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState';
import { viewsSelector } from '@/views/states/selectors/viewsSelector';
type NavigationMenuItemFolderSubItemProps = {
navigationMenuItem: NavigationMenuItem;
index: number;
arrayLength: number;
selectedNavigationMenuItemIndex: number;
isDragging: boolean;
rightOptions?: ReactNode;
onClick?: () => void;
@@ -36,7 +39,6 @@ export const NavigationMenuItemFolderSubItem = ({
navigationMenuItem,
index,
arrayLength,
selectedNavigationMenuItemIndex,
isDragging,
rightOptions,
onClick,
@@ -46,6 +48,15 @@ export const NavigationMenuItemFolderSubItem = ({
useIsNavigationMenuItemEditHighlighted(navigationMenuItem);
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
const views = useAtomStateValue(viewsSelector);
const navigate = useNavigate();
const setLastClickedNavigationMenuItemId = useSetAtomState(
lastClickedNavigationMenuItemIdState,
);
const { activeNavigationMenuItemIds } =
useIdentifyActiveNavigationMenuItems();
const isActive = activeNavigationMenuItemIds.includes(navigationMenuItem.id);
const label = getNavigationMenuItemLabel(
navigationMenuItem,
@@ -87,7 +98,10 @@ export const NavigationMenuItemFolderSubItem = ({
item: navigationMenuItem,
objectMetadataItem: objectMetadataItem ?? undefined,
})
: undefined);
: () => {
setLastClickedNavigationMenuItemId(navigationMenuItem.id);
navigate(computedLink);
});
return (
<NavigationDrawerSubItem
@@ -107,14 +121,14 @@ export const NavigationMenuItemFolderSubItem = ({
navigationMenuItem,
objectMetadataItem ?? undefined,
)}
to={isDragging || handleClick ? undefined : computedLink}
to={isDragging || isEditable ? undefined : computedLink}
onClick={handleClick}
active={index === selectedNavigationMenuItemIndex}
active={isActive}
isSelectedInEditMode={isEditHighlightedInNavigationMenu}
subItemState={getNavigationSubItemLeftAdornment({
index,
arrayLength,
selectedIndex: selectedNavigationMenuItemIndex,
selectedIndex: isActive ? index : -1,
})}
rightOptions={rightOptions}
isDragging={isDragging}
@@ -1,13 +1,14 @@
import { isNonEmptyString } from '@sniptt/guards';
import { useLocation, useNavigate } from 'react-router-dom';
import { useNavigate } from 'react-router-dom';
import { NavigationMenuItemType } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { useIsMobile } from 'twenty-ui/utilities';
import { type NavigationMenuItem } from '~/generated-metadata/graphql';
import { currentNavigationMenuItemFolderIdState } from '@/navigation-menu-item/common/states/currentNavigationMenuItemFolderIdState';
import { lastClickedNavigationMenuItemIdState } from '@/navigation-menu-item/common/states/lastClickedNavigationMenuItemIdState';
import { openNavigationMenuItemFolderIdsState } from '@/navigation-menu-item/common/states/openNavigationMenuItemFolderIdsState';
import { isLocationMatchingNavigationMenuItem } from '@/navigation-menu-item/common/utils/isLocationMatchingNavigationMenuItem';
import { useIdentifyActiveNavigationMenuItems } from '@/navigation-menu-item/display/hooks/useIdentifyActiveNavigationMenuItems';
import { getNavigationMenuItemComputedLink } from '@/navigation-menu-item/display/utils/getNavigationMenuItemComputedLink';
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState';
@@ -17,17 +18,14 @@ import { viewsSelector } from '@/views/states/selectors/viewsSelector';
type UseNavigationMenuItemFolderOpenStateParams = {
folderId: string;
navigationMenuItems: NavigationMenuItem[];
folderChildrenNavigationMenuItems: NavigationMenuItem[];
};
export const useNavigationMenuItemFolderOpenState = ({
folderId,
navigationMenuItems,
folderChildrenNavigationMenuItems,
}: UseNavigationMenuItemFolderOpenStateParams) => {
const location = useLocation();
const navigate = useNavigate();
const currentPath = location.pathname;
const currentViewPath = location.pathname + location.search;
const isMobile = useIsMobile();
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
const views = useAtomStateValue(viewsSelector);
@@ -38,24 +36,16 @@ export const useNavigationMenuItemFolderOpenState = ({
currentNavigationMenuItemFolderIdState,
);
const selectedNavigationMenuItemIndex = navigationMenuItems.findIndex(
(item) => {
const computedLink = getNavigationMenuItemComputedLink(
item,
objectMetadataItems,
views,
);
return isLocationMatchingNavigationMenuItem(
currentPath,
currentViewPath,
item.type,
computedLink,
);
},
const { activeNavigationMenuItemIds } =
useIdentifyActiveNavigationMenuItems();
const setLastClickedNavigationMenuItemId = useSetAtomState(
lastClickedNavigationMenuItemIdState,
);
const isExplicitlyOpen = openNavigationMenuItemFolderIds.includes(folderId);
const hasActiveChild = selectedNavigationMenuItemIndex >= 0;
const hasActiveChild = folderChildrenNavigationMenuItems.some((item) =>
activeNavigationMenuItemIds.includes(item.id),
);
const isOpen = isExplicitlyOpen || hasActiveChild;
const handleToggle = () => {
@@ -72,17 +62,19 @@ export const useNavigationMenuItemFolderOpenState = ({
}
if (!isOpen) {
const firstNonLinkItem = navigationMenuItems.find((item) => {
if (item.type === NavigationMenuItemType.LINK) {
return false;
}
const computedLink = getNavigationMenuItemComputedLink(
item,
objectMetadataItems,
views,
);
return isNonEmptyString(computedLink);
});
const firstNonLinkItem = folderChildrenNavigationMenuItems.find(
(item) => {
if (item.type === NavigationMenuItemType.LINK) {
return false;
}
const computedLink = getNavigationMenuItemComputedLink(
item,
objectMetadataItems,
views,
);
return isNonEmptyString(computedLink);
},
);
if (isDefined(firstNonLinkItem)) {
const link = getNavigationMenuItemComputedLink(
firstNonLinkItem,
@@ -90,6 +82,7 @@ export const useNavigationMenuItemFolderOpenState = ({
views,
);
if (isNonEmptyString(link)) {
setLastClickedNavigationMenuItemId(firstNonLinkItem.id);
navigate(link);
}
}
@@ -99,6 +92,6 @@ export const useNavigationMenuItemFolderOpenState = ({
return {
isOpen,
handleToggle,
selectedNavigationMenuItemIndex,
hasActiveChild,
};
};
@@ -0,0 +1,182 @@
import { useMemo } from 'react';
import { useLocation, useParams } from 'react-router-dom';
import { AppPath, NavigationMenuItemType } from 'twenty-shared/types';
import { getAppPath, isDefined } from 'twenty-shared/utils';
import { MAIN_CONTEXT_STORE_INSTANCE_ID } from '@/context-store/constants/MainContextStoreInstanceId';
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
import { lastClickedNavigationMenuItemIdState } from '@/navigation-menu-item/common/states/lastClickedNavigationMenuItemIdState';
import { navigationMenuItemsSelector } from '@/navigation-menu-item/common/states/navigationMenuItemsSelector';
import { getObjectMetadataForNavigationMenuItem } from '@/navigation-menu-item/display/object/utils/getObjectMetadataForNavigationMenuItem';
import { getNavigationMenuItemComputedLink } from '@/navigation-menu-item/display/utils/getNavigationMenuItemComputedLink';
import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems';
import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { viewsSelector } from '@/views/states/selectors/viewsSelector';
export const useIdentifyActiveNavigationMenuItems = (): {
activeNavigationMenuItemIds: string[];
objectMetadataIdForOpenedSection: string | null;
} => {
const navigationMenuItems = useAtomStateValue(navigationMenuItemsSelector);
const lastClickedNavigationMenuItemId = useAtomStateValue(
lastClickedNavigationMenuItemIdState,
);
const views = useAtomStateValue(viewsSelector);
const { activeObjectMetadataItems, objectMetadataItems } =
useFilteredObjectMetadataItems();
const location = useLocation();
const {
objectNamePlural: currentObjectNamePlural,
objectNameSingular: currentObjectNameSingular,
} = useParams();
const currentPath = location.pathname;
const currentPathWithSearch = location.pathname + location.search;
const currentObjectMetadataItem = activeObjectMetadataItems.find(
(item) =>
item.namePlural === currentObjectNamePlural ||
item.nameSingular === currentObjectNameSingular,
);
const isOnRecordShowPage =
isDefined(currentObjectMetadataItem) &&
currentPath.includes(
getAppPath(AppPath.RecordShowPage, {
objectNameSingular: currentObjectMetadataItem.nameSingular,
objectRecordId: '',
}) + '/',
);
const contextStoreCurrentViewId = useAtomComponentStateValue(
contextStoreCurrentViewIdComponentState,
MAIN_CONTEXT_STORE_INSTANCE_ID,
);
const { activeNavigationMenuItemIds, objectMetadataIdForOpenedSection } =
useMemo(() => {
if (isDefined(lastClickedNavigationMenuItemId)) {
const lastClickedItem = navigationMenuItems.find(
(item) => item.id === lastClickedNavigationMenuItemId,
);
if (isDefined(lastClickedItem)) {
const lastClickedNavigationMenuItemLink =
getNavigationMenuItemComputedLink(
lastClickedItem,
objectMetadataItems,
views,
);
const lastClickedObjectMetadataId =
getObjectMetadataForNavigationMenuItem(
lastClickedItem,
objectMetadataItems,
views,
)?.id;
const pathMatches =
currentPathWithSearch === lastClickedNavigationMenuItemLink;
const objectMatchesOnShowPage =
isOnRecordShowPage &&
isDefined(lastClickedObjectMetadataId) &&
lastClickedObjectMetadataId === currentObjectMetadataItem?.id;
const isLastClickedNavigationMenuItemRelevant =
pathMatches || objectMatchesOnShowPage;
if (isLastClickedNavigationMenuItemRelevant) {
return {
activeNavigationMenuItemIds: [lastClickedItem.id],
objectMetadataIdForOpenedSection: null,
};
}
}
}
if (isOnRecordShowPage) {
const matchingRecordNavigationMenuItemIds = navigationMenuItems
.filter((item) => {
if (item.type !== NavigationMenuItemType.RECORD) {
return false;
}
const link = getNavigationMenuItemComputedLink(
item,
objectMetadataItems,
views,
);
return link === currentPath;
})
.map((item) => item.id);
const matchingObjectNavigationMenuItemIds = navigationMenuItems
.filter((item) => {
if (item.type !== NavigationMenuItemType.OBJECT) {
return false;
}
const itemObjectMetadataId = getObjectMetadataForNavigationMenuItem(
item,
objectMetadataItems,
views,
)?.id;
return itemObjectMetadataId === currentObjectMetadataItem?.id;
})
.map((item) => item.id);
const activeNavigationMenuItemIds = [
...matchingRecordNavigationMenuItemIds,
...matchingObjectNavigationMenuItemIds,
];
return {
activeNavigationMenuItemIds,
objectMetadataIdForOpenedSection:
activeNavigationMenuItemIds.length === 0
? currentObjectMetadataItem?.id
: null,
};
}
const matchingViewNavigationMenuItemIds = navigationMenuItems
.filter(
(item) =>
item.type === NavigationMenuItemType.VIEW &&
isDefined(contextStoreCurrentViewId) &&
item.viewId === contextStoreCurrentViewId,
)
.map((item) => item.id);
if (matchingViewNavigationMenuItemIds.length > 0) {
return {
activeNavigationMenuItemIds: matchingViewNavigationMenuItemIds,
objectMetadataIdForOpenedSection: null,
};
}
const matchingObjectNavigationMenuItemIds = navigationMenuItems
.filter(
(item) =>
item.type === NavigationMenuItemType.OBJECT &&
item.targetObjectMetadataId === currentObjectMetadataItem?.id,
)
.map((item) => item.id);
return {
activeNavigationMenuItemIds: matchingObjectNavigationMenuItemIds,
objectMetadataIdForOpenedSection:
matchingObjectNavigationMenuItemIds.length === 0 &&
isDefined(currentObjectMetadataItem)
? currentObjectMetadataItem.id
: null,
};
}, [
navigationMenuItems,
lastClickedNavigationMenuItemId,
objectMetadataItems,
views,
location,
contextStoreCurrentViewId,
]);
return { activeNavigationMenuItemIds, objectMetadataIdForOpenedSection };
};
@@ -1,21 +0,0 @@
import { NavigationMenuItemType } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { useNavigationMenuItemsData } from './useNavigationMenuItemsData';
export const useWorkspaceNavigationMenuItems = (): {
objectMetadataIdsInWorkspaceNav: Set<string>;
} => {
const { workspaceNavigationMenuItems: rawWorkspaceNavigationMenuItems } =
useNavigationMenuItemsData();
const objectMetadataIdsInWorkspaceNav = new Set(
rawWorkspaceNavigationMenuItems
.filter((item) => item.type === NavigationMenuItemType.OBJECT)
.map((item) => item.targetObjectMetadataId)
.filter((objectMetadataId) => isDefined(objectMetadataId)),
);
return {
objectMetadataIdsInWorkspaceNav,
};
};
@@ -3,7 +3,9 @@ import { isNonEmptyString } from '@sniptt/guards';
import { Fragment, type ReactNode, useContext } from 'react';
import { isLayoutCustomizationModeEnabledState } from '@/layout-customization/states/isLayoutCustomizationModeEnabledState';
import { lastClickedNavigationMenuItemIdState } from '@/navigation-menu-item/common/states/lastClickedNavigationMenuItemIdState';
import { recordIdentifierToObjectRecordIdentifier } from '@/navigation-menu-item/common/utils/recordIdentifierToObjectRecordIdentifier';
import { useIdentifyActiveNavigationMenuItems } from '@/navigation-menu-item/display/hooks/useIdentifyActiveNavigationMenuItems';
import { getNavigationMenuItemComputedLink } from '@/navigation-menu-item/display/utils/getNavigationMenuItemComputedLink';
import { getNavigationMenuItemLabel } from '@/navigation-menu-item/display/utils/getNavigationMenuItemLabel';
import { ObjectIconWithViewOverlay } from '@/navigation-menu-item/display/view/components/ObjectIconWithViewOverlay';
@@ -15,8 +17,9 @@ import { getObjectPermissionsForObject } from '@/object-metadata/utils/getObject
import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions';
import { NavigationDrawerItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItem';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState';
import { viewsSelector } from '@/views/states/selectors/viewsSelector';
import { useLocation } from 'react-router-dom';
import { useNavigate } from 'react-router-dom';
import {
AppPath,
CoreObjectNameSingular,
@@ -67,16 +70,20 @@ export const NavigationDrawerItemForObjectMetadataItem = ({
const { getIcon } = useIcons();
const objectNavItemColor = getObjectColorWithFallback(objectMetadataItem);
const location = useLocation();
const currentPath = location.pathname;
const currentPathWithSearch = `${location.pathname}${location.search}`;
const navigate = useNavigate();
const { activeNavigationMenuItemIds, objectMetadataIdForOpenedSection } =
useIdentifyActiveNavigationMenuItems();
const setLastClickedNavigationMenuItemId = useSetAtomState(
lastClickedNavigationMenuItemIdState,
);
const isRecord = navigationMenuItem?.type === NavigationMenuItemType.RECORD;
const isView = navigationMenuItem?.type === NavigationMenuItemType.VIEW;
const isObject = navigationMenuItem?.type === NavigationMenuItemType.OBJECT;
const hasCustomLink = isRecord || isView || isObject;
const hasNavigationMenuItem = isRecord || isView || isObject;
const navigationPath = hasCustomLink
const navigationPath = hasNavigationMenuItem
? getNavigationMenuItemComputedLink(
navigationMenuItem!,
objectMetadataItems,
@@ -88,25 +95,18 @@ export const NavigationDrawerItemForObjectMetadataItem = ({
lastVisitedViewId ? { viewId: lastVisitedViewId } : undefined,
);
const computedLink = hasCustomLink ? navigationPath : '';
const isActive = hasCustomLink
? (isView || isObject ? currentPathWithSearch : currentPath) ===
computedLink
: currentPath ===
getAppPath(AppPath.RecordIndexPage, {
objectNamePlural: objectMetadataItem.namePlural,
}) ||
currentPath.includes(
getAppPath(AppPath.RecordShowPage, {
objectNameSingular: objectMetadataItem.nameSingular,
objectRecordId: '',
}) + '/',
);
const isActive = hasNavigationMenuItem
? activeNavigationMenuItemIds.includes(navigationMenuItem!.id)
: objectMetadataIdForOpenedSection === objectMetadataItem.id;
const handleClick = isLayoutCustomizationModeEnabled
? onEditModeClick
: undefined;
: hasNavigationMenuItem && !isDragging
? () => {
setLastClickedNavigationMenuItemId(navigationMenuItem!.id);
navigate(navigationPath);
}
: undefined;
const shouldNavigate = !isLayoutCustomizationModeEnabled;
@@ -1,6 +1,4 @@
import { useParams } from 'react-router-dom';
import { useWorkspaceNavigationMenuItems } from '@/navigation-menu-item/display/hooks/useWorkspaceNavigationMenuItems';
import { useIdentifyActiveNavigationMenuItems } from '@/navigation-menu-item/display/hooks/useIdentifyActiveNavigationMenuItems';
import { NavigationDrawerSectionForObjectMetadataItems } from '@/object-metadata/components/NavigationDrawerSectionForObjectMetadataItems';
import { useFilteredObjectMetadataItems } from '@/object-metadata/hooks/useFilteredObjectMetadataItems';
import { useLingui } from '@lingui/react/macro';
@@ -12,21 +10,14 @@ export const NavigationDrawerOpenedSection = () => {
const { activeObjectMetadataItems } = useFilteredObjectMetadataItems();
const { objectMetadataIdsInWorkspaceNav } = useWorkspaceNavigationMenuItems();
const {
objectNamePlural: currentObjectNamePlural,
objectNameSingular: currentObjectNameSingular,
} = useParams();
const { objectMetadataIdForOpenedSection } =
useIdentifyActiveNavigationMenuItems();
const objectMetadataItem = activeObjectMetadataItems.find(
(item) =>
item.namePlural === currentObjectNamePlural ||
item.nameSingular === currentObjectNameSingular,
(item) => item.id === objectMetadataIdForOpenedSection,
);
const shouldShowOpenedSection = isDefined(objectMetadataItem)
? !objectMetadataIdsInWorkspaceNav.has(objectMetadataItem.id)
: false;
const shouldShowOpenedSection = isDefined(objectMetadataItem);
return (
<AnimatedExpandableContainer isExpanded={shouldShowOpenedSection}>
@@ -4,4 +4,5 @@ import { ViewVisibility } from '~/generated-metadata/graphql';
export const isViewDisplayableInNavigationMenu = (view: View): boolean =>
view.type !== ViewType.FIELDS_WIDGET &&
view.type !== ViewType.TABLE_WIDGET &&
view.visibility === ViewVisibility.WORKSPACE;
@@ -4,13 +4,13 @@ import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/
import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext';
import { useLoadRecordIndexStates } from '@/object-record/record-index/hooks/useLoadRecordIndexStates';
import { recordIndexViewTypeState } from '@/object-record/record-index/states/recordIndexViewTypeState';
import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState';
import { useUpdateCurrentView } from '@/views/hooks/useUpdateCurrentView';
import { viewsSelector } from '@/views/states/selectors/viewsSelector';
import { type GraphQLView } from '@/views/types/GraphQLView';
import { ViewType, viewTypeIconMapping } from '@/views/types/ViewType';
import { useGetAvailableFieldsForCalendar } from '@/views/view-picker/hooks/useGetAvailableFieldsForCalendar';
import { useGetAvailableFieldsToGroupRecordsBy } from '@/views/view-picker/hooks/useGetAvailableFieldsToGroupRecordsBy';
import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState';
import { useStore } from 'jotai';
import { useCallback } from 'react';
import { assertUnreachable, isDefined } from 'twenty-shared/utils';
@@ -112,6 +112,7 @@ export const useSetViewTypeFromLayoutOptionsMenu = () => {
updateCurrentViewParams.mainGroupByFieldMetadataId = null;
return await updateCurrentView(updateCurrentViewParams);
}
case ViewType.TABLE_WIDGET:
case ViewType.FIELDS_WIDGET: {
return;
}
@@ -0,0 +1,86 @@
import { useUpdateMetadataStoreDraft } from '@/metadata-store/hooks/useUpdateMetadataStoreDraft';
import { metadataStoreState } from '@/metadata-store/states/metadataStoreState';
import { type FlatView } from '@/metadata-store/types/FlatView';
import { type FlatViewField } from '@/metadata-store/types/FlatViewField';
import { type FlatViewFieldGroup } from '@/metadata-store/types/FlatViewFieldGroup';
import { useStore } from 'jotai';
import { useCallback } from 'react';
import { isDefined } from 'twenty-shared/utils';
import { v4 as uuidv4 } from 'uuid';
export type CloneViewResult = {
newViewId: string;
copiedViewFieldGroups: FlatViewFieldGroup[];
copiedViewFields: FlatViewField[];
};
export const useCloneViewInMetadataStore = () => {
const store = useStore();
const { addToDraft, applyChanges } = useUpdateMetadataStoreDraft();
const cloneView = useCallback(
(sourceViewId: string): CloneViewResult | null => {
const flatViews = store.get(metadataStoreState.atomFamily('views'))
.current as FlatView[];
const allFlatViewFields = store.get(
metadataStoreState.atomFamily('viewFields'),
).current as FlatViewField[];
const allFlatViewFieldGroups = store.get(
metadataStoreState.atomFamily('viewFieldGroups'),
).current as FlatViewFieldGroup[];
const sourceView = flatViews.find((view) => view.id === sourceViewId);
if (!isDefined(sourceView)) {
return null;
}
const sourceViewFields = allFlatViewFields.filter(
(field) => field.viewId === sourceViewId && field.isActive,
);
const sourceViewFieldGroups = allFlatViewFieldGroups.filter(
(group) => group.viewId === sourceViewId && group.isActive,
);
const newViewId = uuidv4();
const oldGroupIdToNewGroupId = new Map<string, string>();
for (const group of sourceViewFieldGroups) {
oldGroupIdToNewGroupId.set(group.id, uuidv4());
}
const copiedView: FlatView = {
...sourceView,
id: newViewId,
};
const copiedViewFieldGroups: FlatViewFieldGroup[] =
sourceViewFieldGroups.map((group) => ({
...group,
id: oldGroupIdToNewGroupId.get(group.id) ?? uuidv4(),
viewId: newViewId,
}));
const copiedViewFields: FlatViewField[] = sourceViewFields.map(
(field) => ({
...field,
id: uuidv4(),
viewId: newViewId,
viewFieldGroupId: isDefined(field.viewFieldGroupId)
? (oldGroupIdToNewGroupId.get(field.viewFieldGroupId) ?? null)
: field.viewFieldGroupId,
}),
);
addToDraft({ key: 'views', items: [copiedView] });
applyChanges();
return { newViewId, copiedViewFieldGroups, copiedViewFields };
},
[addToDraft, applyChanges, store],
);
return { cloneView };
};
@@ -0,0 +1,168 @@
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
import { useCloneViewInMetadataStore } from '@/page-layout/hooks/useCloneViewInMetadataStore';
import { fieldsWidgetEditorModeDraftComponentState } from '@/page-layout/states/fieldsWidgetEditorModeDraftComponentState';
import { fieldsWidgetGroupsDraftComponentState } from '@/page-layout/states/fieldsWidgetGroupsDraftComponentState';
import { fieldsWidgetUngroupedFieldsDraftComponentState } from '@/page-layout/states/fieldsWidgetUngroupedFieldsDraftComponentState';
import { pageLayoutDraftComponentState } from '@/page-layout/states/pageLayoutDraftComponentState';
import { type PageLayoutWidget } from '@/page-layout/types/PageLayoutWidget';
import { buildFieldsWidgetGroupsFromFlatViewData } from '@/page-layout/utils/buildFieldsWidgetGroupsFromFlatViewData';
import { getWidgetConfigurationViewId } from '@/page-layout/utils/getWidgetConfigurationViewId';
import { type FieldsWidgetEditorMode } from '@/page-layout/widgets/fields/types/FieldsWidgetEditorMode';
import {
type FieldsWidgetGroup,
type FieldsWidgetGroupField,
} from '@/page-layout/widgets/fields/types/FieldsWidgetGroup';
import { useAtomComponentStateCallbackState } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateCallbackState';
import { useStore } from 'jotai';
import { useCallback } from 'react';
import { isDefined } from 'twenty-shared/utils';
import { v4 as uuidv4 } from 'uuid';
import { WidgetType } from '~/generated-metadata/graphql';
type DuplicateFieldsWidgetParams = {
sourceWidget: PageLayoutWidget;
newWidgetId: string;
};
type DuplicateFieldsWidgetResult = {
newViewId: string;
};
const stripViewFieldId = (
field: FieldsWidgetGroupField,
): FieldsWidgetGroupField => {
const { viewFieldId: _omit, ...rest } = field;
return rest;
};
export const useDuplicateFieldsWidgetForPageLayout = ({
pageLayoutId,
}: {
pageLayoutId: string;
}) => {
const store = useStore();
const { cloneView } = useCloneViewInMetadataStore();
const pageLayoutDraftState = useAtomComponentStateCallbackState(
pageLayoutDraftComponentState,
pageLayoutId,
);
const fieldsWidgetGroupsDraftState = useAtomComponentStateCallbackState(
fieldsWidgetGroupsDraftComponentState,
pageLayoutId,
);
const fieldsWidgetUngroupedFieldsDraftState =
useAtomComponentStateCallbackState(
fieldsWidgetUngroupedFieldsDraftComponentState,
pageLayoutId,
);
const fieldsWidgetEditorModeDraftState = useAtomComponentStateCallbackState(
fieldsWidgetEditorModeDraftComponentState,
pageLayoutId,
);
const duplicateFieldsWidget = useCallback(
({
sourceWidget,
newWidgetId,
}: DuplicateFieldsWidgetParams): DuplicateFieldsWidgetResult | null => {
if (sourceWidget.type !== WidgetType.FIELDS) {
return null;
}
const sourceViewId = getWidgetConfigurationViewId(
sourceWidget.configuration,
);
if (!isDefined(sourceViewId)) {
return null;
}
const copyResult = cloneView(sourceViewId);
if (!isDefined(copyResult)) {
return null;
}
const sourceGroups = store.get(fieldsWidgetGroupsDraftState)[
sourceWidget.id
];
const sourceUngroupedFields = store.get(
fieldsWidgetUngroupedFieldsDraftState,
)[sourceWidget.id];
const sourceEditorMode = store.get(fieldsWidgetEditorModeDraftState)[
sourceWidget.id
];
let newGroups: FieldsWidgetGroup[] = [];
let newUngroupedFields: FieldsWidgetGroupField[] = [];
let newEditorMode: FieldsWidgetEditorMode;
if (isDefined(sourceEditorMode)) {
newEditorMode = sourceEditorMode;
if (newEditorMode === 'grouped') {
newGroups = (sourceGroups ?? []).map((group) => ({
...group,
id: uuidv4(),
fields: group.fields.map(stripViewFieldId),
}));
} else {
newUngroupedFields = (sourceUngroupedFields ?? []).map(
stripViewFieldId,
);
}
} else {
const pageLayoutDraft = store.get(pageLayoutDraftState);
const objectMetadataId = pageLayoutDraft.objectMetadataId;
const objectMetadataItems = store.get(objectMetadataItemsSelector.atom);
const fieldMetadataItems = isDefined(objectMetadataId)
? (objectMetadataItems.find((item) => item.id === objectMetadataId)
?.fields ?? [])
: [];
const built = buildFieldsWidgetGroupsFromFlatViewData({
flatViewFieldGroups: copyResult.copiedViewFieldGroups,
flatViewFields: copyResult.copiedViewFields,
fieldMetadataItems,
});
newEditorMode = built.editorMode;
newGroups = built.groups;
newUngroupedFields = built.ungroupedFields;
}
store.set(fieldsWidgetGroupsDraftState, (prev) => ({
...prev,
[newWidgetId]: newGroups,
}));
store.set(fieldsWidgetUngroupedFieldsDraftState, (prev) => ({
...prev,
[newWidgetId]: newUngroupedFields,
}));
store.set(fieldsWidgetEditorModeDraftState, (prev) => ({
...prev,
[newWidgetId]: newEditorMode,
}));
return { newViewId: copyResult.newViewId };
},
[
cloneView,
fieldsWidgetEditorModeDraftState,
fieldsWidgetGroupsDraftState,
fieldsWidgetUngroupedFieldsDraftState,
pageLayoutDraftState,
store,
],
);
return { duplicateFieldsWidget };
};
@@ -1,8 +1,10 @@
import { useDuplicateFieldsWidgetForPageLayout } from '@/page-layout/hooks/useDuplicateFieldsWidgetForPageLayout';
import { PageLayoutComponentInstanceContext } from '@/page-layout/states/contexts/PageLayoutComponentInstanceContext';
import { pageLayoutCurrentLayoutsComponentState } from '@/page-layout/states/pageLayoutCurrentLayoutsComponentState';
import { pageLayoutDraftComponentState } from '@/page-layout/states/pageLayoutDraftComponentState';
import { pageLayoutTabSettingsOpenTabIdComponentState } from '@/page-layout/states/pageLayoutTabSettingsOpenTabIdComponentState';
import { type PageLayoutTab } from '@/page-layout/types/PageLayoutTab';
import { type PageLayoutWidget } from '@/page-layout/types/PageLayoutWidget';
import { generateDuplicatedTimestamps } from '@/page-layout/utils/generateDuplicatedTimestamps';
import { sortTabsByPosition } from '@/page-layout/utils/sortTabsByPosition';
import { useSidePanelMenu } from '@/side-panel/hooks/useSidePanelMenu';
@@ -56,13 +58,19 @@ export const useDuplicatePageLayoutTab = ({
const { closeSidePanelMenu } = useSidePanelMenu();
const { duplicateFieldsWidget } = useDuplicateFieldsWidgetForPageLayout({
pageLayoutId,
});
const duplicateTab = useCallback(
(tabId: string): string => {
const currentPageLayoutDraft = store.get(pageLayoutDraft);
const allTabLayouts = store.get(pageLayoutCurrentLayouts);
const sourceTab = currentPageLayoutDraft.tabs.find((t) => t.id === tabId);
const sourceTab = currentPageLayoutDraft.tabs.find(
(tab) => tab.id === tabId,
);
if (!isDefined(sourceTab)) {
throw new Error(`Tab with id ${tabId} not found`);
@@ -71,17 +79,32 @@ export const useDuplicatePageLayoutTab = ({
const newTabId = uuidv4();
const widgetOldIdNewIdMap = new Map<string, string>();
const clonedWidgets = sourceTab.widgets.map((widget) => {
const newWidgetId = uuidv4();
widgetOldIdNewIdMap.set(widget.id, newWidgetId);
const clonedWidgets: PageLayoutWidget[] = sourceTab.widgets.map(
(widget) => {
const newWidgetId = uuidv4();
widgetOldIdNewIdMap.set(widget.id, newWidgetId);
return {
...widget,
id: newWidgetId,
pageLayoutTabId: newTabId,
...generateDuplicatedTimestamps(),
};
});
const fieldsWidgetCopyResult = duplicateFieldsWidget({
sourceWidget: widget,
newWidgetId,
});
const clonedConfiguration = isDefined(fieldsWidgetCopyResult)
? {
...widget.configuration,
viewId: fieldsWidgetCopyResult.newViewId,
}
: widget.configuration;
return {
...widget,
id: newWidgetId,
pageLayoutTabId: newTabId,
configuration: clonedConfiguration,
...generateDuplicatedTimestamps(),
};
},
);
const sortedTabs = sortTabsByPosition(currentPageLayoutDraft.tabs);
const sourceIndex = sortedTabs.findIndex((t) => t.id === tabId);
@@ -144,6 +167,7 @@ export const useDuplicatePageLayoutTab = ({
},
[
closeSidePanelMenu,
duplicateFieldsWidget,
navigatePageLayoutSidePanel,
pageLayoutCurrentLayouts,
pageLayoutDraft,
@@ -1,3 +1,4 @@
import { useDuplicateFieldsWidgetForPageLayout } from '@/page-layout/hooks/useDuplicateFieldsWidgetForPageLayout';
import { PageLayoutComponentInstanceContext } from '@/page-layout/states/contexts/PageLayoutComponentInstanceContext';
import { pageLayoutCurrentLayoutsComponentState } from '@/page-layout/states/pageLayoutCurrentLayoutsComponentState';
import { pageLayoutDraftComponentState } from '@/page-layout/states/pageLayoutDraftComponentState';
@@ -45,6 +46,10 @@ export const useDuplicatePageLayoutWidget = (
const store = useStore();
const { duplicateFieldsWidget } = useDuplicateFieldsWidgetForPageLayout({
pageLayoutId,
});
const duplicateWidget = useCallback(
(widgetId: string): string => {
const pageLayoutDraft = store.get(pageLayoutDraftState);
@@ -71,10 +76,23 @@ export const useDuplicatePageLayoutWidget = (
const newWidgetId = uuidv4();
const fieldsWidgetCopyResult = duplicateFieldsWidget({
sourceWidget,
newWidgetId,
});
const clonedConfiguration = isDefined(fieldsWidgetCopyResult)
? {
...sourceWidget.configuration,
viewId: fieldsWidgetCopyResult.newViewId,
}
: sourceWidget.configuration;
const clonedWidget: PageLayoutWidget = {
...sourceWidget,
id: newWidgetId,
title: appendCopySuffix(sourceWidget.title),
configuration: clonedConfiguration,
...generateDuplicatedTimestamps(),
};
@@ -137,6 +155,7 @@ export const useDuplicatePageLayoutWidget = (
return newWidgetId;
},
[
duplicateFieldsWidget,
pageLayoutCurrentLayoutsState,
pageLayoutDraftState,
setPageLayoutEditingWidgetId,
@@ -1,15 +1,48 @@
import { usePageLayoutContentContext } from '@/page-layout/contexts/PageLayoutContentContext';
import { pageLayoutEditingWidgetIdComponentState } from '@/page-layout/states/pageLayoutEditingWidgetIdComponentState';
import { widgetCreationTargetTabIdComponentState } from '@/page-layout/states/widgetCreationTargetTabIdComponentState';
import { widgetInsertionContextComponentState } from '@/page-layout/states/widgetInsertionContextComponentState';
import { useNavigatePageLayoutSidePanel } from '@/side-panel/pages/page-layout/hooks/useNavigatePageLayoutSidePanel';
import { useAtomComponentStateCallbackState } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateCallbackState';
import { useStore } from 'jotai';
import { useCallback } from 'react';
import { SidePanelPages } from 'twenty-shared/types';
export const useNavigateToMoreWidgets = () => {
const { tabId } = usePageLayoutContentContext();
const { navigatePageLayoutSidePanel } = useNavigatePageLayoutSidePanel();
const pageLayoutEditingWidgetIdState = useAtomComponentStateCallbackState(
pageLayoutEditingWidgetIdComponentState,
);
const widgetCreationTargetTabIdState = useAtomComponentStateCallbackState(
widgetCreationTargetTabIdComponentState,
);
const widgetInsertionContextState = useAtomComponentStateCallbackState(
widgetInsertionContextComponentState,
);
const store = useStore();
const navigateToMoreWidgets = useCallback(() => {
store.set(pageLayoutEditingWidgetIdState, null);
store.set(widgetInsertionContextState, null);
store.set(widgetCreationTargetTabIdState, tabId);
navigatePageLayoutSidePanel({
sidePanelPage: SidePanelPages.PageLayoutRecordPageWidgetTypeSelect,
});
}, [navigatePageLayoutSidePanel]);
}, [
navigatePageLayoutSidePanel,
pageLayoutEditingWidgetIdState,
store,
tabId,
widgetCreationTargetTabIdState,
widgetInsertionContextState,
]);
return { navigateToMoreWidgets };
};
@@ -7,10 +7,12 @@ import { type PageLayoutAddTabStrategy } from '@/page-layout/types/PageLayoutAdd
import { isReactivatableTab } from '@/page-layout/utils/isReactivatableTab';
import { shouldEnableTabEditingFeatures } from '@/page-layout/utils/shouldEnableTabEditingFeatures';
import { useNavigatePageLayoutSidePanel } from '@/side-panel/pages/page-layout/hooks/useNavigatePageLayoutSidePanel';
import { useLayoutRenderingContext } from '@/ui/layout/contexts/LayoutRenderingContext';
import { useSetAtomComponentState } from '@/ui/utilities/state/jotai/hooks/useSetAtomComponentState';
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
import { t } from '@lingui/core/macro';
import { useCallback } from 'react';
import { useNavigate } from 'react-router-dom';
import { SidePanelPages } from 'twenty-shared/types';
import { FeatureFlagKey, PageLayoutType } from '~/generated-metadata/graphql';
@@ -40,8 +42,17 @@ export const usePageLayoutAddTabStrategy = ({
const { navigatePageLayoutSidePanel } = useNavigatePageLayoutSidePanel();
const { isInSidePanel } = useLayoutRenderingContext();
const navigate = useNavigate();
const onCreate = useCallback(() => {
const newTabId = createPageLayoutTab(t`Untitled`);
if (!isInSidePanel) {
navigate(`#${newTabId}`);
}
setPageLayoutTabSettingsOpenTabId(newTabId);
navigatePageLayoutSidePanel({
sidePanelPage: SidePanelPages.PageLayoutTabSettings,
@@ -49,6 +60,8 @@ export const usePageLayoutAddTabStrategy = ({
});
}, [
createPageLayoutTab,
isInSidePanel,
navigate,
setPageLayoutTabSettingsOpenTabId,
navigatePageLayoutSidePanel,
]);

Some files were not shown because too many files have changed in this diff Show More