Compare commits

..
Author SHA1 Message Date
Sonarly Claude CodeandClaude Opus 4.6 4d30170daa Fix ApolloError NetworkError after failed token renewal on /welcome page
When token renewal fails (e.g., no refresh token available), the operation
was still being forwarded via fromPromise().flatMap(() => forward(operation)),
causing retried requests without valid tokens. These requests would fail with
NetworkError, get retried by RetryLink, and eventually bubble up as unhandled
ApolloErrors to Sentry.

Now we check if a valid token pair exists after the renewal attempt before
forwarding the operation. If no tokens are available (renewal failed), we
return an empty Observable to silently drop the operation since the user has
already been redirected to the sign-in page.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 00:22:49 +00:00
Charles BochetandGitHub 36c2b0e23b Migrate dropdown to jotai (#18063)
Here we go again
2026-02-19 00:58:26 +01:00
66deb8be63 i18n - docs translations (#18062)
Created by Github action

Co-authored-by: github-actions <github-actions@twenty.com>
2026-02-18 23:34:46 +01:00
Charles BochetandGitHub 01d2269bd0 Fix website build (#18061)
As per title
2026-02-18 23:34:36 +01:00
04502e5abb Messages Message Folder Association (#17398)
This PR adds Message folder association for message channel messages,
Currently under testing phase, not ready yet.

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 23:13:47 +01:00
Charles BochetandGitHub 549c7a613b Fix website build (#18057) 2026-02-18 22:40:54 +01:00
743b733e70 i18n - translations (#18056)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2026-02-18 22:40:10 +01:00
Thomas des FrancsGitHubclaude[bot] <41898282+claude[bot]@users.noreply.github.com>Charles BochetCharles Bochet
612f7c37a5 Improve security settings card grouping and description overflow (#17928)
# After

- Added a separtor between the two audit logs cards
- Rename the audit log card to avoid repetition
- Grouped "Invite by link" and "2 factor auth" in one group
- Changed the card component description to always be one line max with
truncation & tooltips

<img width="777" height="1278" alt="CleanShot 2026-02-13 at 17 02 36"
src="https://github.com/user-attachments/assets/685c792a-c85b-4521-8c1b-bd9adedc75d9"
/>

<img width="976" height="690"
alt="b49f2eb043b6712d013618bb0a4ef7f011cf2316e1163fbdee4c293bed036ac9"
src="https://github.com/user-attachments/assets/6e17aa11-ecdb-4f98-ba50-5cd9b9c5def6"
/>

---------

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Charles Bochet <charlesBochet@users.noreply.github.com>
Co-authored-by: Charles Bochet <charles@twenty.com>
2026-02-18 22:33:37 +01:00
42108e0611 i18n - translations (#18053)
Created by Github action

---------

Co-authored-by: github-actions <github-actions@twenty.com>
2026-02-18 22:20:32 +01:00
Charles BochetandGitHub 9a2dc45eb7 Fix website build (#18052) 2026-02-18 22:15:30 +01:00
neo773andGitHub 7de565f70c Prevent SSRF via IMAP/SMTP/CalDAV (#17973)
Prevents leaking of internal services by filtering out private IPs, same
way we do for webhooks
2026-02-18 22:15:10 +01:00
Félix MalfaitGitHubCursorclaude[bot] <41898282+claude[bot]@users.noreply.github.com>
67074a7581 Harden server-side input validation and auth defaults (#18018)
## Summary

- **File storage (LocalDriver):** Add realpath resolution and symlink
rejection to `writeFile`, `downloadFile`, and `downloadFolder` — brings
them in line with the existing `readFile` protections. Includes unit
tests.
- **JWT:** Pin signing/verification to HS256 explicitly.
- **Auth:** Revoke active refresh tokens when a user changes their
password.
- **Logic functions:** Validate `handlerName` as a safe JS identifier at
both DTO and runtime level, preventing injection into the generated
runner script.
- **User entity:** Remove `passwordHash` from the GraphQL schema
(`@Field` decorator removed, column stays).
- **Query params:** Use `crypto.randomBytes` instead of `Math.random`
for SQL parameter name generation.
- **Exception filter:** Mirror the request `Origin` header instead of
sending `Access-Control-Allow-Origin: *`.

## Test plan

- [x] `local.driver.spec.ts` — writeFile rejects symlinks, downloadFile
rejects paths outside storage
- [ ] Verify JWT auth flow still works (login, token refresh)
- [ ] Verify password change invalidates existing sessions
- [ ] Verify logic function creation with valid/invalid handler names
- [ ] Verify file upload/download in dev environment


Made with [Cursor](https://cursor.com)

---------

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
2026-02-18 21:41:01 +01:00
Charles BochetandGitHub 330737aa2e Fix impossible scroll in sdk app:dev (#18051)
Issue is that we are refreshing the terminal because of icons animations
2026-02-18 21:39:21 +01:00
272 changed files with 3560 additions and 1973 deletions
+2
View File
@@ -28,6 +28,8 @@ npx jest path/to/test.test.ts --config=packages/PROJECT/jest.config.mjs
npx nx test twenty-front # Frontend unit tests
npx nx test twenty-server # Backend unit tests
npx nx run twenty-server:test:integration:with-db-reset # Integration tests with DB reset
# To run an indivual test or a pattern of tests, use the following command:
cd packages/{workspace} && npx jest "pattern or filename"
# Storybook
npx nx storybook:build twenty-front
@@ -27,31 +27,31 @@ Le app ti consentono di creare e gestire le personalizzazioni di Twenty **come c
Crea una nuova app utilizzando lo scaffolder ufficiale, quindi autenticati e inizia a sviluppare:
```bash filename="Terminal"
# Scaffold a new app (includes all examples by default)
# Crea lo scaffold di una nuova app (include tutti gli esempi per impostazione predefinita)
npx create-twenty-app@latest my-twenty-app
cd my-twenty-app
# If you don't use yarn@4
# Se non usi yarn@4
corepack enable
yarn install
# Authenticate using your API key (you'll be prompted)
# Autenticati usando la tua API key (ti verrà richiesto)
yarn twenty auth:login
# Start dev mode: automatically syncs local changes to your workspace
# Avvia la modalità di sviluppo: sincronizza automaticamente le modifiche locali con il tuo workspace
yarn twenty app:dev
```
The scaffolder supports three modes for controlling which example files are included:
Lo strumento di scaffolding supporta tre modalità per controllare quali file di esempio vengono inclusi:
```bash filename="Terminal"
# Default (exhaustive): all examples (object, field, logic function, front component, view, navigation menu item)
# Predefinita (esaustiva): tutti gli esempi (oggetto, campo, funzione logica, componente front-end, vista, voce del menu di navigazione)
npx create-twenty-app@latest my-app
# Minimal: only core files (application-config.ts and default-role.ts)
# Minimale: solo i file principali (application-config.ts e default-role.ts)
npx create-twenty-app@latest my-app --minimal
# Interactive: select which examples to include
# Interattiva: seleziona quali esempi includere
npx create-twenty-app@latest my-app --interactive
```
@@ -86,9 +86,9 @@ Quando esegui `npx create-twenty-app@latest my-twenty-app`, lo scaffolder:
* Copia un'applicazione base minimale in `my-twenty-app/`
* Aggiunge una dipendenza locale `twenty-sdk` e la configurazione di Yarn 4
* Crea file di configurazione e script collegati alla CLI `twenty`
* Generates core files (application config, default function role, post-install function) plus example files based on the scaffolding mode
* Genera i file principali (configurazione dell'applicazione, ruolo predefinito per le funzioni logiche, funzione di post-installazione) più i file di esempio in base alla modalità di scaffolding
A freshly scaffolded app with the default `--exhaustive` mode looks like this:
Un'app appena creata con la modalità predefinita `--exhaustive` si presenta così:
```text filename="my-twenty-app/"
my-twenty-app/
@@ -102,27 +102,27 @@ my-twenty-app/
eslint.config.mjs
tsconfig.json
README.md
public/ # Public assets folder (images, fonts, etc.)
public/ # Cartella delle risorse pubbliche (immagini, font, ecc.)
src/
├── application-config.ts # Required - main application configuration
├── application-config.ts # Obbligatorio - configurazione principale dell'applicazione
├── roles/
│ └── default-role.ts # Default role for logic functions
│ └── default-role.ts # Ruolo predefinito per le funzioni logiche
├── objects/
│ └── example-object.ts # Example custom object definition
│ └── example-object.ts # Definizione di oggetto personalizzato di esempio
├── fields/
│ └── example-field.ts # Example standalone field definition
│ └── example-field.ts # Definizione di campo autonomo di esempio
├── logic-functions/
│ ├── hello-world.ts # Example logic function
│ └── post-install.ts # Post-install logic function
│ ├── hello-world.ts # Funzione logica di esempio
│ └── post-install.ts # Funzione logica post-installazione
├── front-components/
│ └── hello-world.tsx # Example front component
│ └── hello-world.tsx # Componente front-end di esempio
├── views/
│ └── example-view.ts # Example saved view definition
│ └── example-view.ts # Definizione di vista salvata di esempio
└── navigation-menu-items/
└── example-navigation-menu-item.ts # Example sidebar navigation link
└── example-navigation-menu-item.ts # Link di navigazione della barra laterale di esempio
```
With `--minimal`, only the core files are created (`application-config.ts`, `roles/default-role.ts`, and `logic-functions/post-install.ts`). With `--interactive`, you choose which example files to include.
Con `--minimal`, vengono creati solo i file principali (`application-config.ts`, `roles/default-role.ts` e `logic-functions/post-install.ts`). Con `--interactive`, scegli quali file di esempio includere.
A livello generale:
@@ -139,15 +139,15 @@ A livello generale:
L'SDK rileva le entità analizzando i tuoi file TypeScript alla ricerca di chiamate **`export default define<Entity>({...})`**. Ogni tipo di entità ha una corrispondente funzione helper esportata da `twenty-sdk`:
| Funzione helper | Tipo di entità |
| ---------------------------- | ----------------------------------------- |
| `defineObject()` | Definizioni di oggetti personalizzati |
| `defineLogicFunction()` | Definizioni di funzioni logiche |
| `defineFrontComponent()` | Definizioni dei componenti front-end |
| `defineRole()` | Definizioni di ruoli |
| `defineField()` | Estensioni di campo per oggetti esistenti |
| `defineView()` | Saved view definitions |
| `defineNavigationMenuItem()` | Navigation menu item definitions |
| Funzione helper | Tipo di entità |
| ---------------------------- | ---------------------------------------------- |
| `defineObject()` | Definizioni di oggetti personalizzati |
| `defineLogicFunction()` | Definizioni di funzioni logiche |
| `defineFrontComponent()` | Definizioni dei componenti front-end |
| `defineRole()` | Definizioni di ruoli |
| `defineField()` | Estensioni di campo per oggetti esistenti |
| `defineView()` | Definizioni di viste salvate |
| `defineNavigationMenuItem()` | Definizioni delle voci del menu di navigazione |
<Note>
**La denominazione dei file è flessibile.** Il rilevamento delle entità è basato sull'AST — l'SDK esegue la scansione dei file sorgente alla ricerca del pattern `export default define<Entity>({...})`. Puoi organizzare file e cartelle come preferisci. Raggruppare per tipo di entità (ad es., `logic-functions/`, `roles/`) è solo una convenzione per l'organizzazione del codice, non un requisito.
@@ -220,8 +220,8 @@ L'SDK fornisce funzioni helper per definire le entità della tua app. Come descr
| `defineFrontComponent()` | Definisci componenti front-end per un'interfaccia utente personalizzata |
| `defineRole()` | Configura i permessi dei ruoli e l'accesso agli oggetti |
| `defineField()` | Estendi gli oggetti esistenti con campi aggiuntivi |
| `defineView()` | Define saved views for objects |
| `defineNavigationMenuItem()` | Define sidebar navigation links |
| `defineView()` | Definisce viste salvate per gli oggetti |
| `defineNavigationMenuItem()` | Definisce i link di navigazione della barra laterale |
Queste funzioni convalidano la configurazione in fase di build e offrono il completamento automatico nell'IDE e la sicurezza dei tipi.
@@ -497,7 +497,7 @@ Note:
Una funzione post-installazione è una funzione logica che viene eseguita automaticamente dopo che la tua app è stata installata in uno spazio di lavoro. Questo è utile per attività di configurazione una tantum come il popolamento di dati predefiniti, la creazione di record iniziali o la configurazione delle impostazioni dello spazio di lavoro.
When you scaffold a new app with `create-twenty-app`, a post-install function is generated for you at `src/logic-functions/post-install.ts`:
Quando esegui lo scaffolding di una nuova app con `create-twenty-app`, viene generata automaticamente una funzione di post-installazione in `src/logic-functions/post-install.ts`:
```typescript
// src/logic-functions/post-install.ts
@@ -518,7 +518,7 @@ export default defineLogicFunction({
});
```
The function is wired into your app by referencing its universal identifier in `application-config.ts`:
La funzione viene collegata alla tua app facendo riferimento al suo identificatore universale in `application-config.ts`:
```typescript
import { POST_INSTALL_UNIVERSAL_IDENTIFIER } from 'src/logic-functions/post-install';
@@ -529,7 +529,7 @@ export default defineApplication({
});
```
You can also manually execute the post-install function at any time using the CLI:
Puoi anche eseguire manualmente la funzione di post-installazione in qualsiasi momento utilizzando la CLI:
```bash filename="Terminal"
yarn twenty function:execute --postInstall
@@ -537,10 +537,10 @@ yarn twenty function:execute --postInstall
Punti chiave:
* Post-install functions are standard logic functions — they use `defineLogicFunction()` like any other function.
* The `postInstallLogicFunctionUniversalIdentifier` field in `defineApplication()` is optional. If omitted, no function runs after installation.
* The default timeout is set to 300 seconds (5 minutes) to allow for longer setup tasks like data seeding.
* Post-install functions do not need triggersthey are invoked by the platform during installation or manually via `function:execute --postInstall`.
* Le funzioni di post-installazione sono funzioni logiche standard — usano `defineLogicFunction()` come qualsiasi altra funzione.
* Il campo `postInstallLogicFunctionUniversalIdentifier` in `defineApplication()` è facoltativo. Se omesso, nessuna funzione viene eseguita dopo l'installazione.
* Il timeout predefinito è impostato a 300 secondi (5 minuti) per consentire attività di configurazione più lunghe, come il popolamento dei dati.
* Le funzioni di post-installazione non necessitano di trigger — vengono invocate dalla piattaforma durante l'installazione o manualmente tramite `function:execute --postInstall`.
### Payload del trigger di route
@@ -27,31 +27,31 @@ Os aplicativos permitem criar e gerenciar personalizações do Twenty **como có
Crie um novo aplicativo usando o gerador oficial, depois autentique-se e comece a desenvolver:
```bash filename="Terminal"
# Scaffold a new app (includes all examples by default)
# Criar a estrutura de um novo app (inclui todos os exemplos por padrão)
npx create-twenty-app@latest my-twenty-app
cd my-twenty-app
# If you don't use yarn@4
# Se você não usa yarn@4
corepack enable
yarn install
# Authenticate using your API key (you'll be prompted)
# Autentique-se usando sua chave de API (você será solicitado)
yarn twenty auth:login
# Start dev mode: automatically syncs local changes to your workspace
# Iniciar modo de desenvolvimento: sincroniza automaticamente as alterações locais com seu workspace
yarn twenty app:dev
```
The scaffolder supports three modes for controlling which example files are included:
O gerador de estrutura oferece suporte a três modos para controlar quais arquivos de exemplo são incluídos:
```bash filename="Terminal"
# Default (exhaustive): all examples (object, field, logic function, front component, view, navigation menu item)
# Padrão (exhaustivo): todos os exemplos (objeto, campo, função de lógica, componente de front-end, visualização, item do menu de navegação)
npx create-twenty-app@latest my-app
# Minimal: only core files (application-config.ts and default-role.ts)
# Mínimo: apenas arquivos principais (application-config.ts e default-role.ts)
npx create-twenty-app@latest my-app --minimal
# Interactive: select which examples to include
# Interativo: selecione quais exemplos incluir
npx create-twenty-app@latest my-app --interactive
```
@@ -86,9 +86,9 @@ Ao executar `npx create-twenty-app@latest my-twenty-app`, o gerador:
* Copia um aplicativo base mínimo para `my-twenty-app/`
* Adiciona uma dependência local `twenty-sdk` e a configuração do Yarn 4
* Cria arquivos de configuração e scripts conectados à CLI `twenty`
* Generates core files (application config, default function role, post-install function) plus example files based on the scaffolding mode
* Gera arquivos principais (configuração da aplicação, papel padrão para funções de lógica, função de pós-instalação) além de arquivos de exemplo com base no modo de geração de estrutura
A freshly scaffolded app with the default `--exhaustive` mode looks like this:
Um app recém-criado com o modo padrão `--exhaustive` fica assim:
```text filename="my-twenty-app/"
my-twenty-app/
@@ -102,27 +102,27 @@ my-twenty-app/
eslint.config.mjs
tsconfig.json
README.md
public/ # Public assets folder (images, fonts, etc.)
public/ # Pasta de recursos públicos (imagens, fontes, etc.)
src/
├── application-config.ts # Required - main application configuration
├── application-config.ts # Obrigatório - configuração principal da aplicação
├── roles/
│ └── default-role.ts # Default role for logic functions
│ └── default-role.ts # Papel padrão para funções de lógica
├── objects/
│ └── example-object.ts # Example custom object definition
│ └── example-object.ts # Exemplo de definição de objeto personalizado
├── fields/
│ └── example-field.ts # Example standalone field definition
│ └── example-field.ts # Exemplo de definição de campo independente
├── logic-functions/
│ ├── hello-world.ts # Example logic function
│ └── post-install.ts # Post-install logic function
│ ├── hello-world.ts # Exemplo de função de lógica
│ └── post-install.ts # Função de lógica de pós-instalação
├── front-components/
│ └── hello-world.tsx # Example front component
│ └── hello-world.tsx # Exemplo de componente de front-end
├── views/
│ └── example-view.ts # Example saved view definition
│ └── example-view.ts # Exemplo de definição de visualização salva
└── navigation-menu-items/
└── example-navigation-menu-item.ts # Example sidebar navigation link
└── example-navigation-menu-item.ts # Exemplo de link de navegação da barra lateral
```
With `--minimal`, only the core files are created (`application-config.ts`, `roles/default-role.ts`, and `logic-functions/post-install.ts`). With `--interactive`, you choose which example files to include.
Com `--minimal`, apenas os arquivos principais são criados (`application-config.ts`, `roles/default-role.ts` e `logic-functions/post-install.ts`). Com `--interactive`, você escolhe quais arquivos de exemplo incluir.
Em alto nível:
@@ -146,8 +146,8 @@ O SDK detecta entidades analisando seus arquivos TypeScript em busca de chamadas
| `defineFrontComponent()` | Definições de componentes de front-end |
| `defineRole()` | Definições de papéis |
| `defineField()` | Extensões de campos para objetos existentes |
| `defineView()` | Saved view definitions |
| `defineNavigationMenuItem()` | Navigation menu item definitions |
| `defineView()` | Definições de visualizações salvas |
| `defineNavigationMenuItem()` | Definições de itens do menu de navegação |
<Note>
**A nomeação de arquivos é flexível.** A detecção de entidades é baseada em AST — o SDK varre seus arquivos fonte em busca do padrão `export default define<Entity>({...})`. Você pode organizar seus arquivos e pastas como quiser. Agrupar por tipo de entidade (por exemplo, `logic-functions/`, `roles/`) é apenas uma convenção para organização do código, não um requisito.
@@ -220,8 +220,8 @@ O SDK fornece funções utilitárias para definir as entidades do seu app. Confo
| `defineFrontComponent()` | Definir componentes de front-end para UI personalizada |
| `defineRole()` | Configura permissões de papéis e acesso a objetos |
| `defineField()` | Estender objetos existentes com campos adicionais |
| `defineView()` | Define saved views for objects |
| `defineNavigationMenuItem()` | Define sidebar navigation links |
| `defineView()` | Define visualizações salvas para objetos |
| `defineNavigationMenuItem()` | Define links de navegação da barra lateral |
Essas funções validam sua configuração em tempo de compilação e oferecem autocompletar na IDE e segurança de tipos.
@@ -497,7 +497,7 @@ Notas:
Uma função de pós-instalação é uma função de lógica que é executada automaticamente após a sua aplicação ser instalada em um espaço de trabalho. Isso é útil para tarefas de configuração únicas, como preencher dados padrão, criar registros iniciais ou configurar as configurações do espaço de trabalho.
When you scaffold a new app with `create-twenty-app`, a post-install function is generated for you at `src/logic-functions/post-install.ts`:
Ao criar a estrutura de um novo app com `create-twenty-app`, uma função de pós-instalação é gerada para você em `src/logic-functions/post-install.ts`:
```typescript
// src/logic-functions/post-install.ts
@@ -518,7 +518,7 @@ export default defineLogicFunction({
});
```
The function is wired into your app by referencing its universal identifier in `application-config.ts`:
A função é conectada ao seu app referenciando seu identificador universal em `application-config.ts`:
```typescript
import { POST_INSTALL_UNIVERSAL_IDENTIFIER } from 'src/logic-functions/post-install';
@@ -529,7 +529,7 @@ export default defineApplication({
});
```
You can also manually execute the post-install function at any time using the CLI:
Você também pode executar manualmente a função de pós-instalação a qualquer momento usando a CLI:
```bash filename="Terminal"
yarn twenty function:execute --postInstall
@@ -537,10 +537,10 @@ yarn twenty function:execute --postInstall
Pontos-chave:
* Post-install functions are standard logic functions — they use `defineLogicFunction()` like any other function.
* The `postInstallLogicFunctionUniversalIdentifier` field in `defineApplication()` is optional. If omitted, no function runs after installation.
* The default timeout is set to 300 seconds (5 minutes) to allow for longer setup tasks like data seeding.
* Post-install functions do not need triggers — they are invoked by the platform during installation or manually via `function:execute --postInstall`.
* As funções de pós-instalação são funções de lógica padrão — elas usam `defineLogicFunction()` como qualquer outra função.
* O campo `postInstallLogicFunctionUniversalIdentifier` em `defineApplication()` é opcional. Se omitido, nenhuma função é executada após a instalação.
* O tempo limite padrão é definido como 300 segundos (5 minutos) para permitir tarefas de configuração mais longas, como o pré-carregamento de dados.
* As funções de pós-instalação não precisam de gatilhos — elas são invocadas pela plataforma durante a instalação ou manualmente via `function:execute --postInstall`.
### Payload de gatilho de rota
@@ -27,31 +27,31 @@ description: Создавайте и управляйте настройками
Создайте новое приложение с помощью официального генератора, затем выполните аутентификацию и начните разработку:
```bash filename="Terminal"
# Scaffold a new app (includes all examples by default)
# Создать каркас нового приложения (по умолчанию включает все примеры)
npx create-twenty-app@latest my-twenty-app
cd my-twenty-app
# If you don't use yarn@4
# Если вы не используете yarn@4
corepack enable
yarn install
# Authenticate using your API key (you'll be prompted)
# Аутентифицироваться с помощью вашего API-ключа (вам будет предложено)
yarn twenty auth:login
# Start dev mode: automatically syncs local changes to your workspace
# Запустить режим разработки: автоматически синхронизирует локальные изменения с вашим рабочим пространством
yarn twenty app:dev
```
The scaffolder supports three modes for controlling which example files are included:
Генератор каркаса поддерживает три режима для управления тем, какие примерные файлы включаются:
```bash filename="Terminal"
# Default (exhaustive): all examples (object, field, logic function, front component, view, navigation menu item)
# По умолчанию (полный набор): все примеры (объект, поле, логическая функция, фронтенд-компонент, представление, пункт меню навигации)
npx create-twenty-app@latest my-app
# Minimal: only core files (application-config.ts and default-role.ts)
# Минимальный: только основные файлы (application-config.ts и default-role.ts)
npx create-twenty-app@latest my-app --minimal
# Interactive: select which examples to include
# Интерактивный: выбрать, какие примеры включить
npx create-twenty-app@latest my-app --interactive
```
@@ -86,9 +86,9 @@ yarn twenty help
* Копирует минимальное базовое приложение в `my-twenty-app/`
* Добавляет локальную зависимость `twenty-sdk` и конфигурацию Yarn 4
* Создаёт файлы конфигурации и скрипты, подключённые к CLI `twenty`
* Generates core files (application config, default function role, post-install function) plus example files based on the scaffolding mode
* Генерирует основные файлы (конфигурацию приложения, роль функций по умолчанию, постустановочную функцию), а также примерные файлы в зависимости от выбранного режима создания каркаса
A freshly scaffolded app with the default `--exhaustive` mode looks like this:
Сгенерированное с помощью каркаса приложение с режимом по умолчанию `--exhaustive` выглядит так:
```text filename="my-twenty-app/"
my-twenty-app/
@@ -102,27 +102,27 @@ my-twenty-app/
eslint.config.mjs
tsconfig.json
README.md
public/ # Public assets folder (images, fonts, etc.)
public/ # Папка публичных ресурсов (изображения, шрифты и т. д.)
src/
├── application-config.ts # Required - main application configuration
├── application-config.ts # Обязательный — основная конфигурация приложения
├── roles/
│ └── default-role.ts # Default role for logic functions
│ └── default-role.ts # Роль по умолчанию для логических функций
├── objects/
│ └── example-object.ts # Example custom object definition
│ └── example-object.ts # Пример определения пользовательского объекта
├── fields/
│ └── example-field.ts # Example standalone field definition
│ └── example-field.ts # Пример определения отдельного поля
├── logic-functions/
│ ├── hello-world.ts # Example logic function
│ └── post-install.ts # Post-install logic function
│ ├── hello-world.ts # Пример логической функции
│ └── post-install.ts # Постустановочная логическая функция
├── front-components/
│ └── hello-world.tsx # Example front component
│ └── hello-world.tsx # Пример фронтенд-компонента
├── views/
│ └── example-view.ts # Example saved view definition
│ └── example-view.ts # Пример определения сохранённого представления
└── navigation-menu-items/
└── example-navigation-menu-item.ts # Example sidebar navigation link
└── example-navigation-menu-item.ts # Пример ссылки боковой панели навигации
```
With `--minimal`, only the core files are created (`application-config.ts`, `roles/default-role.ts`, and `logic-functions/post-install.ts`). With `--interactive`, you choose which example files to include.
С `--minimal` создаются только основные файлы (`application-config.ts`, `roles/default-role.ts` и `logic-functions/post-install.ts`). С `--interactive` вы выбираете, какие примерные файлы включить.
В общих чертах:
@@ -146,8 +146,8 @@ SDK обнаруживает сущности, разбирая ваши фай
| `defineFrontComponent()` | Определения компонентов фронтенда |
| `defineRole()` | Определения ролей |
| `defineField()` | Расширения полей для существующих объектов |
| `defineView()` | Saved view definitions |
| `defineNavigationMenuItem()` | Navigation menu item definitions |
| `defineView()` | Определения сохранённых представлений |
| `defineNavigationMenuItem()` | Определения пунктов меню навигации |
<Note>
**Имена файлов заданы гибко.** Обнаружение сущностей основано на AST — SDK сканирует ваши исходные файлы в поисках шаблона `export default define<Entity>({...})`. Вы можете организовывать файлы и папки как угодно. Группировка по типу сущности (например, `logic-functions/`, `roles/`) — это лишь соглашение для организации кода, а не требование.
@@ -220,8 +220,8 @@ SDK предоставляет вспомогательные функции д
| `defineFrontComponent()` | Определение фронт-компонентов для настраиваемого интерфейса |
| `defineRole()` | Настраивает права роли и доступ к объектам |
| `defineField()` | Расширение существующих объектов дополнительными полями |
| `defineView()` | Define saved views for objects |
| `defineNavigationMenuItem()` | Define sidebar navigation links |
| `defineView()` | Определяйте сохранённые представления для объектов |
| `defineNavigationMenuItem()` | Определяйте ссылки боковой панели навигации |
Эти функции проверяют вашу конфигурацию на этапе сборки и обеспечивают автодополнение в IDE и безопасность типов.
@@ -497,7 +497,7 @@ export default defineLogicFunction({
Послеустановочная функция — это функция логики, которая автоматически выполняется после установки вашего приложения в рабочем пространстве. Это полезно для одноразовых задач настройки, таких как инициализация данных по умолчанию, создание начальных записей или настройка параметров рабочего пространства.
When you scaffold a new app with `create-twenty-app`, a post-install function is generated for you at `src/logic-functions/post-install.ts`:
Когда вы создаёте каркас нового приложения с помощью `create-twenty-app`, для вас генерируется постустановочная функция по пути `src/logic-functions/post-install.ts`:
```typescript
// src/logic-functions/post-install.ts
@@ -518,7 +518,7 @@ export default defineLogicFunction({
});
```
The function is wired into your app by referencing its universal identifier in `application-config.ts`:
Функция подключается к вашему приложению посредством ссылки на её универсальный идентификатор в `application-config.ts`:
```typescript
import { POST_INSTALL_UNIVERSAL_IDENTIFIER } from 'src/logic-functions/post-install';
@@ -529,7 +529,7 @@ export default defineApplication({
});
```
You can also manually execute the post-install function at any time using the CLI:
Вы также можете вручную выполнить постустановочную функцию в любое время с помощью CLI:
```bash filename="Terminal"
yarn twenty function:execute --postInstall
@@ -537,10 +537,10 @@ yarn twenty function:execute --postInstall
Основные моменты:
* Post-install functions are standard logic functions — they use `defineLogicFunction()` like any other function.
* The `postInstallLogicFunctionUniversalIdentifier` field in `defineApplication()` is optional. If omitted, no function runs after installation.
* The default timeout is set to 300 seconds (5 minutes) to allow for longer setup tasks like data seeding.
* Post-install functions do not need triggers — they are invoked by the platform during installation or manually via `function:execute --postInstall`.
* Постустановочные функции — это стандартные логические функции: они используют `defineLogicFunction()` как и любые другие функции.
* Поле `postInstallLogicFunctionUniversalIdentifier` в `defineApplication()` является необязательным. Если его опустить, после установки никакая функция выполняться не будет.
* Тайм-аут по умолчанию установлен на 300 секунд (5 минут), чтобы позволить выполнять более длительные задачи настройки, такие как инициализация данных.
* Постустановочным функциям не нужны триггеры — платформа вызывает их во время установки или вручную через `function:execute --postInstall`.
### Полезная нагрузка триггера маршрута
@@ -42,7 +42,7 @@ yarn twenty auth:login
yarn twenty app:dev
```
The scaffolder supports three modes for controlling which example files are included:
İskelet oluşturucu, hangi örnek dosyaların dahil edileceğini kontrol etmek için üç modu destekler:
```bash filename="Terminal"
# Default (exhaustive): all examples (object, field, logic function, front component, view, navigation menu item)
@@ -86,9 +86,9 @@ Ayrıca bkz.: [create-twenty-app](https://www.npmjs.com/package/create-twenty-ap
* Minimal bir temel uygulamayı `my-twenty-app/` içine kopyalar
* Yerel bir `twenty-sdk` bağımlılığı ve Yarn 4 yapılandırması ekler
* `twenty` CLI ile bağlantılı yapılandırma dosyaları ve betikler oluşturur
* Generates core files (application config, default function role, post-install function) plus example files based on the scaffolding mode
* İskelet oluşturma moduna bağlı olarak çekirdek dosyaları (uygulama yapılandırması, varsayılan işlev rolü, kurulum sonrası işlev) ile örnek dosyaları üretir
A freshly scaffolded app with the default `--exhaustive` mode looks like this:
Varsayılan `--exhaustive` moduyla yeni oluşturulmuş bir uygulama şu şekilde görünür:
```text filename="my-twenty-app/"
my-twenty-app/
@@ -122,7 +122,7 @@ my-twenty-app/
└── example-navigation-menu-item.ts # Example sidebar navigation link
```
With `--minimal`, only the core files are created (`application-config.ts`, `roles/default-role.ts`, and `logic-functions/post-install.ts`). With `--interactive`, you choose which example files to include.
`--minimal` ile yalnızca çekirdek dosyalar oluşturulur (`application-config.ts`, `roles/default-role.ts` ve `logic-functions/post-install.ts`). `--interactive` ile hangi örnek dosyaların dahil edileceğini siz seçersiniz.
Genel hatlarıyla:
@@ -146,8 +146,8 @@ SDK, TypeScript dosyalarınızı **`export default define<Entity>({...})`** ça
| `defineFrontComponent()` | Front component definitions |
| `defineRole()` | Rol tanımları |
| `defineField()` | Mevcut nesneler için alan genişletmeleri |
| `defineView()` | Saved view definitions |
| `defineNavigationMenuItem()` | Navigation menu item definitions |
| `defineView()` | Kaydedilmiş görünüm tanımları |
| `defineNavigationMenuItem()` | Gezinme menüsü öğesi tanımları |
<Note>
**Dosya adlandırma esnektir.** Varlık algılama AST tabanlıdır — SDK, kaynak dosyalarınızı `export default define<Entity>({...})` desenini bulmak için tarar. Dosyalarınızı ve klasörlerinizi dilediğiniz gibi düzenleyebilirsiniz. Varlık türüne göre gruplama (örn. `logic-functions/`, `roles/`) bir gereklilik değil, yalnızca kod organizasyonu için bir gelenektir.
@@ -220,8 +220,8 @@ SDK, uygulama varlıklarınızı tanımlamak için yardımcı fonksiyonlar sağl
| `defineFrontComponent()` | Özel kullanıcı arayüzü için ön uç bileşenlerini tanımlayın |
| `defineRole()` | Rol izinlerini ve nesne erişimini yapılandırın |
| `defineField()` | Mevcut nesneleri ek alanlarla genişletin |
| `defineView()` | Define saved views for objects |
| `defineNavigationMenuItem()` | Define sidebar navigation links |
| `defineView()` | Nesneler için kaydedilmiş görünümler tanımlayın |
| `defineNavigationMenuItem()` | Kenar çubuğu gezinme bağlantılarını tanımlayın |
Bu fonksiyonlar, derleme zamanında yapılandırmanızı doğrular ve IDE otomatik tamamlama ile tür güvenliği sağlar.
@@ -497,7 +497,7 @@ Notlar:
Kurulum sonrası işlev, uygulamanız bir çalışma alanına yüklendikten sonra otomatik olarak çalışan bir mantık işlevidir. Bu, varsayılan verileri tohumlama, ilk kayıtları oluşturma veya çalışma alanı ayarlarını yapılandırma gibi tek seferlik kurulum görevleri için yararlıdır.
When you scaffold a new app with `create-twenty-app`, a post-install function is generated for you at `src/logic-functions/post-install.ts`:
`create-twenty-app` ile yeni bir uygulama iskeleti oluşturduğunuzda, `src/logic-functions/post-install.ts` konumunda sizin için bir kurulum sonrası işlevi oluşturulur:
```typescript
// src/logic-functions/post-install.ts
@@ -518,7 +518,7 @@ export default defineLogicFunction({
});
```
The function is wired into your app by referencing its universal identifier in `application-config.ts`:
İşlev, `application-config.ts` içinde evrensel tanımlayıcısına başvurularak uygulamanıza bağlanır:
```typescript
import { POST_INSTALL_UNIVERSAL_IDENTIFIER } from 'src/logic-functions/post-install';
@@ -529,7 +529,7 @@ export default defineApplication({
});
```
You can also manually execute the post-install function at any time using the CLI:
Ayrıca kurulum sonrası işlevi istediğiniz zaman CLI kullanarak manuel olarak çalıştırabilirsiniz:
```bash filename="Terminal"
yarn twenty function:execute --postInstall
@@ -537,10 +537,10 @@ yarn twenty function:execute --postInstall
Önemli noktalar:
* Post-install functions are standard logic functions — they use `defineLogicFunction()` like any other function.
* The `postInstallLogicFunctionUniversalIdentifier` field in `defineApplication()` is optional. If omitted, no function runs after installation.
* The default timeout is set to 300 seconds (5 minutes) to allow for longer setup tasks like data seeding.
* Post-install functions do not need triggers — they are invoked by the platform during installation or manually via `function:execute --postInstall`.
* Kurulum sonrası işlevleri standart mantık işlevleridir — diğer herhangi bir işlev gibi `defineLogicFunction()` kullanırlar.
* `defineApplication()` içindeki `postInstallLogicFunctionUniversalIdentifier` alanı isteğe bağlıdır. Atlanırsa, kurulumdan sonra hiçbir işlev çalıştırılmaz.
* Varsayılan zaman aşımı, veri tohumlama gibi daha uzun kurulum görevlerine izin vermek için 300 saniye (5 dakika) olarak ayarlanmıştır.
* Kurulum sonrası işlevlerin tetikleyicilere ihtiyacı yoktur — kurulum sırasında platform tarafından veya `function:execute --postInstall` aracılığıyla manuel olarak çağrılırlar.
### Rota tetikleyicisi yükü
@@ -9,6 +9,8 @@ import { SOURCE_LOCALE } from 'twenty-shared/translations';
// eslint-disable-next-line no-restricted-imports
import { RootDecorator } from '../src/testing/decorators/RootDecorator';
// eslint-disable-next-line no-restricted-imports
import { resetJotaiStore } from '../src/modules/ui/utilities/state/jotai/jotaiStore';
import 'react-loading-skeleton/dist/skeleton.css';
import 'twenty-ui/style.css';
@@ -84,6 +86,10 @@ const preview: Preview = {
RootDecorator,
],
beforeEach: () => {
resetJotaiStore();
},
loaders: [mswLoader],
parameters: {
@@ -1045,7 +1045,7 @@ export type CreateNavigationMenuItemInput = {
icon?: InputMaybe<Scalars['String']>;
link?: InputMaybe<Scalars['String']>;
name?: InputMaybe<Scalars['String']>;
position?: InputMaybe<Scalars['Float']>;
position?: InputMaybe<Scalars['Int']>;
targetObjectMetadataId?: InputMaybe<Scalars['UUID']>;
targetRecordId?: InputMaybe<Scalars['UUID']>;
userWorkspaceId?: InputMaybe<Scalars['UUID']>;
@@ -4583,7 +4583,7 @@ export type UpdateNavigationMenuItemInput = {
icon?: InputMaybe<Scalars['String']>;
link?: InputMaybe<Scalars['String']>;
name?: InputMaybe<Scalars['String']>;
position?: InputMaybe<Scalars['Float']>;
position?: InputMaybe<Scalars['Int']>;
};
export type UpdateObjectPayload = {
@@ -4874,7 +4874,6 @@ export type User = {
lastName: Scalars['String'];
locale: Scalars['String'];
onboardingStatus?: Maybe<OnboardingStatus>;
passwordHash?: Maybe<Scalars['String']>;
supportUserHash?: Maybe<Scalars['String']>;
updatedAt: Scalars['DateTime'];
userVars?: Maybe<Scalars['JSONObject']>;
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Aanhegsels"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Bruin"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Kies die velde wat jou rekords sal identifiseer"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Kies die formaat wat gebruik word om datumwaarde te vertoon"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Voer filter in"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Voer in <0>Unicode</0> formaat"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "Werkruimte Domein"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "المرفقات"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "بني"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "اختر الحقول التي ستحدد سجلاتك"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "اختر التنسيق المستخدم لعرض قيمة التاريخ"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "أدخل عامل تصفية"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "إدخل بصيغة <0>Unicode</0>"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14210,6 +14209,7 @@ msgid "Workspace Domain"
msgstr "نطاق مساحة العمل"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Adjunts"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Marró"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Trieu els camps que identificaran els vostres registres"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Tria el format utilitzat per mostrar el valor de la data"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Introdueix el filtre"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Introdueix en format <0>Unicode</0>"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "Domini de l'espai de treball"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Přílohy"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Hnědá"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Vyberte pole, která budou identifikovat vaše záznamy"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Vyberte formát použitý k zobrazení datumové hodnoty"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Zadejte filtr"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Zadejte v <0>Unicode</0> formátu"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "Doména pracovního prostoru"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Vedhæftninger"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Brun"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Vælg de felter, der vil identificere dine poster"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Vælg det format, der bruges til at vise datoværdien"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Indtast filter"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Indtast i <0>Unicode</0> format"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14214,6 +14213,7 @@ msgid "Workspace Domain"
msgstr "Arbejdsområdedomæne"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Anhänge"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Braun"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Wählen Sie die Felder aus, die Ihre Datensätze identifizieren werden"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Wählen Sie das Format zur Anzeige des Datumswertes"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Filter eingeben"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Im <0>Unicode</0>-Format eingeben"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "Arbeitsbereichsdomäne"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Συνημμένα"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Καφέ"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Επιλέξτε τα πεδία που θα ταυτοποιήσουν τις εγγραφές σας"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Επιλέξτε τη μορφή που χρησιμοποιείται για την εμφάνιση της τιμής ημερομηνίας"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Εισάγετε φίλτρο"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Εισάγετε σε μορφή <0>Unicode</0>"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14216,6 +14215,7 @@ msgid "Workspace Domain"
msgstr "Τομέας Χώρου εργασίας"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+9 -9
View File
@@ -1969,7 +1969,6 @@ msgstr "Attachments"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr "Audit Logs"
@@ -2246,10 +2245,10 @@ msgstr "Brown"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgstr "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr "Build many-to-many relations"
#. js-lingui-id: +7fBMP
#: src/pages/settings/ai/components/SettingsToolsTable.tsx
@@ -2610,7 +2609,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Choose the fields that will identify your records"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Choose the format used to display date value"
@@ -5036,10 +5035,10 @@ msgstr "Enter files as JSON array"
msgid "Enter filter"
msgstr "Enter filter"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Enter in <0>Unicode</0> format"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr "Enter in Unicode format"
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14209,6 +14208,7 @@ msgid "Workspace Domain"
msgstr "Workspace Domain"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr "Workspace Events"
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Adjuntos"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Marrón"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Elige los campos que identificarán tus registros"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Elige el formato utilizado para mostrar el valor de la fecha"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Introduce un filtro"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Ingresar en formato <0>Unicode</0>"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14214,6 +14213,7 @@ msgid "Workspace Domain"
msgstr "Dominio del espacio de trabajo"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Liitteet"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Ruskea"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Valitse kentät, jotka identifioivat tietueesi"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Valitse päivämäärän näyttämiseen käytetty muoto"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Syötä suodatin"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Kirjoita <0>Unicode</0>-muodossa"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "Työtilan verkkotunnus"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Pièces jointes"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Marron"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Choisissez les champs qui identifieront vos enregistrements"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Choisir le format utilisé pour afficher la valeur de la date"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Saisissez un filtre"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Entrer au format <0>Unicode</0>"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14214,6 +14213,7 @@ msgid "Workspace Domain"
msgstr "Domaine de l'espace de travail"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
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
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "קבצים מצורפים"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "חום"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "בחרו את השדות שיזהו את הרשומות שלכם"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "בחר את הפורמט להצגת תאריך"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "הזן מסנן"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "הכנס בפורמט <0>Unicode</0>"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "תחום סביבת עבודה"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Csatolmányok"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Barna"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Válassza ki azon mezőket, amelyek azonosítják a bejegyzéseit"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Válassza ki a dátumérték megjelenítésére használt formátumot"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Adja meg a szűrőt"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Adja meg <0>Unicode</0> formátumban"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "Munkaterületi Domain"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Allegati"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Marrone"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Scegli i campi che identificheranno i tuoi record"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Scegli il formato utilizzato per visualizzare il valore della data"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Inserisci il filtro"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Inserisci nel formato <0>Unicode</0>"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14214,6 +14213,7 @@ msgid "Workspace Domain"
msgstr "Dominio del workspace"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "添付ファイル"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "茶色"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "レコードを識別するフィールドを選択してください"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "日付値を表示するために使用される形式を選択"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "フィルターを入力"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "<0>Unicode</0>形式で入力"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "ワークスペースドメイン"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "첨부 파일"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "갈색"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "레코드를 식별할 필드를 선택하세요"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "날짜 형식을 선택하세요"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "필터를 입력하세요"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "<0>유니코드</0> 형식으로 입력"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "워크스페이스 도메인"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Bijlagen"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Bruin"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Kies de velden die uw records zullen identificeren"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Kies het formaat dat wordt gebruikt om de datumnotatie weer te geven"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Voer een filter in"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Voer in <0>Unicode</0>-formaat in"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14214,6 +14213,7 @@ msgid "Workspace Domain"
msgstr "Werkruimte Domein"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Vedlegg"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Brun"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Velg feltene som vil identifisere postene dine"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Velg formatet som brukes til å vise dato"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Skriv inn filter"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Skriv inn i <0>Unicode</0>-format"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "Arbeidsområdets domene"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Załączniki"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Brązowy"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Wybierz pola, które będą identyfikować Twoje rekordy"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Wybierz format używany do wyświetlania daty"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Wprowadź filtr"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Wprowadź w formacie <0>Unicode</0>"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "Domena miejsca pracy"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
@@ -1969,7 +1969,6 @@ msgstr ""
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2246,9 +2245,9 @@ msgstr ""
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2610,7 +2609,7 @@ msgid "Choose the fields that will identify your records"
msgstr ""
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr ""
@@ -5036,9 +5035,9 @@ msgstr ""
msgid "Enter filter"
msgstr ""
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
@@ -14205,6 +14204,7 @@ msgid "Workspace Domain"
msgstr ""
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Anexos"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Marrom"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Escolha os campos que irão identificar seus registros"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Escolha o formato usado para exibir o valor da data"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Insira o filtro"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Digite no formato <0>Unicode</0>"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "Domínio do Workspace"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Anexos"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Castanho"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Escolha os campos que identificarão seus registros"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Escolha o formato usado para exibir o valor da data"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Introduza o filtro"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Digite no formato <0>Unicode</0>"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "Domínio do espaço de trabalho"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Atașamente"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Maro"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Alegeți câmpurile care vor identifica înregistrările dvs"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Alege formatul utilizat pentru a afișa valoarea datei"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Introduceți filtrul"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Introduceți în format <0>Unicode</0>"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "Domeniu Spațiu de lucru"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
Binary file not shown.
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Прилози"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Браон"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Изаберите поља која ће идентификовати ваше записе"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Изаберите формат за приказ датума"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Унесите филтер"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Унеси у <0>Unicode</0> формату"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "Домен радног простора"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Bilagor"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Brun"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Välj de fält som kommer att identifiera dina poster"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Välj formatet som används för att visa datumvärdet"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Ange filter"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Ange i <0>Unicode</0>-format"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14226,6 +14225,7 @@ msgid "Workspace Domain"
msgstr "Arbetsyta domän"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Ekler"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Kahverengi"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Kayıtlarınızı tanımlayacak alanları seçin"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Tarih değerini görüntülemek için kullanılan formatı seçin"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Filtre girin"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "<0>Unicode</0> formatında girin"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "İş Alanı Alan Adı"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Вкладення"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Коричневий"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Виберіть поля, які будуть ідентифікувати ваші записи"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Оберіть формат для відображення значення дати"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Введіть фільтр"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Введіть у форматі <0>Unicode</0>"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14214,6 +14213,7 @@ msgid "Workspace Domain"
msgstr "Домен робочої області"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "Tập tin đính kèm"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "Nâu"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "Chọn các trường sẽ xác định bản ghi của bạn"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "Chọn định dạng dùng để hiển thị giá trị ngày"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "Nhập bộ lọc"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "Nhập theo định dạng <0>Unicode</0>"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "Tên miền không gian làm việc"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "附件"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "棕色"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "选择将标识您记录的字段"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "选择用于显示日期值的格式"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "输入筛选条件"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "以<0>Unicode</0>格式输入"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "工作区域"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
+8 -8
View File
@@ -1974,7 +1974,6 @@ msgstr "附件"
#. js-lingui-id: EPEFrH
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/SettingsEventLogs.tsx
msgid "Audit Logs"
msgstr ""
@@ -2251,9 +2250,9 @@ msgstr "棕色"
msgid "Build a dashboard that shows: (1) total pipeline value by stage for the last 3 months, (2) count of deals won vs lost per month, (3) average deal size. Use our standard pipeline stages."
msgstr ""
#. js-lingui-id: 8SlslB
#. js-lingui-id: alSW5d
#: src/modules/settings/data-model/fields/forms/morph-relation/components/SettingsDataModelFieldRelationJunctionForm.tsx
msgid "Build many-to-many relations. <0>Learn more</0>"
msgid "Build many-to-many relations"
msgstr ""
#. js-lingui-id: +7fBMP
@@ -2615,7 +2614,7 @@ msgid "Choose the fields that will identify your records"
msgstr "選擇將識別您記錄的欄位"
#. js-lingui-id: hIJigY
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Choose the format used to display date value"
msgstr "選擇用于顯示日期值的格式"
@@ -5041,10 +5040,10 @@ msgstr ""
msgid "Enter filter"
msgstr "輸入篩選條件"
#. js-lingui-id: 9/30HU
#: src/modules/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription.tsx
msgid "Enter in <0>Unicode</0> format"
msgstr "以<0>Unicode</0>格式輸入"
#. js-lingui-id: f09Lhk
#: src/modules/settings/data-model/fields/forms/date/components/SettingsDataModelFieldDateForm.tsx
msgid "Enter in Unicode format"
msgstr ""
#. js-lingui-id: 9CjMQ7
#: src/modules/settings/admin-panel/config-variables/components/ConfigVariableDatabaseInput.tsx
@@ -14212,6 +14211,7 @@ msgid "Workspace Domain"
msgstr "工作區域名"
#. js-lingui-id: J2q6WC
#: src/pages/settings/security/SettingsSecurity.tsx
#: src/pages/settings/security/event-logs/components/EventLogTableSelector.tsx
msgid "Workspace Events"
msgstr ""
@@ -1,4 +1,5 @@
import { type Meta, type StoryObj } from '@storybook/react-vite';
import { Provider as JotaiProvider } from 'jotai';
import { RecoilRoot } from 'recoil';
import * as test from 'storybook/test';
import { expect, userEvent, waitFor, within } from 'storybook/test';
@@ -10,6 +11,7 @@ import { ActionMenuComponentInstanceContext } from '@/action-menu/states/context
import { recordIndexActionMenuDropdownPositionComponentState } from '@/action-menu/states/recordIndexActionMenuDropdownPositionComponentState';
import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDropdownOpenComponentState';
import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore';
import { RouterDecorator } from 'twenty-ui/testing';
import { ContextStoreDecorator } from '~/testing/decorators/ContextStoreDecorator';
@@ -21,44 +23,48 @@ const meta: Meta<typeof RecordIndexActionMenuDropdown> = {
title: 'Modules/ActionMenu/RecordIndexActionMenuDropdown',
component: RecordIndexActionMenuDropdown,
decorators: [
(Story) => (
<RecoilRoot
initializeState={({ set }) => {
set(
recordIndexActionMenuDropdownPositionComponentState.atomFamily({
instanceId: 'action-menu-dropdown-story',
}),
{ x: 10, y: 10 },
);
(Story) => {
jotaiStore.set(
isDropdownOpenComponentState.atomFamily({
instanceId: 'action-menu-dropdown-story-action-menu',
}),
true,
);
set(
isDropdownOpenComponentState.atomFamily({
instanceId: 'action-menu-dropdown-story-action-menu',
}),
true,
);
}}
>
<ActionMenuComponentInstanceContext.Provider
value={{ instanceId: 'story-action-menu' }}
>
<ActionMenuContext.Provider
value={{
isInRightDrawer: true,
displayType: 'dropdownItem',
actionMenuType: 'index-page-action-menu-dropdown',
actions: createMockActionMenuActions({
deleteMock,
addToFavoritesMock,
exportMock,
}),
return (
<JotaiProvider store={jotaiStore}>
<RecoilRoot
initializeState={({ set }) => {
set(
recordIndexActionMenuDropdownPositionComponentState.atomFamily({
instanceId: 'action-menu-dropdown-story',
}),
{ x: 10, y: 10 },
);
}}
>
<Story />
</ActionMenuContext.Provider>
</ActionMenuComponentInstanceContext.Provider>
</RecoilRoot>
),
<ActionMenuComponentInstanceContext.Provider
value={{ instanceId: 'story-action-menu' }}
>
<ActionMenuContext.Provider
value={{
isInRightDrawer: true,
displayType: 'dropdownItem',
actionMenuType: 'index-page-action-menu-dropdown',
actions: createMockActionMenuActions({
deleteMock,
addToFavoritesMock,
exportMock,
}),
}}
>
<Story />
</ActionMenuContext.Provider>
</ActionMenuComponentInstanceContext.Provider>
</RecoilRoot>
</JotaiProvider>
);
},
ContextStoreDecorator,
RouterDecorator,
],
@@ -22,8 +22,8 @@ import { useHasPermissionFlag } from '@/settings/roles/hooks/useHasPermissionFla
import { IconCalendar, OverflowingTextWithTooltip } from 'twenty-ui/display';
import { isNavigationModifierPressed } from 'twenty-ui/utilities';
import {
FeatureFlagKey,
PermissionFlagType,
FeatureFlagKey,
} from '~/generated-metadata/graphql';
import { formatToHumanReadableDate } from '~/utils/date-utils';
import { getFileNameAndExtension } from '~/utils/file/getFileNameAndExtension';
@@ -96,11 +96,7 @@ export const AttachmentRow = ({
);
const { name: originalFileName, extension: attachmentFileExtension } =
getFileNameAndExtension(
isFilesFieldMigrated
? (attachment.file?.[0]?.label as string)
: attachment.name,
);
getFileNameAndExtension(attachment.name);
const [attachmentFileName, setAttachmentFileName] =
useState(originalFileName);
@@ -210,9 +206,7 @@ export const AttachmentRow = ({
target="_blank"
rel="noopener noreferrer"
>
<OverflowingTextWithTooltip
text={`${attachmentFileName}${attachmentFileExtension}`}
/>
<OverflowingTextWithTooltip text={attachment.name} />
</StyledLink>
</StyledLinkContainer>
)}
@@ -4,7 +4,7 @@ import {
ApolloLink,
type FetchResult,
fromPromise,
type Observable,
Observable,
type Operation,
type ServerError,
type ServerParseError,
@@ -181,7 +181,16 @@ export class ApolloFactory<TCacheShape> implements ApolloManager<TCacheShape> {
});
}
return fromPromise(renewalPromise).flatMap(() => forward(operation));
return fromPromise(renewalPromise).flatMap(() => {
// If token pair is not available after renewal attempt,
// don't retry the operation — renewal has failed and the
// user has already been redirected to the sign-in page.
if (isUndefinedOrNull(getTokenPair())) {
return new Observable<FetchResult>(() => {});
}
return forward(operation);
});
};
const sendToSentry = ({
@@ -9,7 +9,7 @@ import {
} from '@/ui/layout/dropdown/components/Dropdown';
import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDropdownOpenComponentState';
import { useSelectableList } from '@/ui/layout/selectable-list/hooks/useSelectableList';
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilComponentValueV2';
export type CommandMenuItemDropdownProps = CommandMenuItemProps &
Pick<
@@ -31,7 +31,7 @@ export const CommandMenuItemDropdown = ({
dropdownId,
disabled = false,
}: CommandMenuItemDropdownProps) => {
const isDropdownOpen = useRecoilComponentValue(
const isDropdownOpen = useRecoilComponentValueV2(
isDropdownOpenComponentState,
dropdownId,
);
@@ -26,6 +26,7 @@ import { currentFavoriteFolderIdStateV2 } from '@/ui/navigation/navigation-drawe
import { useSetRecoilStateV2 } from '@/ui/utilities/state/jotai/hooks/useSetRecoilStateV2';
import { getNavigationSubItemLeftAdornment } from '@/ui/navigation/navigation-drawer/utils/getNavigationSubItemLeftAdornment';
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilComponentValueV2';
import { Droppable } from '@hello-pangea/dnd';
import { useLingui } from '@lingui/react/macro';
import { useContext, useState } from 'react';
@@ -95,7 +96,7 @@ export const CurrentWorkspaceMemberFavorites = ({
const dropdownId = `favorite-folder-edit-${folder.folderId}`;
const isDropdownOpenComponent = useRecoilComponentValue(
const isDropdownOpenComponent = useRecoilComponentValueV2(
isDropdownOpenComponentState,
dropdownId,
);
@@ -45,6 +45,7 @@ import { currentNavigationMenuItemFolderIdStateV2 } from '@/ui/navigation/naviga
import { useSetRecoilStateV2 } from '@/ui/utilities/state/jotai/hooks/useSetRecoilStateV2';
import { getNavigationSubItemLeftAdornment } from '@/ui/navigation/navigation-drawer/utils/getNavigationSubItemLeftAdornment';
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilComponentValueV2';
import { isNonEmptyString } from '@sniptt/guards';
import { isDefined } from 'twenty-shared/utils';
@@ -123,7 +124,7 @@ export const CurrentWorkspaceMemberNavigationMenuItems = ({
const dropdownId = `navigation-menu-item-folder-edit-${folder.id}`;
const isDropdownOpenComponent = useRecoilComponentValue(
const isDropdownOpenComponent = useRecoilComponentValueV2(
isDropdownOpenComponentState,
dropdownId,
);
@@ -10,7 +10,7 @@ import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
import { StyledHeaderDropdownButton } from '@/ui/layout/dropdown/components/StyledHeaderDropdownButton';
import { DROPDOWN_OFFSET_Y } from '@/ui/layout/dropdown/constants/DropdownOffsetY';
import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDropdownOpenComponentState';
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilComponentValueV2';
import { type ViewType } from '@/views/types/ViewType';
import { Trans } from '@lingui/react/macro';
@@ -28,7 +28,7 @@ export const ObjectOptionsDropdown = ({
const { currentContentId, handleContentChange, handleResetContent } =
useDropdownContextCurrentContentId<ObjectOptionsContentId>();
const isDropdownOpen = useRecoilComponentValue(
const isDropdownOpen = useRecoilComponentValueV2(
isDropdownOpenComponentState,
OBJECT_OPTIONS_DROPDOWN_ID,
);
@@ -27,6 +27,7 @@ import { SelectableListItem } from '@/ui/layout/selectable-list/components/Selec
import { selectedItemIdComponentState } from '@/ui/layout/selectable-list/states/selectedItemIdComponentState';
import { useRecoilComponentState } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentState';
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilComponentValueV2';
import { useSetRecoilComponentState } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentState';
import { Trans, useLingui } from '@lingui/react/macro';
import { useRecoilValue } from 'recoil';
@@ -138,7 +139,7 @@ export const ObjectSortDropdownButton = () => {
setIsRecordSortDirectionMenuUnfolded(false);
};
const isDropdownOpen = useRecoilComponentValue(
const isDropdownOpen = useRecoilComponentValueV2(
isDropdownOpenComponentState,
OBJECT_SORT_DROPDOWN_ID,
);
@@ -1,6 +1,6 @@
import { StyledHeaderDropdownButton } from '@/ui/layout/dropdown/components/StyledHeaderDropdownButton';
import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDropdownOpenComponentState';
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilComponentValueV2';
import styled from '@emotion/styled';
import { type Nullable } from 'twenty-shared/types';
import { Tag } from 'twenty-ui/components';
@@ -23,7 +23,7 @@ export const RecordBoardColumnHeaderAggregateDropdownButton = ({
value?: Nullable<string | number>;
tooltip?: Nullable<string>;
}) => {
const isDropdownOpen = useRecoilComponentValue(
const isDropdownOpen = useRecoilComponentValueV2(
isDropdownOpenComponentState,
dropdownId,
);
@@ -12,7 +12,7 @@ import { type FieldMorphRelationMetadata } from '@/object-record/record-field/ui
import { getRecordFieldCardRelationPickerDropdownId } from '@/object-record/record-show/utils/getRecordFieldCardRelationPickerDropdownId';
import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDropdownOpenComponentState';
import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile';
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilComponentValueV2';
import { RecordDetailMorphRelationSectionDropdown } from '@/object-record/record-field-list/record-detail-section/relation/components/RecordDetailMorphRelationSectionDropdown';
import { RecordDetailRelationRecordsList } from '@/object-record/record-field-list/record-detail-section/relation/components/RecordDetailRelationRecordsList';
@@ -49,7 +49,7 @@ export const RecordDetailMorphRelationSection = ({
instanceId: scopeInstanceId,
});
const isDropdownOpen = useRecoilComponentValue(
const isDropdownOpen = useRecoilComponentValueV2(
isDropdownOpenComponentState,
dropdownId,
);
@@ -16,7 +16,7 @@ import { getRecordFieldCardRelationPickerDropdownId } from '@/object-record/reco
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown';
import { dropdownPlacementComponentState } from '@/ui/layout/dropdown/states/dropdownPlacementComponentState';
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilComponentValueV2';
import { useSetRecoilComponentState } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentState';
import { FieldMetadataType } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
@@ -65,7 +65,7 @@ export const RecordDetailMorphRelationSectionDropdownManyToOne = ({
const { closeDropdown } = useCloseDropdown();
const dropdownPlacement = useRecoilComponentValue(
const dropdownPlacement = useRecoilComponentValueV2(
dropdownPlacementComponentState,
dropdownId,
);
@@ -18,7 +18,7 @@ import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
import { GenericDropdownContentWidth } from '@/ui/layout/dropdown/constants/GenericDropdownContentWidth';
import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown';
import { dropdownPlacementComponentState } from '@/ui/layout/dropdown/states/dropdownPlacementComponentState';
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilComponentValueV2';
import { useSetRecoilComponentState } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentState';
import { FieldMetadataType } from 'twenty-shared/types';
import { CustomError, isDefined } from 'twenty-shared/utils';
@@ -68,7 +68,7 @@ export const RecordDetailMorphRelationSectionDropdownOneToMany = ({
const { closeDropdown } = useCloseDropdown();
const dropdownPlacement = useRecoilComponentValue(
const dropdownPlacement = useRecoilComponentValueV2(
dropdownPlacementComponentState,
dropdownId,
);
@@ -28,7 +28,7 @@ import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown';
import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDropdownOpenComponentState';
import { ConfirmationModal } from '@/ui/layout/modal/components/ConfirmationModal';
import { useModal } from '@/ui/layout/modal/hooks/useModal';
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilComponentValueV2';
import { useSetRecoilComponentState } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentState';
import { t } from '@lingui/core/macro';
import { Trans } from '@lingui/react/macro';
@@ -152,7 +152,7 @@ export const RecordDetailRelationRecordsListItem = ({
const dropdownInstanceId = `record-field-card-menu:${scopeInstanceId}:${relationFieldMetadataId}:${relationRecord.id}`;
const { closeDropdown } = useCloseDropdown();
const isDropdownOpen = useRecoilComponentValue(
const isDropdownOpen = useRecoilComponentValueV2(
isDropdownOpenComponentState,
dropdownInstanceId,
);
@@ -21,7 +21,7 @@ import { AggregateOperations } from '@/object-record/record-table/constants/Aggr
import { type ObjectRecord } from '@/object-record/types/ObjectRecord';
import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDropdownOpenComponentState';
import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile';
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilComponentValueV2';
import { coreIndexViewIdFromObjectMetadataItemFamilySelector } from '@/views/states/selectors/coreIndexViewIdFromObjectMetadataItemFamilySelector';
import { useLingui } from '@lingui/react/macro';
import {
@@ -100,7 +100,7 @@ export const RecordDetailRelationSection = ({
instanceId: scopeInstanceId,
});
const isDropdownOpen = useRecoilComponentValue(
const isDropdownOpen = useRecoilComponentValueV2(
isDropdownOpenComponentState,
dropdownId,
);
@@ -21,7 +21,7 @@ import { type ObjectRecord } from '@/object-record/types/ObjectRecord';
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown';
import { dropdownPlacementComponentState } from '@/ui/layout/dropdown/states/dropdownPlacementComponentState';
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilComponentValueV2';
import { useSetRecoilComponentState } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentState';
import { CustomError, isDefined } from 'twenty-shared/utils';
import { IconPlus } from 'twenty-ui/display';
@@ -85,7 +85,7 @@ export const RecordDetailRelationSectionDropdownToMany = ({
const { closeDropdown } = useCloseDropdown();
const dropdownPlacement = useRecoilComponentValue(
const dropdownPlacement = useRecoilComponentValueV2(
dropdownPlacementComponentState,
dropdownId,
);
@@ -18,7 +18,7 @@ import { type ObjectRecord } from '@/object-record/types/ObjectRecord';
import { Dropdown } from '@/ui/layout/dropdown/components/Dropdown';
import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown';
import { dropdownPlacementComponentState } from '@/ui/layout/dropdown/states/dropdownPlacementComponentState';
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilComponentValueV2';
import { useSetRecoilComponentState } from '@/ui/utilities/state/component-state/hooks/useSetRecoilComponentState';
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
@@ -96,7 +96,7 @@ export const RecordDetailRelationSectionDropdownToOne = ({
const { closeDropdown } = useCloseDropdown();
const dropdownPlacement = useRecoilComponentValue(
const dropdownPlacement = useRecoilComponentValueV2(
dropdownPlacementComponentState,
dropdownId,
);
@@ -20,7 +20,7 @@ import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDrop
import { usePushFocusItemToFocusStack } from '@/ui/utilities/focus/hooks/usePushFocusItemToFocusStack';
import { useRemoveFocusItemFromFocusStackById } from '@/ui/utilities/focus/hooks/useRemoveFocusItemFromFocusStackById';
import { FocusComponentType } from '@/ui/utilities/focus/types/FocusComponentType';
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilComponentValueV2';
import { isStandaloneVariableString } from '@/workflow/utils/isStandaloneVariableString';
import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
@@ -128,7 +128,7 @@ export const FormArrayFieldInput = ({
const containerRef = useRef<HTMLDivElement>(null);
const dropdownId = `dropdown-${instanceId}`;
const isDropdownOpen = useRecoilComponentValue(
const isDropdownOpen = useRecoilComponentValueV2(
isDropdownOpenComponentState,
dropdownId,
);
@@ -4,7 +4,7 @@ import { DropdownMenuItemsContainer } from '@/ui/layout/dropdown/components/Drop
import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown';
import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDropdownOpenComponentState';
import { MenuItemWithOptionDropdown } from '@/ui/navigation/menu-item/components/MenuItemWithOptionDropdown';
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilComponentValueV2';
import React, { useState } from 'react';
import {
IconBookmark,
@@ -44,7 +44,7 @@ export const MultiItemFieldMenuItem = <T,>({
}: MultiItemFieldMenuItemProps<T>) => {
const [isHovered, setIsHovered] = useState(false);
const { closeDropdown } = useCloseDropdown();
const isDropdownOpen = useRecoilComponentValue(
const isDropdownOpen = useRecoilComponentValueV2(
isDropdownOpenComponentState,
dropdownId,
);
@@ -19,7 +19,7 @@ import { usePersistFieldFromFieldInputContext } from '@/object-record/record-fie
import { getDropdownFocusIdForRecordField } from '@/object-record/utils/getDropdownFocusIdForRecordField';
import { useGoBackToPreviousDropdownFocusId } from '@/ui/layout/dropdown/hooks/useGoBackToPreviousDropdownFocusId';
import { activeDropdownFocusIdState } from '@/ui/layout/dropdown/states/activeDropdownFocusIdState';
import { useRecoilCallback } from 'recoil';
import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore';
import { useIcons } from 'twenty-ui/display';
import { RecordInlineCellContainer } from './RecordInlineCellContainer';
import {
@@ -133,37 +133,36 @@ export const RecordInlineCell = ({
closeInlineCell();
};
const handleClickOutside = useRecoilCallback(
({ snapshot }) =>
({
event,
newValue,
skipPersist,
}: Parameters<FieldInputClickOutsideEvent>[0]) => {
const currentDropdownFocusId = snapshot
.getLoadable(activeDropdownFocusIdState)
.getValue();
const handleClickOutside = useCallback(
({
event,
newValue,
skipPersist,
}: Parameters<FieldInputClickOutsideEvent>[0]) => {
const currentDropdownFocusId = jotaiStore.get(
activeDropdownFocusIdState.atom,
);
const expectedDropdownFocusId = getDropdownFocusIdForRecordField({
recordId,
fieldMetadataId: fieldDefinition.fieldMetadataId,
componentType: 'inline-cell',
instanceId: scopeInstanceId,
});
const expectedDropdownFocusId = getDropdownFocusIdForRecordField({
recordId,
fieldMetadataId: fieldDefinition.fieldMetadataId,
componentType: 'inline-cell',
instanceId: scopeInstanceId,
});
if (currentDropdownFocusId !== expectedDropdownFocusId) {
return;
}
if (currentDropdownFocusId !== expectedDropdownFocusId) {
return;
}
event?.preventDefault();
event?.stopImmediatePropagation();
event?.preventDefault();
event?.stopImmediatePropagation();
if (skipPersist !== true) {
persistFieldFromFieldInputContext(newValue);
}
if (skipPersist !== true) {
persistFieldFromFieldInputContext(newValue);
}
closeInlineCell();
},
closeInlineCell();
},
[
recordId,
fieldDefinition.fieldMetadataId,
@@ -6,6 +6,7 @@ import { RecordTableColumnAggregateFooterValue } from '@/object-record/record-ta
import { hasAggregateOperationForViewFieldFamilySelector } from '@/object-record/record-table/record-table-footer/states/hasAggregateOperationForViewFieldFamilySelector';
import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDropdownOpenComponentState';
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilComponentValueV2';
import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import { useContext, useState } from 'react';
@@ -57,7 +58,7 @@ export const RecordTableColumnAggregateFooterValueCell = ({
}) => {
const [isHovered, setIsHovered] = useState(false);
const isDropdownOpen = useRecoilComponentValue(
const isDropdownOpen = useRecoilComponentValueV2(
isDropdownOpenComponentState,
dropdownId,
);
@@ -24,7 +24,7 @@ import { getDropdownFocusIdForRecordField } from '@/object-record/utils/getDropd
import { FieldWidgetInlineCellContainer } from '@/page-layout/widgets/field/components/FieldWidgetInlineCellContainer';
import { useGoBackToPreviousDropdownFocusId } from '@/ui/layout/dropdown/hooks/useGoBackToPreviousDropdownFocusId';
import { activeDropdownFocusIdState } from '@/ui/layout/dropdown/states/activeDropdownFocusIdState';
import { useRecoilCallback } from 'recoil';
import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore';
type FieldWidgetInlineCellProps = {
loading?: boolean;
@@ -132,37 +132,36 @@ export const FieldWidgetInlineCell = ({
closeInlineCell();
};
const handleClickOutside = useRecoilCallback(
({ snapshot }) =>
({
event,
newValue,
skipPersist,
}: Parameters<FieldInputClickOutsideEvent>[0]) => {
const currentDropdownFocusId = snapshot
.getLoadable(activeDropdownFocusIdState)
.getValue();
const handleClickOutside = useCallback(
({
event,
newValue,
skipPersist,
}: Parameters<FieldInputClickOutsideEvent>[0]) => {
const currentDropdownFocusId = jotaiStore.get(
activeDropdownFocusIdState.atom,
);
const expectedDropdownFocusId = getDropdownFocusIdForRecordField({
recordId,
fieldMetadataId: fieldDefinition.fieldMetadataId,
componentType: 'inline-cell',
instanceId: scopeInstanceId,
});
const expectedDropdownFocusId = getDropdownFocusIdForRecordField({
recordId,
fieldMetadataId: fieldDefinition.fieldMetadataId,
componentType: 'inline-cell',
instanceId: scopeInstanceId,
});
if (currentDropdownFocusId !== expectedDropdownFocusId) {
return;
}
if (currentDropdownFocusId !== expectedDropdownFocusId) {
return;
}
event?.preventDefault();
event?.stopImmediatePropagation();
event?.preventDefault();
event?.stopImmediatePropagation();
if (skipPersist !== true) {
persistFieldFromFieldInputContext(newValue);
}
if (skipPersist !== true) {
persistFieldFromFieldInputContext(newValue);
}
closeInlineCell();
},
closeInlineCell();
},
[
closeInlineCell,
recordId,
@@ -20,7 +20,7 @@ import { isFieldMorphRelation } from '@/object-record/record-field/ui/types/guar
import { getRecordFieldCardRelationPickerDropdownId } from '@/object-record/record-show/utils/getRecordFieldCardRelationPickerDropdownId';
import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDropdownOpenComponentState';
import { useIsMobile } from '@/ui/utilities/responsive/hooks/useIsMobile';
import { useRecoilComponentValue } from '@/ui/utilities/state/component-state/hooks/useRecoilComponentValue';
import { useRecoilComponentValueV2 } from '@/ui/utilities/state/jotai/hooks/useRecoilComponentValueV2';
import { css } from '@emotion/react';
import styled from '@emotion/styled';
import { CustomError } from 'twenty-shared/utils';
@@ -99,7 +99,7 @@ export const FieldWidgetRelationEditAction = ({
instanceId: scopeInstanceId,
});
const isRelationSelectionDropdownOpen = useRecoilComponentValue(
const isRelationSelectionDropdownOpen = useRecoilComponentValueV2(
isDropdownOpenComponentState,
relationSelectionDropdownId,
);
@@ -32,6 +32,11 @@ export const StyledSettingsCardTitle = styled.div`
margin-bottom: ${({ theme }) => theme.spacing(1)};
`;
export const StyledSettingsCardTextContainer = styled.div`
flex: 1;
min-width: 0;
`;
export const StyledSettingsCardDescription = styled.div`
color: ${({ theme }) => theme.font.color.secondary};
font-size: ${({ theme }) => theme.font.size.sm};
@@ -2,21 +2,26 @@ import {
StyledSettingsCardContent,
StyledSettingsCardDescription,
StyledSettingsCardIcon,
StyledSettingsCardTextContainer,
StyledSettingsCardTitle,
} from '@/settings/components/SettingsOptions/SettingsCardContentBase';
import { SettingsOptionIconCustomizer } from '@/settings/components/SettingsOptions/SettingsOptionIconCustomizer';
import styled from '@emotion/styled';
import { type IconComponent } from 'twenty-ui/display';
import {
type IconComponent,
OverflowingTextWithTooltip,
} from 'twenty-ui/display';
type SettingsOptionCardContentButtonProps = {
Icon?: IconComponent;
title: React.ReactNode;
description?: string | React.ReactNode;
description?: string;
disabled?: boolean;
Button?: React.ReactNode;
};
const StyledButtonContainer = styled.div`
flex-shrink: 0;
margin-left: auto;
`;
@@ -34,12 +39,14 @@ export const SettingsOptionCardContentButton = ({
<SettingsOptionIconCustomizer Icon={Icon} />
</StyledSettingsCardIcon>
)}
<div>
<StyledSettingsCardTextContainer>
<StyledSettingsCardTitle>{title}</StyledSettingsCardTitle>
<StyledSettingsCardDescription>
{description}
</StyledSettingsCardDescription>
</div>
{description && (
<StyledSettingsCardDescription>
<OverflowingTextWithTooltip text={description} />
</StyledSettingsCardDescription>
)}
</StyledSettingsCardTextContainer>
{Button && <StyledButtonContainer>{Button}</StyledButtonContainer>}
</StyledSettingsCardContent>
);
@@ -3,10 +3,14 @@ import {
StyledSettingsCardContent,
StyledSettingsCardDescription,
StyledSettingsCardIcon,
StyledSettingsCardTextContainer,
StyledSettingsCardTitle,
} from '@/settings/components/SettingsOptions/SettingsCardContentBase';
import { SettingsOptionIconCustomizer } from '@/settings/components/SettingsOptions/SettingsOptionIconCustomizer';
import { type IconComponent } from 'twenty-ui/display';
import {
type IconComponent,
OverflowingTextWithTooltip,
} from 'twenty-ui/display';
type SettingsOptionCardContentCounterProps = {
Icon?: IconComponent;
@@ -38,14 +42,14 @@ export const SettingsOptionCardContentCounter = ({
<SettingsOptionIconCustomizer Icon={Icon} />
</StyledSettingsCardIcon>
)}
<div>
<StyledSettingsCardTextContainer>
<StyledSettingsCardTitle>{title}</StyledSettingsCardTitle>
{description && (
<StyledSettingsCardDescription>
{description}
<OverflowingTextWithTooltip text={description} />
</StyledSettingsCardDescription>
)}
</div>
</StyledSettingsCardTextContainer>
<SettingsCounter
value={value}
onChange={onChange}
@@ -2,21 +2,26 @@ import {
StyledSettingsCardContent,
StyledSettingsCardDescription,
StyledSettingsCardIcon,
StyledSettingsCardTextContainer,
StyledSettingsCardTitle,
} from '@/settings/components/SettingsOptions/SettingsCardContentBase';
import { SettingsOptionIconCustomizer } from '@/settings/components/SettingsOptions/SettingsOptionIconCustomizer';
import styled from '@emotion/styled';
import { type IconComponent } from 'twenty-ui/display';
import {
type IconComponent,
OverflowingTextWithTooltip,
} from 'twenty-ui/display';
type SettingsOptionCardContentSelectProps = {
Icon?: IconComponent;
title: React.ReactNode;
description?: string | React.ReactNode;
description?: string;
disabled?: boolean;
children?: React.ReactNode;
};
const StyledSelectContainer = styled.div`
flex-shrink: 0;
justify-content: flex-end;
margin-left: auto;
max-width: 120px;
@@ -36,12 +41,14 @@ export const SettingsOptionCardContentSelect = ({
<SettingsOptionIconCustomizer Icon={Icon} />
</StyledSettingsCardIcon>
)}
<div>
<StyledSettingsCardTextContainer>
<StyledSettingsCardTitle>{title}</StyledSettingsCardTitle>
<StyledSettingsCardDescription>
{description}
</StyledSettingsCardDescription>
</div>
{description && (
<StyledSettingsCardDescription>
<OverflowingTextWithTooltip text={description} />
</StyledSettingsCardDescription>
)}
</StyledSettingsCardTextContainer>
<StyledSelectContainer>{children}</StyledSelectContainer>
</StyledSettingsCardContent>
);
@@ -3,13 +3,17 @@ import {
StyledSettingsCardContent,
StyledSettingsCardDescription,
StyledSettingsCardIcon,
StyledSettingsCardTextContainer,
StyledSettingsCardTitle,
} from '@/settings/components/SettingsOptions/SettingsCardContentBase';
import { SettingsOptionIconCustomizer } from '@/settings/components/SettingsOptions/SettingsOptionIconCustomizer';
import { useTheme } from '@emotion/react';
import styled from '@emotion/styled';
import { useId } from 'react';
import { type IconComponent } from 'twenty-ui/display';
import {
type IconComponent,
OverflowingTextWithTooltip,
} from 'twenty-ui/display';
import { Toggle } from 'twenty-ui/input';
const StyledSettingsCardToggleContent = styled(StyledSettingsCardContent)`
@@ -27,6 +31,7 @@ const StyledSettingsCardToggleButton = styled(Toggle)<{
}>`
align-self: ${({ toggleCentered }) =>
toggleCentered ? 'center' : 'flex-start'};
flex-shrink: 0;
margin-left: auto;
`;
@@ -39,7 +44,7 @@ const StyledSettingsCardToggleCover = styled.span`
type SettingsOptionCardContentToggleProps = {
Icon?: IconComponent;
title: React.ReactNode;
description?: React.ReactNode;
description?: string;
divider?: boolean;
disabled?: boolean;
advancedMode?: boolean;
@@ -70,17 +75,19 @@ export const SettingsOptionCardContentToggle = ({
<SettingsOptionIconCustomizer Icon={Icon} />
</StyledSettingsCardIcon>
)}
<div>
<StyledSettingsCardTextContainer>
<StyledSettingsCardTitle>
<label htmlFor={toggleId}>
{title}
<StyledSettingsCardToggleCover />
</label>
</StyledSettingsCardTitle>
<StyledSettingsCardDescription>
{description}
</StyledSettingsCardDescription>
</div>
{description && (
<StyledSettingsCardDescription>
<OverflowingTextWithTooltip text={description} />
</StyledSettingsCardDescription>
)}
</StyledSettingsCardTextContainer>
<StyledSettingsCardToggleButton
id={toggleId}
value={checked}
@@ -8,7 +8,6 @@ import { SettingsOptionCardContentSelect } from '@/settings/components/SettingsO
import { ADVANCED_SETTINGS_ANIMATION_DURATION } from '@/settings/constants/AdvancedSettingsAnimationDurations';
import { useDateSettingsFormInitialValues } from '@/settings/data-model/fields/forms/date/hooks/useDateSettingsFormInitialValues';
import { getDisplayFormatLabel } from '@/settings/data-model/fields/forms/date/utils/getDisplayFormatLabel';
import { getDisplayFormatSelectDescription } from '@/settings/data-model/fields/forms/date/utils/getDisplayFormatSelectDescription';
import { Select } from '@/ui/input/components/Select';
import { SettingsTextInput } from '@/ui/input/components/SettingsTextInput';
import styled from '@emotion/styled';
@@ -71,7 +70,9 @@ export const SettingsDataModelFieldDateForm = ({
isDateFieldCustomDisplayFormat(activeDisplayFormat);
const displayFormatSelectDescription =
getDisplayFormatSelectDescription(activeDisplayFormat);
activeDisplayFormat === FieldDateDisplayFormat.CUSTOM
? t`Enter in Unicode format`
: t`Choose the format used to display date value`;
return (
<>
@@ -1,24 +0,0 @@
import { FieldDateDisplayFormat } from '@/object-record/record-field/ui/types/FieldMetadata';
import { Trans } from '@lingui/react/macro';
export const getDisplayFormatSelectDescription = (
selectedDisplayFormat: FieldDateDisplayFormat,
) => {
if (selectedDisplayFormat === FieldDateDisplayFormat.CUSTOM) {
return (
<Trans>
Enter in{' '}
<a
href="https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table"
target="_blank"
rel="noopener noreferrer"
style={{ textDecoration: 'underline', color: 'inherit' }}
>
Unicode
</a>{' '}
format
</Trans>
);
}
return <Trans>Choose the format used to display date value</Trans>;
};
@@ -1,17 +1,14 @@
import { Trans, useLingui } from '@lingui/react/macro';
import { useLingui } from '@lingui/react/macro';
import { useFormContext } from 'react-hook-form';
import { useRecoilValue } from 'recoil';
import { DOCUMENTATION_PATHS } from 'twenty-shared/constants';
import { FieldMetadataType } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { IconLink } from 'twenty-ui/display';
import { currentWorkspaceMemberState } from '@/auth/states/currentWorkspaceMemberState';
import { useObjectMetadataItem } from '@/object-metadata/hooks/useObjectMetadataItem';
import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems';
import { SettingsOptionCardContentSelect } from '@/settings/components/SettingsOptions/SettingsOptionCardContentSelect';
import { SettingsOptionCardContentToggle } from '@/settings/components/SettingsOptions/SettingsOptionCardContentToggle';
import { getDocumentationUrl } from '@/support/utils/getDocumentationUrl';
import { Select } from '@/ui/input/components/Select';
import { isAdvancedModeEnabledState } from '@/ui/navigation/navigation-drawer/states/isAdvancedModeEnabledState';
import { RelationType } from '~/generated-metadata/graphql';
@@ -29,12 +26,6 @@ export const SettingsDataModelFieldRelationJunctionForm = ({
useFormContext<SettingsDataModelFieldEditFormValues>();
const isAdvancedModeEnabled = useRecoilValue(isAdvancedModeEnabledState);
const currentWorkspaceMember = useRecoilValue(currentWorkspaceMemberState);
const documentationUrl = getDocumentationUrl({
locale: currentWorkspaceMember?.locale,
path: DOCUMENTATION_PATHS.USER_GUIDE_DATA_MODEL_HOW_TOS_CREATE_MANY_TO_MANY_RELATIONS,
});
const { objectMetadataItem: sourceObjectMetadataItem } =
useObjectMetadataItem({ objectNameSingular });
@@ -163,19 +154,7 @@ export const SettingsDataModelFieldRelationJunctionForm = ({
<SettingsOptionCardContentToggle
Icon={IconLink}
title={t`This is a relation to a Junction Object`}
description={
<Trans>
Build many-to-many relations.{' '}
<a
href={documentationUrl}
target="_blank"
rel="noopener noreferrer"
style={{ textDecoration: 'underline', color: 'inherit' }}
>
Learn more
</a>
</Trans>
}
description={t`Build many-to-many relations`}
checked={isJunctionConfigEnabled}
onChange={handleJunctionToggle}
divider={isJunctionConfigEnabled}
@@ -175,12 +175,11 @@ export const SettingsSecurityAuthProvidersOptionsList = () => {
description={t`Allow the invitation of new users by sharing an invite link.`}
checked={currentWorkspace.isPublicInviteLinkEnabled}
advancedMode
divider
onChange={() =>
handleChange(!currentWorkspace.isPublicInviteLinkEnabled)
}
/>
</Card>
<Card rounded>
<Toggle2FA />
</Card>
</>

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