Compare commits

..
Author SHA1 Message Date
Abdul Rahman c7bc3542e4 Refactor folder navigation menu item URL matching logic
- Simplified the logic for determining if a folder navigation menu item matches the current URL by consolidating the retrieval of object metadata.
- Removed redundant checks and streamlined the flow for better readability and maintainability.
2026-04-13 19:55:10 +05:30
Abdul Rahman 8e53ba0f4a Merge branch 'main' into fix/sidebar-nav-active-on-record-show 2026-04-13 19:52:23 +05:30
Abdul Rahman 00bad2cb99 Refactor selected navigation menu item index resolution
- Updated the logic in `resolveFolderSelectedNavigationMenuItemIndex` to improve clarity and maintainability by introducing a `selectedIndex` variable.
- Simplified the return logic to ensure the correct index is returned based on the active navigation item checks.
- These changes enhance the overall navigation handling within the folder structure of the menu.
2026-04-09 19:09:28 +05:30
Abdul Rahman 6e05bbdf12 Refactor active navigation item handling and introduce utility functions
- Moved the `ActiveNavigationItem` type definition to a new file for better organization and clarity.
- Updated `activeNavigationItemState` to utilize the new type definition, enhancing type safety.
- Refactored navigation logic in `NavigationDrawerItemForObjectMetadataItem` to use the new `isNavigationItemActive` utility function, simplifying the active state determination.
- Introduced `shouldShowOpenedSection` utility to streamline the logic for determining if a section should be expanded based on the active navigation item.

These changes improve the maintainability and clarity of the navigation handling within the components.
2026-04-09 19:02:25 +05:30
Abdul Rahman 65db4d8d9a Refactor navigation menu item folder handling
- Introduced new utility functions `doesFolderNavigationMenuItemMatchUrlForSelection` and `resolveFolderSelectedNavigationMenuItemIndex` to streamline the logic for matching folder navigation items with the current URL and determining the selected item index.
- Updated `useNavigationMenuItemFolderOpenState` to utilize the new functions, enhancing clarity and maintainability of the navigation state management.
- Removed deprecated logic related to active navigation item checks, contributing to a cleaner implementation.

These changes improve the overall navigation handling within the folder structure of the menu.
2026-04-09 16:52:45 +05:30
Abdul Rahman 6af013b1dd Refactor workspace navigation menu item handling
- Renamed `objectMetadataIdsInWorkspaceNav` to `objectMetadataIdsWithObjectWorkspaceItem` for improved clarity.
- Simplified filtering logic in `useWorkspaceNavigationMenuItems` to focus solely on OBJECT types.
- Enhanced `NavigationDrawerOpenedSection` to utilize the updated hook and improve the logic for determining when to show the opened section based on active navigation state.

These changes contribute to better readability and maintainability of the navigation logic within the components.
2026-04-09 08:03:33 +05:30
Abdul Rahman 74232f718e Refactor navigation menu item open state logic
- Simplified the logic for determining the first non-link item in the navigation menu, improving readability and maintainability.
- Updated the active navigation item checks to enhance clarity, replacing the previous method with a more straightforward function for matching navigation items to the active object.
- Improved the handling of selected navigation menu item index to reflect the updated logic for active navigation items.

These changes contribute to a clearer and more efficient navigation handling within the component.
2026-04-09 07:11:27 +05:30
Abdul Rahman 6dbec4a7e2 Refactor variable names for clarity in NavigationDrawerItemForObjectMetadataItem
- Updated variable names to improve readability and maintainability, changing `isOnRecordShowPage` to `isOnObjectRecordShowPage` and `isOnIndexPage` to `isOnObjectIndexPage`.
- Enhanced the logic for determining the current path matching object metadata, contributing to clearer navigation handling within the component.
2026-04-09 06:56:42 +05:30
Abdul Rahman 9f55948785 Refactor active navigation item logic in NavigationDrawerItemForObjectMetadataItem
- Enhanced the calculation of active navigation item state by introducing checks for the current path, improving the accuracy of the `isActive` determination.
- Simplified the logic for determining if the current path matches the object metadata, contributing to better maintainability and clarity in the component's navigation handling.
2026-04-09 06:51:53 +05:30
Abdul Rahman ff7cf245c4 Refactor active state logic in NavigationDrawerItemForObjectMetadataItem
- Updated the `isActive` calculation to include a check for `navItemId` when `isAtomForCurrentObject` is true, enhancing the accuracy of active navigation item detection.
- This change improves the clarity and maintainability of the component's navigation logic, aligning with recent refactoring efforts.
2026-04-08 20:38:22 +05:30
Abdul Rahman aae3f4301b Remove unused handleBeforeNavigation call in NavigationDrawerItem component
- Eliminated the `handleBeforeNavigation` function call from the `handleExternalLinkClick` method to streamline the navigation logic.
- This change enhances code clarity by removing unnecessary function calls, contributing to improved maintainability of the component.

These updates simplify the navigation handling within the `NavigationDrawerItem`, aligning with recent refactoring efforts.
2026-04-08 20:35:36 +05:30
Abdul Rahman a3d7ef76cb Enhance workspace navigation menu item logic
- Updated `useWorkspaceNavigationMenuItems` to include support for both OBJECT and VIEW types in the navigation menu.
- Integrated `getObjectMetadataForNavigationMenuItem` to retrieve metadata for navigation items, improving the handling of object and view metadata.
- Utilized `useAtomStateValue` to access `objectMetadataItems` and `views`, enhancing state management within the hook.

These changes improve the flexibility and accuracy of the workspace navigation menu, allowing for better integration of different item types.
2026-04-08 19:39:08 +05:30
Abdul Rahman af66b6acc8 Remove unused navigationState prop from NavigationDrawer components and related hooks
- Eliminated the `navigationState` prop from `NavigationDrawerItem`, `NavigationDrawerSubItem`, and `useMouseDownNavigation` to streamline navigation logic.
- Updated the navigation logic to remove unnecessary state handling, enhancing clarity and maintainability.

These changes simplify the navigation components and improve overall code quality.
2026-04-08 19:28:34 +05:30
Abdul Rahman 25ee116332 Add active navigation item state management and enhance navigation components
- Introduced `activeNavigationItemState` to manage the currently active navigation item across components.
- Updated `NavigationMenuItemFolderSubItem`, `NavigationDrawerItemForObjectMetadataItem`, and related components to utilize the new state for improved navigation tracking.
- Enhanced `onBeforeNavigation` functionality to set the active navigation item before routing, ensuring consistent state management.
- Refactored navigation logic to improve clarity and maintainability.

These changes enhance user experience by providing better tracking of active navigation items and streamlining navigation interactions.
2026-04-08 19:25:23 +05:30
Abdul Rahman 1b2e4899a2 Refactor navigation menu item logic and enhance state management
- Simplified `isLocationMatchingNavigationMenuItem` by removing unnecessary parameters and streamlining the matching logic.
- Updated components to utilize the new `navigationState` prop for better state management across navigation items.
- Enhanced `NavigationDrawerItem` and related components to support active navigation item tracking.
- Improved the `useMouseDownNavigation` hook to pass navigation state during routing.

These changes improve code clarity, maintainability, and user experience in navigation interactions.
2026-04-08 18:55:08 +05:30
Abdul Rahman ba12a26541 Refactor navigation path matching logic
- Updated `isLocationMatchingNavigationMenuItem` to utilize the new `matchesRecordShowPathForObject` utility for improved path matching.
- Introduced `matchesRecordShowPathForObject` to encapsulate the logic for checking if a pathname matches the record show path format.
- Adjusted `NavigationDrawerItemForObjectMetadataItem` to leverage the new matching utility, enhancing code clarity and maintainability.

This refactor streamlines the navigation matching process and promotes code reuse.
2026-04-03 11:26:59 +05:30
Abdul Rahman 918fdcbf87 Enhance navigation menu item matching logic
- Updated `isLocationMatchingNavigationMenuItem` to include additional parameters for better matching of object record show paths.
- Introduced logging for debugging navigation matches, capturing relevant data for analysis.
- Added tests to ensure correct behavior for object navigation items on record show pages, distinguishing between view-only and object pins.
- Refactored related components to utilize the updated matching logic.

This improves the accuracy of navigation item states and enhances debugging capabilities.
2026-04-03 11:05:21 +05:30
683 changed files with 11540 additions and 12792 deletions
+3 -4
View File
@@ -69,14 +69,13 @@ jobs:
- name: Server / Start
run: |
npx nx run twenty-server:start:ci &
npx nx start twenty-server &
echo "Waiting for server to be ready..."
timeout 60 bash -c 'until curl -sf http://localhost:3000/healthz; do sleep 2; done'
timeout 60 bash -c 'until curl -s http://localhost:3000/health; do sleep 2; done'
- name: Start worker
working-directory: packages/twenty-server
run: |
NODE_ENV=development node dist/queue-worker/queue-worker.js &
npx nx run twenty-server:worker &
echo "Worker started"
- name: Zapier / Build
@@ -7,7 +7,9 @@
"npm": "please-use-yarn",
"yarn": ">=4.0.2"
},
"keywords": [],
"keywords": [
"twenty-app"
],
"packageManager": "yarn@4.9.2",
"scripts": {
"twenty": "twenty",
@@ -583,7 +583,6 @@ type ViewField {
workspaceId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
isActive: Boolean!
deletedAt: DateTime
isOverridden: Boolean @deprecated(reason: "isOverridden is deprecated")
}
@@ -692,7 +691,6 @@ type ViewFieldGroup {
workspaceId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
isActive: Boolean!
deletedAt: DateTime
viewFields: [ViewField!]!
isOverridden: Boolean! @deprecated(reason: "isOverridden is deprecated")
@@ -901,7 +899,6 @@ type PageLayoutWidget {
conditionalAvailabilityExpression: String
createdAt: DateTime!
updatedAt: DateTime!
isActive: Boolean!
deletedAt: DateTime
isOverridden: Boolean @deprecated(reason: "isOverridden is deprecated")
}
@@ -1237,7 +1234,6 @@ type PageLayoutTab {
layoutMode: PageLayoutTabLayoutMode
createdAt: DateTime!
updatedAt: DateTime!
isActive: Boolean!
deletedAt: DateTime
isOverridden: Boolean @deprecated(reason: "isOverridden is deprecated")
}
@@ -1596,6 +1592,7 @@ enum FeatureFlagKey {
IS_CONNECTED_ACCOUNT_MIGRATED
IS_RICH_TEXT_V1_MIGRATED
IS_RECORD_PAGE_LAYOUT_GLOBAL_EDITION_ENABLED
IS_RECORD_TABLE_WIDGET_ENABLED
IS_DATASOURCE_MIGRATED
}
@@ -2197,18 +2194,30 @@ type DeletedWorkspaceMember {
userWorkspaceId: UUID
}
type Relation {
type: RelationType!
sourceObjectMetadata: Object!
targetObjectMetadata: Object!
sourceFieldMetadata: Field!
targetFieldMetadata: Field!
type BillingEntitlement {
key: BillingEntitlementKey!
value: Boolean!
}
"""Relation type"""
enum RelationType {
ONE_TO_MANY
MANY_TO_ONE
enum BillingEntitlementKey {
SSO
CUSTOM_DOMAIN
RLS
AUDIT_LOGS
}
type DomainRecord {
validationType: String!
type: String!
status: String!
key: String!
value: String!
}
type DomainValidRecords {
id: UUID!
domain: String!
records: [DomainRecord!]!
}
type IndexEdge {
@@ -2310,6 +2319,25 @@ type ObjectFieldsConnection {
edges: [FieldEdge!]!
}
type UpsertRowLevelPermissionPredicatesResult {
predicates: [RowLevelPermissionPredicate!]!
predicateGroups: [RowLevelPermissionPredicateGroup!]!
}
type Relation {
type: RelationType!
sourceObjectMetadata: Object!
targetObjectMetadata: Object!
sourceFieldMetadata: Field!
targetFieldMetadata: Field!
}
"""Relation type"""
enum RelationType {
ONE_TO_MANY
MANY_TO_ONE
}
type FieldConnection {
"""Paging information"""
pageInfo: PageInfo!
@@ -2318,37 +2346,6 @@ type FieldConnection {
edges: [FieldEdge!]!
}
type BillingEntitlement {
key: BillingEntitlementKey!
value: Boolean!
}
enum BillingEntitlementKey {
SSO
CUSTOM_DOMAIN
RLS
AUDIT_LOGS
}
type DomainRecord {
validationType: String!
type: String!
status: String!
key: String!
value: String!
}
type DomainValidRecords {
id: UUID!
domain: String!
records: [DomainRecord!]!
}
type UpsertRowLevelPermissionPredicatesResult {
predicates: [RowLevelPermissionPredicate!]!
predicateGroups: [RowLevelPermissionPredicateGroup!]!
}
type AuthToken {
token: String!
expiresAt: DateTime!
@@ -415,7 +415,6 @@ export interface ViewField {
workspaceId: Scalars['UUID']
createdAt: Scalars['DateTime']
updatedAt: Scalars['DateTime']
isActive: Scalars['Boolean']
deletedAt?: Scalars['DateTime']
/** @deprecated isOverridden is deprecated */
isOverridden?: Scalars['Boolean']
@@ -493,7 +492,6 @@ export interface ViewFieldGroup {
workspaceId: Scalars['UUID']
createdAt: Scalars['DateTime']
updatedAt: Scalars['DateTime']
isActive: Scalars['Boolean']
deletedAt?: Scalars['DateTime']
viewFields: ViewField[]
/** @deprecated isOverridden is deprecated */
@@ -676,7 +674,6 @@ export interface PageLayoutWidget {
conditionalAvailabilityExpression?: Scalars['String']
createdAt: Scalars['DateTime']
updatedAt: Scalars['DateTime']
isActive: Scalars['Boolean']
deletedAt?: Scalars['DateTime']
/** @deprecated isOverridden is deprecated */
isOverridden?: Scalars['Boolean']
@@ -962,7 +959,6 @@ export interface PageLayoutTab {
layoutMode?: PageLayoutTabLayoutMode
createdAt: Scalars['DateTime']
updatedAt: Scalars['DateTime']
isActive: Scalars['Boolean']
deletedAt?: Scalars['DateTime']
/** @deprecated isOverridden is deprecated */
isOverridden?: Scalars['Boolean']
@@ -1293,7 +1289,7 @@ export interface FeatureFlag {
__typename: 'FeatureFlag'
}
export type FeatureFlagKey = 'IS_UNIQUE_INDEXES_ENABLED' | 'IS_JSON_FILTER_ENABLED' | 'IS_AI_ENABLED' | 'IS_COMMAND_MENU_ITEM_ENABLED' | 'IS_MARKETPLACE_SETTING_TAB_VISIBLE' | 'IS_RECORD_PAGE_LAYOUT_EDITING_ENABLED' | 'IS_PUBLIC_DOMAIN_ENABLED' | 'IS_EMAILING_DOMAIN_ENABLED' | 'IS_JUNCTION_RELATIONS_ENABLED' | 'IS_DRAFT_EMAIL_ENABLED' | 'IS_CONNECTED_ACCOUNT_MIGRATED' | 'IS_RICH_TEXT_V1_MIGRATED' | 'IS_RECORD_PAGE_LAYOUT_GLOBAL_EDITION_ENABLED' | 'IS_DATASOURCE_MIGRATED'
export type FeatureFlagKey = 'IS_UNIQUE_INDEXES_ENABLED' | 'IS_JSON_FILTER_ENABLED' | 'IS_AI_ENABLED' | 'IS_COMMAND_MENU_ITEM_ENABLED' | 'IS_MARKETPLACE_SETTING_TAB_VISIBLE' | 'IS_RECORD_PAGE_LAYOUT_EDITING_ENABLED' | 'IS_PUBLIC_DOMAIN_ENABLED' | 'IS_EMAILING_DOMAIN_ENABLED' | 'IS_JUNCTION_RELATIONS_ENABLED' | 'IS_DRAFT_EMAIL_ENABLED' | 'IS_CONNECTED_ACCOUNT_MIGRATED' | 'IS_RICH_TEXT_V1_MIGRATED' | 'IS_RECORD_PAGE_LAYOUT_GLOBAL_EDITION_ENABLED' | 'IS_RECORD_TABLE_WIDGET_ENABLED' | 'IS_DATASOURCE_MIGRATED'
export interface WorkspaceUrls {
customUrl?: Scalars['String']
@@ -1883,18 +1879,29 @@ export interface DeletedWorkspaceMember {
__typename: 'DeletedWorkspaceMember'
}
export interface Relation {
type: RelationType
sourceObjectMetadata: Object
targetObjectMetadata: Object
sourceFieldMetadata: Field
targetFieldMetadata: Field
__typename: 'Relation'
export interface BillingEntitlement {
key: BillingEntitlementKey
value: Scalars['Boolean']
__typename: 'BillingEntitlement'
}
export type BillingEntitlementKey = 'SSO' | 'CUSTOM_DOMAIN' | 'RLS' | 'AUDIT_LOGS'
/** Relation type */
export type RelationType = 'ONE_TO_MANY' | 'MANY_TO_ONE'
export interface DomainRecord {
validationType: Scalars['String']
type: Scalars['String']
status: Scalars['String']
key: Scalars['String']
value: Scalars['String']
__typename: 'DomainRecord'
}
export interface DomainValidRecords {
id: Scalars['UUID']
domain: Scalars['String']
records: DomainRecord[]
__typename: 'DomainValidRecords'
}
export interface IndexEdge {
/** The node containing the Index */
@@ -1994,6 +2001,25 @@ export interface ObjectFieldsConnection {
__typename: 'ObjectFieldsConnection'
}
export interface UpsertRowLevelPermissionPredicatesResult {
predicates: RowLevelPermissionPredicate[]
predicateGroups: RowLevelPermissionPredicateGroup[]
__typename: 'UpsertRowLevelPermissionPredicatesResult'
}
export interface Relation {
type: RelationType
sourceObjectMetadata: Object
targetObjectMetadata: Object
sourceFieldMetadata: Field
targetFieldMetadata: Field
__typename: 'Relation'
}
/** Relation type */
export type RelationType = 'ONE_TO_MANY' | 'MANY_TO_ONE'
export interface FieldConnection {
/** Paging information */
pageInfo: PageInfo
@@ -2002,36 +2028,6 @@ export interface FieldConnection {
__typename: 'FieldConnection'
}
export interface BillingEntitlement {
key: BillingEntitlementKey
value: Scalars['Boolean']
__typename: 'BillingEntitlement'
}
export type BillingEntitlementKey = 'SSO' | 'CUSTOM_DOMAIN' | 'RLS' | 'AUDIT_LOGS'
export interface DomainRecord {
validationType: Scalars['String']
type: Scalars['String']
status: Scalars['String']
key: Scalars['String']
value: Scalars['String']
__typename: 'DomainRecord'
}
export interface DomainValidRecords {
id: Scalars['UUID']
domain: Scalars['String']
records: DomainRecord[]
__typename: 'DomainValidRecords'
}
export interface UpsertRowLevelPermissionPredicatesResult {
predicates: RowLevelPermissionPredicate[]
predicateGroups: RowLevelPermissionPredicateGroup[]
__typename: 'UpsertRowLevelPermissionPredicatesResult'
}
export interface AuthToken {
token: Scalars['String']
expiresAt: Scalars['DateTime']
@@ -3635,7 +3631,6 @@ export interface ViewFieldGenqlSelection{
workspaceId?: boolean | number
createdAt?: boolean | number
updatedAt?: boolean | number
isActive?: boolean | number
deletedAt?: boolean | number
/** @deprecated isOverridden is deprecated */
isOverridden?: boolean | number
@@ -3710,7 +3705,6 @@ export interface ViewFieldGroupGenqlSelection{
workspaceId?: boolean | number
createdAt?: boolean | number
updatedAt?: boolean | number
isActive?: boolean | number
deletedAt?: boolean | number
viewFields?: ViewFieldGenqlSelection
/** @deprecated isOverridden is deprecated */
@@ -3885,7 +3879,6 @@ export interface PageLayoutWidgetGenqlSelection{
conditionalAvailabilityExpression?: boolean | number
createdAt?: boolean | number
updatedAt?: boolean | number
isActive?: boolean | number
deletedAt?: boolean | number
/** @deprecated isOverridden is deprecated */
isOverridden?: boolean | number
@@ -4198,7 +4191,6 @@ export interface PageLayoutTabGenqlSelection{
layoutMode?: boolean | number
createdAt?: boolean | number
updatedAt?: boolean | number
isActive?: boolean | number
deletedAt?: boolean | number
/** @deprecated isOverridden is deprecated */
isOverridden?: boolean | number
@@ -5157,12 +5149,27 @@ export interface DeletedWorkspaceMemberGenqlSelection{
__scalar?: boolean | number
}
export interface RelationGenqlSelection{
export interface BillingEntitlementGenqlSelection{
key?: boolean | number
value?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface DomainRecordGenqlSelection{
validationType?: boolean | number
type?: boolean | number
sourceObjectMetadata?: ObjectGenqlSelection
targetObjectMetadata?: ObjectGenqlSelection
sourceFieldMetadata?: FieldGenqlSelection
targetFieldMetadata?: FieldGenqlSelection
status?: boolean | number
key?: boolean | number
value?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface DomainValidRecordsGenqlSelection{
id?: boolean | number
domain?: boolean | number
records?: DomainRecordGenqlSelection
__typename?: boolean | number
__scalar?: boolean | number
}
@@ -5277,6 +5284,23 @@ export interface ObjectFieldsConnectionGenqlSelection{
__scalar?: boolean | number
}
export interface UpsertRowLevelPermissionPredicatesResultGenqlSelection{
predicates?: RowLevelPermissionPredicateGenqlSelection
predicateGroups?: RowLevelPermissionPredicateGroupGenqlSelection
__typename?: boolean | number
__scalar?: boolean | number
}
export interface RelationGenqlSelection{
type?: boolean | number
sourceObjectMetadata?: ObjectGenqlSelection
targetObjectMetadata?: ObjectGenqlSelection
sourceFieldMetadata?: FieldGenqlSelection
targetFieldMetadata?: FieldGenqlSelection
__typename?: boolean | number
__scalar?: boolean | number
}
export interface FieldConnectionGenqlSelection{
/** Paging information */
pageInfo?: PageInfoGenqlSelection
@@ -5286,38 +5310,6 @@ export interface FieldConnectionGenqlSelection{
__scalar?: boolean | number
}
export interface BillingEntitlementGenqlSelection{
key?: boolean | number
value?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface DomainRecordGenqlSelection{
validationType?: boolean | number
type?: boolean | number
status?: boolean | number
key?: boolean | number
value?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface DomainValidRecordsGenqlSelection{
id?: boolean | number
domain?: boolean | number
records?: DomainRecordGenqlSelection
__typename?: boolean | number
__scalar?: boolean | number
}
export interface UpsertRowLevelPermissionPredicatesResultGenqlSelection{
predicates?: RowLevelPermissionPredicateGenqlSelection
predicateGroups?: RowLevelPermissionPredicateGroupGenqlSelection
__typename?: boolean | number
__scalar?: boolean | number
}
export interface AuthTokenGenqlSelection{
token?: boolean | number
expiresAt?: boolean | number
@@ -8240,10 +8232,26 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
const Relation_possibleTypes: string[] = ['Relation']
export const isRelation = (obj?: { __typename?: any } | null): obj is Relation => {
if (!obj?.__typename) throw new Error('__typename is missing in "isRelation"')
return Relation_possibleTypes.includes(obj.__typename)
const BillingEntitlement_possibleTypes: string[] = ['BillingEntitlement']
export const isBillingEntitlement = (obj?: { __typename?: any } | null): obj is BillingEntitlement => {
if (!obj?.__typename) throw new Error('__typename is missing in "isBillingEntitlement"')
return BillingEntitlement_possibleTypes.includes(obj.__typename)
}
const DomainRecord_possibleTypes: string[] = ['DomainRecord']
export const isDomainRecord = (obj?: { __typename?: any } | null): obj is DomainRecord => {
if (!obj?.__typename) throw new Error('__typename is missing in "isDomainRecord"')
return DomainRecord_possibleTypes.includes(obj.__typename)
}
const DomainValidRecords_possibleTypes: string[] = ['DomainValidRecords']
export const isDomainValidRecords = (obj?: { __typename?: any } | null): obj is DomainValidRecords => {
if (!obj?.__typename) throw new Error('__typename is missing in "isDomainValidRecords"')
return DomainValidRecords_possibleTypes.includes(obj.__typename)
}
@@ -8344,38 +8352,6 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
const FieldConnection_possibleTypes: string[] = ['FieldConnection']
export const isFieldConnection = (obj?: { __typename?: any } | null): obj is FieldConnection => {
if (!obj?.__typename) throw new Error('__typename is missing in "isFieldConnection"')
return FieldConnection_possibleTypes.includes(obj.__typename)
}
const BillingEntitlement_possibleTypes: string[] = ['BillingEntitlement']
export const isBillingEntitlement = (obj?: { __typename?: any } | null): obj is BillingEntitlement => {
if (!obj?.__typename) throw new Error('__typename is missing in "isBillingEntitlement"')
return BillingEntitlement_possibleTypes.includes(obj.__typename)
}
const DomainRecord_possibleTypes: string[] = ['DomainRecord']
export const isDomainRecord = (obj?: { __typename?: any } | null): obj is DomainRecord => {
if (!obj?.__typename) throw new Error('__typename is missing in "isDomainRecord"')
return DomainRecord_possibleTypes.includes(obj.__typename)
}
const DomainValidRecords_possibleTypes: string[] = ['DomainValidRecords']
export const isDomainValidRecords = (obj?: { __typename?: any } | null): obj is DomainValidRecords => {
if (!obj?.__typename) throw new Error('__typename is missing in "isDomainValidRecords"')
return DomainValidRecords_possibleTypes.includes(obj.__typename)
}
const UpsertRowLevelPermissionPredicatesResult_possibleTypes: string[] = ['UpsertRowLevelPermissionPredicatesResult']
export const isUpsertRowLevelPermissionPredicatesResult = (obj?: { __typename?: any } | null): obj is UpsertRowLevelPermissionPredicatesResult => {
if (!obj?.__typename) throw new Error('__typename is missing in "isUpsertRowLevelPermissionPredicatesResult"')
@@ -8384,6 +8360,22 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
const Relation_possibleTypes: string[] = ['Relation']
export const isRelation = (obj?: { __typename?: any } | null): obj is Relation => {
if (!obj?.__typename) throw new Error('__typename is missing in "isRelation"')
return Relation_possibleTypes.includes(obj.__typename)
}
const FieldConnection_possibleTypes: string[] = ['FieldConnection']
export const isFieldConnection = (obj?: { __typename?: any } | null): obj is FieldConnection => {
if (!obj?.__typename) throw new Error('__typename is missing in "isFieldConnection"')
return FieldConnection_possibleTypes.includes(obj.__typename)
}
const AuthToken_possibleTypes: string[] = ['AuthToken']
export const isAuthToken = (obj?: { __typename?: any } | null): obj is AuthToken => {
if (!obj?.__typename) throw new Error('__typename is missing in "isAuthToken"')
@@ -9478,6 +9470,7 @@ export const enumFeatureFlagKey = {
IS_CONNECTED_ACCOUNT_MIGRATED: 'IS_CONNECTED_ACCOUNT_MIGRATED' as const,
IS_RICH_TEXT_V1_MIGRATED: 'IS_RICH_TEXT_V1_MIGRATED' as const,
IS_RECORD_PAGE_LAYOUT_GLOBAL_EDITION_ENABLED: 'IS_RECORD_PAGE_LAYOUT_GLOBAL_EDITION_ENABLED' as const,
IS_RECORD_TABLE_WIDGET_ENABLED: 'IS_RECORD_TABLE_WIDGET_ENABLED' as const,
IS_DATASOURCE_MIGRATED: 'IS_DATASOURCE_MIGRATED' as const
}
@@ -9584,11 +9577,6 @@ export const enumQueueMetricsTimeRange = {
OneHour: 'OneHour' as const
}
export const enumRelationType = {
ONE_TO_MANY: 'ONE_TO_MANY' as const,
MANY_TO_ONE: 'MANY_TO_ONE' as const
}
export const enumBillingEntitlementKey = {
SSO: 'SSO' as const,
CUSTOM_DOMAIN: 'CUSTOM_DOMAIN' as const,
@@ -9596,6 +9584,11 @@ export const enumBillingEntitlementKey = {
AUDIT_LOGS: 'AUDIT_LOGS' as const
}
export const enumRelationType = {
ONE_TO_MANY: 'ONE_TO_MANY' as const,
MANY_TO_ONE: 'MANY_TO_ONE' as const
}
export const enumEmailingDomainDriver = {
AWS_SES: 'AWS_SES' as const
}
@@ -63,7 +63,7 @@ export default {
209,
221,
238,
253,
255,
292,
293,
303,
@@ -789,10 +789,10 @@ export default {
3
],
"relation": [
237
254
],
"morphRelations": [
237
254
],
"object": [
46
@@ -851,7 +851,7 @@ export default {
36
],
"objectMetadata": [
245,
247,
{
"paging": [
39,
@@ -864,7 +864,7 @@ export default {
}
],
"indexFieldMetadatas": [
243,
245,
{
"paging": [
39,
@@ -1109,7 +1109,7 @@ export default {
37
],
"fields": [
250,
252,
{
"paging": [
39,
@@ -1122,7 +1122,7 @@ export default {
}
],
"indexMetadatas": [
248,
250,
{
"paging": [
39,
@@ -1283,9 +1283,6 @@ export default {
"updatedAt": [
4
],
"isActive": [
6
],
"deletedAt": [
4
],
@@ -1459,9 +1456,6 @@ export default {
"updatedAt": [
4
],
"isActive": [
6
],
"deletedAt": [
4
],
@@ -1709,7 +1703,7 @@ export default {
131
],
"billingEntitlements": [
252
237
],
"hasValidEnterpriseKey": [
6
@@ -1909,9 +1903,6 @@ export default {
"updatedAt": [
4
],
"isActive": [
6
],
"deletedAt": [
4
],
@@ -2570,9 +2561,6 @@ export default {
"updatedAt": [
4
],
"isActive": [
6
],
"deletedAt": [
4
],
@@ -4431,179 +4419,9 @@ export default {
1
]
},
"Relation": {
"type": [
238
],
"sourceObjectMetadata": [
46
],
"targetObjectMetadata": [
46
],
"sourceFieldMetadata": [
34
],
"targetFieldMetadata": [
34
],
"__typename": [
1
]
},
"RelationType": {},
"IndexEdge": {
"node": [
37
],
"cursor": [
40
],
"__typename": [
1
]
},
"PageInfo": {
"hasNextPage": [
6
],
"hasPreviousPage": [
6
],
"startCursor": [
40
],
"endCursor": [
40
],
"__typename": [
1
]
},
"IndexConnection": {
"pageInfo": [
240
],
"edges": [
239
],
"__typename": [
1
]
},
"IndexFieldEdge": {
"node": [
36
],
"cursor": [
40
],
"__typename": [
1
]
},
"IndexIndexFieldMetadatasConnection": {
"pageInfo": [
240
],
"edges": [
242
],
"__typename": [
1
]
},
"ObjectEdge": {
"node": [
46
],
"cursor": [
40
],
"__typename": [
1
]
},
"IndexObjectMetadataConnection": {
"pageInfo": [
240
],
"edges": [
244
],
"__typename": [
1
]
},
"ObjectRecordCount": {
"objectNamePlural": [
1
],
"totalCount": [
21
],
"__typename": [
1
]
},
"ObjectConnection": {
"pageInfo": [
240
],
"edges": [
244
],
"__typename": [
1
]
},
"ObjectIndexMetadatasConnection": {
"pageInfo": [
240
],
"edges": [
239
],
"__typename": [
1
]
},
"FieldEdge": {
"node": [
34
],
"cursor": [
40
],
"__typename": [
1
]
},
"ObjectFieldsConnection": {
"pageInfo": [
240
],
"edges": [
249
],
"__typename": [
1
]
},
"FieldConnection": {
"pageInfo": [
240
],
"edges": [
249
],
"__typename": [
1
]
},
"BillingEntitlement": {
"key": [
253
238
],
"value": [
6
@@ -4641,7 +4459,145 @@ export default {
1
],
"records": [
254
239
],
"__typename": [
1
]
},
"IndexEdge": {
"node": [
37
],
"cursor": [
40
],
"__typename": [
1
]
},
"PageInfo": {
"hasNextPage": [
6
],
"hasPreviousPage": [
6
],
"startCursor": [
40
],
"endCursor": [
40
],
"__typename": [
1
]
},
"IndexConnection": {
"pageInfo": [
242
],
"edges": [
241
],
"__typename": [
1
]
},
"IndexFieldEdge": {
"node": [
36
],
"cursor": [
40
],
"__typename": [
1
]
},
"IndexIndexFieldMetadatasConnection": {
"pageInfo": [
242
],
"edges": [
244
],
"__typename": [
1
]
},
"ObjectEdge": {
"node": [
46
],
"cursor": [
40
],
"__typename": [
1
]
},
"IndexObjectMetadataConnection": {
"pageInfo": [
242
],
"edges": [
246
],
"__typename": [
1
]
},
"ObjectRecordCount": {
"objectNamePlural": [
1
],
"totalCount": [
21
],
"__typename": [
1
]
},
"ObjectConnection": {
"pageInfo": [
242
],
"edges": [
246
],
"__typename": [
1
]
},
"ObjectIndexMetadatasConnection": {
"pageInfo": [
242
],
"edges": [
241
],
"__typename": [
1
]
},
"FieldEdge": {
"node": [
34
],
"cursor": [
40
],
"__typename": [
1
]
},
"ObjectFieldsConnection": {
"pageInfo": [
242
],
"edges": [
251
],
"__typename": [
1
@@ -4658,6 +4614,38 @@ export default {
1
]
},
"Relation": {
"type": [
255
],
"sourceObjectMetadata": [
46
],
"targetObjectMetadata": [
46
],
"sourceFieldMetadata": [
34
],
"targetFieldMetadata": [
34
],
"__typename": [
1
]
},
"RelationType": {},
"FieldConnection": {
"pageInfo": [
242
],
"edges": [
251
],
"__typename": [
1
]
},
"AuthToken": {
"token": [
1
@@ -5987,7 +5975,7 @@ export default {
},
"AgentChatThreadConnection": {
"pageInfo": [
240
242
],
"edges": [
335
@@ -6594,7 +6582,7 @@ export default {
}
],
"objectRecordCounts": [
246
248
],
"object": [
46,
@@ -6606,7 +6594,7 @@ export default {
}
],
"objects": [
247,
249,
{
"paging": [
39,
@@ -6628,7 +6616,7 @@ export default {
}
],
"indexMetadatas": [
241,
243,
{
"paging": [
39,
@@ -6677,7 +6665,7 @@ export default {
}
],
"fields": [
251,
256,
{
"paging": [
39,
@@ -8352,7 +8340,7 @@ export default {
}
],
"upsertRowLevelPermissionPredicates": [
256,
253,
{
"input": [
456,
@@ -9094,7 +9082,7 @@ export default {
66
],
"checkCustomDomainValidRecords": [
255
240
],
"createOIDCIdentityProvider": [
232,
@@ -9427,7 +9415,7 @@ export default {
}
],
"checkPublicDomainValidRecords": [
255,
240,
{
"domain": [
1,
@@ -87,7 +87,7 @@ Publishing to npm makes your app discoverable in the Twenty marketplace. Any Twe
### Requirements
- An [npm](https://www.npmjs.com) account
- The `twenty-app` keyword in your `package.json` `keywords` array (add it manually — it is not included by default in the `create-twenty-app` template)
- The `twenty-app` keyword in your `package.json` `keywords` array (already included when you scaffold with `create-twenty-app`)
```json filename="package.json"
{
@@ -476,7 +476,7 @@ export default defineLogicFunction({
httpRouteTriggerSettings: {
path: '/post-card/create',
httpMethod: 'GET',
isAuthRequired: true,
isAuthRequired: false,
},
/*databaseEventTriggerSettings: {
eventName: 'people.created',
@@ -87,7 +87,7 @@ yarn twenty deploy
### المتطلبات
* حساب على [npm](https://www.npmjs.com)
* الكلمة المفتاحية `twenty-app` في مصفوفة `keywords` في `package.json` (أضفها يدويًا — فهي غير مضمنة افتراضيًا في قالب `create-twenty-app`)
* الكلمة المفتاحية `twenty-app` في مصفوفة `keywords` في `package.json` (موجودة مسبقًا عند تهيئة المشروع باستخدام `create-twenty-app`)
```json filename="package.json"
{
@@ -476,7 +476,7 @@ export default defineLogicFunction({
httpRouteTriggerSettings: {
path: '/post-card/create',
httpMethod: 'GET',
isAuthRequired: true,
isAuthRequired: false,
},
/*databaseEventTriggerSettings: {
eventName: 'people.created',
@@ -87,7 +87,7 @@ Publikování na npm zajistí, že bude vaše aplikace dohledatelná v Marketpla
### Požadavky
* Účet na [npm](https://www.npmjs.com)
* Klíčové slovo `twenty-app` ve vašem poli `keywords` v souboru `package.json` (přidejte je ručně — ve výchozím nastavení není zahrnuto v šabloně `create-twenty-app`)
* Klíčové slovo `twenty-app` ve vašem poli `keywords` v souboru `package.json` (již je zahrnuto, když založíte projekt pomocí `create-twenty-app`)
```json filename="package.json"
{
@@ -476,7 +476,7 @@ export default defineLogicFunction({
httpRouteTriggerSettings: {
path: '/post-card/create',
httpMethod: 'GET',
isAuthRequired: true,
isAuthRequired: false,
},
/*databaseEventTriggerSettings: {
eventName: 'people.created',
@@ -87,7 +87,7 @@ Die Veröffentlichung auf npm macht Ihre App im Twenty-Marktplatz auffindbar. Je
### Anforderungen
* Ein [npm](https://www.npmjs.com)-Konto
* Das Schlüsselwort `twenty-app` in Ihrem `package.json`-Array `keywords` (manuell hinzufügen — es ist in der `create-twenty-app`-Vorlage standardmäßig nicht enthalten)
* Das Schlüsselwort `twenty-app` in Ihrem `package.json`-Array `keywords` (bereits enthalten, wenn Sie mit `create-twenty-app` ein Gerüst erstellen)
```json filename="package.json"
{
@@ -476,7 +476,7 @@ export default defineLogicFunction({
httpRouteTriggerSettings: {
path: '/post-card/create',
httpMethod: 'GET',
isAuthRequired: true,
isAuthRequired: false,
},
/*databaseEventTriggerSettings: {
eventName: 'people.created',
@@ -87,7 +87,7 @@ La pubblicazione su npm rende la tua app scopribile nel marketplace di Twenty. Q
### Requisiti
* Un account [npm](https://www.npmjs.com)
* La parola chiave `twenty-app` nell'array `keywords` del tuo `package.json` (aggiungila manualmente — non è inclusa per impostazione predefinita nel template `create-twenty-app`)
* La parola chiave `twenty-app` nell'array `keywords` del tuo `package.json` (già inclusa quando inizializzi con `create-twenty-app`)
```json filename="package.json"
{
@@ -476,7 +476,7 @@ export default defineLogicFunction({
httpRouteTriggerSettings: {
path: '/post-card/create',
httpMethod: 'GET',
isAuthRequired: true,
isAuthRequired: false,
},
/*databaseEventTriggerSettings: {
eventName: 'people.created',
@@ -87,7 +87,7 @@ Publicar no npm torna seu aplicativo descobrível no Marketplace da Twenty. Qual
### Requisitos
* Uma conta no [npm](https://www.npmjs.com)
* A palavra-chave `twenty-app` no array `keywords` do seu `package.json` (adicione-a manualmente — não é incluída por padrão no template `create-twenty-app`)
* A palavra-chave `twenty-app` no array `keywords` do seu `package.json` (já incluída quando você cria o projeto com `create-twenty-app`)
```json filename="package.json"
{
@@ -476,7 +476,7 @@ export default defineLogicFunction({
httpRouteTriggerSettings: {
path: '/post-card/create',
httpMethod: 'GET',
isAuthRequired: true,
isAuthRequired: false,
},
/*databaseEventTriggerSettings: {
eventName: 'people.created',
@@ -87,7 +87,7 @@ When updating an already deployed tarball app, the server requires the `version`
### Требования
* Учётная запись [npm](https://www.npmjs.com)
* Ключевое слово `twenty-app` в массиве `keywords` вашего `package.json` (добавьте его вручную — по умолчанию оно не включено в шаблон `create-twenty-app`)
* Ключевое слово `twenty-app` в массиве `keywords` вашего `package.json` (уже добавлено при создании проекта с помощью `create-twenty-app`)
```json filename="package.json"
{
@@ -476,7 +476,7 @@ export default defineLogicFunction({
httpRouteTriggerSettings: {
path: '/post-card/create',
httpMethod: 'GET',
isAuthRequired: true,
isAuthRequired: false,
},
/*databaseEventTriggerSettings: {
eventName: 'people.created',
@@ -87,7 +87,7 @@ npmye yayımlamak, uygulamanızın Twenty pazaryerinde keşfedilebilir olmas
### Gereksinimler
* Bir [npm](https://www.npmjs.com) hesabı
* `package.json` içindeki `keywords` dizinizdeki `twenty-app` anahtar sözcüğü (elle ekleyin — varsayılan olarak `create-twenty-app` şablonunda yer almaz)
* `package.json` içindeki `keywords` dizinizdeki `twenty-app` anahtar sözcüğü (`create-twenty-app` ile iskelet oluşturduğunuzda zaten eklenir)
```json filename="package.json"
{
+2 -2
View File
@@ -61,8 +61,8 @@ const jestConfig = {
extensionsToTreatAsEsm: ['.ts', '.tsx'],
coverageThreshold: {
global: {
statements: 48,
lines: 46,
statements: 48.4,
lines: 47.0,
functions: 39.5,
},
},
File diff suppressed because one or more lines are too long
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Oor hierdie gebruiker"
msgid "About this workspace"
msgstr "Oor hierdie werkruimte"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Inhoud"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Konteks"
@@ -12040,6 +12037,11 @@ msgstr "Herstel 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Herstel na"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "Daar is geen gekoppelde aktiwiteit by hierdie rekord nie."
msgid "There was an error while updating password."
msgstr "Daar was 'n fout terwyl die wagwoord opgedateer is."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "حول هذا المستخدم"
msgid "About this workspace"
msgstr "عن مساحة العمل هذه"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "المحتوى"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "السياق"
@@ -12040,6 +12037,11 @@ msgstr "إعادة تعيين المصادقة الثنائية"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "\\\\"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "لا توجد أنشطة مرتبطة بهذا السجل."
msgid "There was an error while updating password."
msgstr "حدث خطأ أثناء تحديث كلمة المرور."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Sobre aquest usuari"
msgid "About this workspace"
msgstr "Sobre aquest espai de treball"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Contingut"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Context"
@@ -12040,6 +12037,11 @@ msgstr "Reinicia 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Reinicia a"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "No hi ha cap activitat associada amb aquest registre."
msgid "There was an error while updating password."
msgstr "S'ha produït un error en actualitzar la contrasenya."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "O tomto uživateli"
msgid "About this workspace"
msgstr "O tomto pracovním prostoru"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Obsah"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Kontext"
@@ -12040,6 +12037,11 @@ msgstr "Obnovit 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Obnovit na"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "S tímto záznamem není spojena žádná aktivita."
msgid "There was an error while updating password."
msgstr "Během aktualizace hesla došlo k chybě."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Om denne bruger"
msgid "About this workspace"
msgstr "Om dette arbejdsområde"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Indhold"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Kontekst"
@@ -12040,6 +12037,11 @@ msgstr "Nulstil 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Nulstil til"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "Der er ingen aktivitet tilknyttet denne post."
msgid "There was an error while updating password."
msgstr "Der opstod en fejl under opdatering af adgangskoden."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Über diesen Benutzer"
msgid "About this workspace"
msgstr "Über diesen Arbeitsbereich"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Inhalt"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Kontext"
@@ -12040,6 +12037,11 @@ msgstr "2FA zurücksetzen"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Zurücksetzen auf"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "Mit diesem Datensatz ist keine Aktivität verknüpft."
msgid "There was an error while updating password."
msgstr "Beim Aktualisieren des Passworts ist ein Fehler aufgetreten."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Σχετικά με αυτόν τον χρήστη"
msgid "About this workspace"
msgstr "Σχετικά με αυτό το χώρο εργασίας"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Περιεχόμενο"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Περιβάλλον"
@@ -12040,6 +12037,11 @@ msgstr "Επαναφορά 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Επαναφορά σε"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14200,11 +14202,6 @@ msgstr "Δεν υπάρχει δραστηριότητα που να σχετί
msgid "There was an error while updating password."
msgstr "Παρουσιάστηκε σφάλμα κατά την ενημέρωση του κωδικού πρόσβασης."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -672,11 +672,6 @@ msgstr "About this user"
msgid "About this workspace"
msgstr "About this workspace"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr "Access"
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3569,7 +3564,9 @@ msgid "Content"
msgstr "Content"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Context"
@@ -12035,6 +12032,11 @@ msgstr "Reset 2FA"
msgid "Reset label to default"
msgstr "Reset label to default"
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Reset to"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14193,11 +14195,6 @@ msgstr "There is no activity associated with this record."
msgid "There was an error while updating password."
msgstr "There was an error while updating password."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr "These apps are not vetted. Use at your own risk."
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Sobre este usuario"
msgid "About this workspace"
msgstr "Sobre este espacio de trabajo"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Contenido"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Contexto"
@@ -12040,6 +12037,11 @@ msgstr "Restablecer 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Restablecer a"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "No hay actividad asociada con este registro."
msgid "There was an error while updating password."
msgstr "Hubo un error al actualizar la contraseña."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Tietoa tästä käyttäjästä"
msgid "About this workspace"
msgstr "Tietoa tästä työtilasta"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Sisältö"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Yhteys"
@@ -12040,6 +12037,11 @@ msgstr "Nollaa 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Palauta"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "Tähän tietueeseen ei liity aktiivisuutta."
msgid "There was an error while updating password."
msgstr "Salasanan päivityksessä tapahtui virhe."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "À propos de cet utilisateur"
msgid "About this workspace"
msgstr "À propos de cet espace de travail"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Contenu"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Contexte"
@@ -12040,6 +12037,11 @@ msgstr "Réinitialiser 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Réinitialiser à"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "Aucune activité n'est associée à cet enregistrement."
msgid "There was an error while updating password."
msgstr "Une erreur est survenue lors de la mise à jour du mot de passe."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
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
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "אודות משתמש זה"
msgid "About this workspace"
msgstr "אודות סביבת עבודה זו"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "תוכן"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "הקשר"
@@ -12040,6 +12037,11 @@ msgstr "אתחל אימות דו-שלבי"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "\\"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "אין פעילות מקושרת לרשומה זו."
msgid "There was an error while updating password."
msgstr "אירעה תקלה בעדכון הסיסמה."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Erről a felhasználóról"
msgid "About this workspace"
msgstr "Erről a munkaterületről"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Tartalom"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Összefüggés"
@@ -12040,6 +12037,11 @@ msgstr "2FA visszaállítása"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Visszaállítás"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "Ehhez a rekordhoz nem tartozik tevékenység."
msgid "There was an error while updating password."
msgstr "Hiba történt a jelszó frissítése közben."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Informazioni su questo utente"
msgid "About this workspace"
msgstr "Informazioni su questo spazio di lavoro"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Contenuto"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Contesto"
@@ -12040,6 +12037,11 @@ msgstr "Reimposta 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Reimposta a"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "Non ci sono attività associate a questo record."
msgid "There was an error while updating password."
msgstr "Errore durante l'aggiornamento della password."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "このユーザーについて"
msgid "About this workspace"
msgstr "このワークスペースについて"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "コンテンツ"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "コンテキスト"
@@ -12040,6 +12037,11 @@ msgstr "2FAをリセット"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "リセット"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "このレコードに関連付けられたアクティビティはあり
msgid "There was an error while updating password."
msgstr "パスワードの更新中にエラーが発生しました"
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "이 사용자에 대해"
msgid "About this workspace"
msgstr "이 작업공간에 대해"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "내용"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "컨텍스트"
@@ -12040,6 +12037,11 @@ msgstr "이중 인증 재설정"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "다음으로 재설정"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "이 레코드와 연결된 활동이 없습니다."
msgid "There was an error while updating password."
msgstr "비밀번호 업데이트 중 오류가 발생했습니다."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Over deze gebruiker"
msgid "About this workspace"
msgstr "Over deze werkruimte"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Inhoud"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Context"
@@ -12040,6 +12037,11 @@ msgstr "Reset 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Reset naar"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "Er is geen activiteit gekoppeld aan dit record."
msgid "There was an error while updating password."
msgstr "Er was een fout bij het bijwerken van het wachtwoord."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Om denne brukeren"
msgid "About this workspace"
msgstr "Om dette arbeidsområdet"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Innhold"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Kontekst"
@@ -12040,6 +12037,11 @@ msgstr "Tilbakestill 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Tilbakestill til"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "Det finnes ingen aktivitet knyttet til denne oppføringen."
msgid "There was an error while updating password."
msgstr "Det var en feil under oppdatering av passord."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "O tym użytkowniku"
msgid "About this workspace"
msgstr "O tej przestrzeni roboczej"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Zawartość"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Kontekst"
@@ -12040,6 +12037,11 @@ msgstr "Resetuj 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Zresetuj do"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "Z tym rekordem nie jest powiązana żadna aktywność."
msgid "There was an error while updating password."
msgstr "Wystąpił błąd podczas aktualizacji hasła."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -672,11 +672,6 @@ msgstr ""
msgid "About this workspace"
msgstr ""
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3569,7 +3564,9 @@ msgid "Content"
msgstr ""
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr ""
@@ -12035,6 +12032,11 @@ msgstr ""
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr ""
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14193,11 +14195,6 @@ msgstr ""
msgid "There was an error while updating password."
msgstr ""
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Sobre este usuário"
msgid "About this workspace"
msgstr "Sobre este espaço de trabalho"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Conteúdo"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Contexto"
@@ -12040,6 +12037,11 @@ msgstr "Redefinir 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Redefinir para"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "Não há atividade associada a este registro."
msgid "There was an error while updating password."
msgstr "Ocorreu um erro ao atualizar a senha."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Sobre este usuário"
msgid "About this workspace"
msgstr "Sobre este espaço de trabalho"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Conteúdo"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Contexto"
@@ -12040,6 +12037,11 @@ msgstr "Redefinir 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Redefinir para"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "Não há atividade associada a este registo."
msgid "There was an error while updating password."
msgstr "Ocorreu um erro ao atualizar a palavra-passe."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Despre acest utilizator"
msgid "About this workspace"
msgstr "Despre acest spațiu de lucru"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Conținut"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Context"
@@ -12040,6 +12037,11 @@ msgstr "Resetează 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Resetează la"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "Nu există activitate asociată acestei înregistrări."
msgid "There was an error while updating password."
msgstr "A apărut o eroare în timpul actualizării parolei."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
Binary file not shown.
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "О овом кориснику"
msgid "About this workspace"
msgstr "О овом радном простору"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Садржај"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Контекст"
@@ -12040,6 +12037,11 @@ msgstr "Ресетујте 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Ресетујте на"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "Са овим записом нема повезаних активно
msgid "There was an error while updating password."
msgstr "Дошло је до грешке при ажурирању лозинке."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Om den här användaren"
msgid "About this workspace"
msgstr "Om den här arbetsytan"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Innehåll"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Sammanhang"
@@ -12042,6 +12039,11 @@ msgstr "Återställ 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Återställ till"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14204,11 +14206,6 @@ msgstr "Det finns ingen aktivitet kopplad till den här posten."
msgid "There was an error while updating password."
msgstr "Det uppstod ett fel vid uppdatering av lösenordet."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Bu kullanıcı hakkında"
msgid "About this workspace"
msgstr "Bu çalışma alanı hakkında"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "İçerik"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Bağlam"
@@ -12040,6 +12037,11 @@ msgstr "2FA Sıfırla"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Sıfırla"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "Bu kayıtla ilişkili etkinlik yok."
msgid "There was an error while updating password."
msgstr "Şifre güncelleme sırasında bir hata oluştu."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Про цього користувача"
msgid "About this workspace"
msgstr "Про цей робочий простір"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Вміст"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Контекст"
@@ -12040,6 +12037,11 @@ msgstr "Скинути 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Скинути до"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "З цим записом не пов’язана жодна актив
msgid "There was an error while updating password."
msgstr "Сталася помилка під час оновлення пароля."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "Về người dùng này"
msgid "About this workspace"
msgstr "Giới thiệu về không gian làm việc này"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "Nội dung"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "Ngữ cảnh"
@@ -12040,6 +12037,11 @@ msgstr "Đặt lại 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "Đặt lại thành"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "Không có hoạt động nào liên kết với bản ghi này."
msgid "There was an error while updating password."
msgstr "Đã có lỗi xảy ra trong quá trình cập nhật mật khẩu."
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "关于此用户"
msgid "About this workspace"
msgstr "关于此工作区"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "内容"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "上下文"
@@ -12040,6 +12037,11 @@ msgstr "重置 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "重置为"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "此记录没有关联的活动。"
msgid "There was an error while updating password."
msgstr "更新密码时出错。"
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
+7 -10
View File
@@ -677,11 +677,6 @@ msgstr "關於此使用者"
msgid "About this workspace"
msgstr "關於此工作區"
#. js-lingui-id: LuXP9q
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "Access"
msgstr ""
#. js-lingui-id: pNW+Rt
#: src/pages/settings/admin-panel/SettingsAdminNewAiProvider.tsx
msgid "Access Key ID"
@@ -3574,7 +3569,9 @@ msgid "Content"
msgstr "內容"
#. js-lingui-id: M73whl
#: src/modules/side-panel/pages/root/components/SidePanelRootPage.tsx
#: src/modules/settings/ai/components/SettingsAiModelHoverCard.tsx
#: src/modules/command-menu-item/display/components/SidePanelCommandMenuItemDisplayPage.tsx
#: src/modules/ai/components/RoutingDebugDisplay.tsx
msgid "Context"
msgstr "上下文"
@@ -12040,6 +12037,11 @@ msgstr "重置 2FA"
msgid "Reset label to default"
msgstr ""
#. js-lingui-id: 1IWc1n
#: src/modules/side-panel/pages/root/components/SidePanelResetContextToSelectionButton.tsx
msgid "Reset to"
msgstr "重置為"
#. js-lingui-id: L+rMC9
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
#: src/modules/side-panel/pages/page-layout/components/WidgetSettingsManageSection.tsx
@@ -14198,11 +14200,6 @@ msgstr "此記錄沒有相關的活動。"
msgid "There was an error while updating password."
msgstr "更新密碼時出現錯誤。"
#. js-lingui-id: vg1S0X
#: src/pages/settings/applications/tabs/SettingsApplicationsDeveloperTab.tsx
msgid "These apps are not vetted. Use at your own risk."
msgstr ""
#. js-lingui-id: AUV+TY
#: src/modules/ai/components/ThinkingStepsDisplay.tsx
msgid "Thinking"
@@ -4,14 +4,20 @@ import { PINNED_COMMAND_MENU_ITEMS_GAP } from '@/command-menu-item/display/const
import { commandMenuPinnedInlineLayoutState } from '@/command-menu-item/display/states/commandMenuPinnedInlineLayoutState';
import { getVisibleCommandMenuItemCountForContainerWidth } from '@/command-menu-item/display/utils/getVisibleCommandMenuItemCountForContainerWidth';
import { groupCommandMenuItems } from '@/command-menu-item/utils/groupCommandMenuItems';
import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { SidePanelGroup } from '@/side-panel/components/SidePanelGroup';
import { SidePanelList } from '@/side-panel/components/SidePanelList';
import { SIDE_PANEL_PREVIOUS_COMPONENT_INSTANCE_ID } from '@/side-panel/constants/SidePanelPreviousComponentInstanceId';
import { SIDE_PANEL_RESET_CONTEXT_TO_SELECTION } from '@/side-panel/constants/SidePanelResetContextToSelection';
import { SidePanelResetContextToSelectionButton } from '@/side-panel/pages/root/components/SidePanelResetContextToSelectionButton';
import { useFilterCommandMenuItemsWithSidePanelSearch } from '@/side-panel/pages/root/hooks/useFilterCommandMenuItemsWithSidePanelSearch';
import { sidePanelSearchState } from '@/side-panel/states/sidePanelSearchState';
import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { useLingui } from '@lingui/react/macro';
import { isNumber } from '@sniptt/guards';
import { useContext, useMemo } from 'react';
import { isDefined } from 'twenty-shared/utils';
import { CommandMenuItemAvailabilityType } from '~/generated-metadata/graphql';
export const SidePanelCommandMenuItemDisplayPage = () => {
@@ -93,8 +99,24 @@ export const SidePanelCommandMenuItemDisplayPage = () => {
...(noResults ? fallbackCommandMenuItems : []),
].map((item) => item.id);
// oxlint-disable-next-line twenty/matching-state-variable
const previousContextStoreCurrentObjectMetadataItemId =
useAtomComponentStateValue(
contextStoreCurrentObjectMetadataItemIdComponentState,
SIDE_PANEL_PREVIOUS_COMPONENT_INSTANCE_ID,
);
if (isDefined(previousContextStoreCurrentObjectMetadataItemId)) {
selectableItemIds.unshift(SIDE_PANEL_RESET_CONTEXT_TO_SELECTION);
}
return (
<SidePanelList selectableItemIds={selectableItemIds} noResults={noResults}>
{isDefined(previousContextStoreCurrentObjectMetadataItemId) && (
<SidePanelGroup heading={t`Context`}>
<SidePanelResetContextToSelectionButton />
</SidePanelGroup>
)}
{matchingPinnedItems.length > 0 && (
<SidePanelGroup heading={t`Pinned`}>
{matchingPinnedItems.map((item) => (
@@ -0,0 +1,195 @@
import { renderHook } from '@testing-library/react';
import { act } from 'react';
import { SIDE_PANEL_COMPONENT_INSTANCE_ID } from '@/side-panel/constants/SidePanelComponentInstanceId';
import { SIDE_PANEL_PREVIOUS_COMPONENT_INSTANCE_ID } from '@/side-panel/constants/SidePanelPreviousComponentInstanceId';
import { useSetGlobalCommandMenuContext } from '@/command-menu/hooks/useSetGlobalCommandMenuContext';
import { sidePanelPageInfoState } from '@/side-panel/states/sidePanelPageInfoState';
import { hasUserSelectedSidePanelListItemState } from '@/side-panel/states/hasUserSelectedSidePanelListItemState';
import { jotaiStore } from '@/ui/utilities/state/jotai/jotaiStore';
import { contextStoreAnyFieldFilterValueComponentState } from '@/context-store/states/contextStoreAnyFieldFilterValueComponentState';
import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState';
import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState';
import { contextStoreNumberOfSelectedRecordsComponentState } from '@/context-store/states/contextStoreNumberOfSelectedRecordsComponentState';
import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
import { ContextStoreViewType } from '@/context-store/types/ContextStoreViewType';
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue';
import { getJestMetadataAndApolloMocksAndCommandMenuWrapper } from '~/testing/jest/getJestMetadataAndApolloMocksAndCommandMenuWrapper';
import { mockedPersonRecords } from '~/testing/mock-data/generated/data/people/mock-people-data';
import { getTestEnrichedObjectMetadataItemsMock } from '~/testing/utils/getTestEnrichedObjectMetadataItemsMock';
import { contextStoreFilterGroupsComponentState } from '@/context-store/states/contextStoreFilterGroupsComponentState';
const personMockObjectMetadataItem =
getTestEnrichedObjectMetadataItemsMock().find(
(item) => item.nameSingular === 'person',
)!;
const peopleMock = [...mockedPersonRecords];
jotaiStore.set(
recordStoreFamilyState.atomFamily(peopleMock[0].id),
peopleMock[0],
);
jotaiStore.set(
recordStoreFamilyState.atomFamily(peopleMock[1].id),
peopleMock[1],
);
const wrapper = getJestMetadataAndApolloMocksAndCommandMenuWrapper({
apolloMocks: [],
componentInstanceId: SIDE_PANEL_COMPONENT_INSTANCE_ID,
contextStoreCurrentObjectMetadataNameSingular:
personMockObjectMetadataItem.nameSingular,
contextStoreCurrentViewId: 'my-view-id',
contextStoreTargetedRecordsRule: {
mode: 'selection',
selectedRecordIds: [peopleMock[0].id, peopleMock[1].id],
},
contextStoreNumberOfSelectedRecords: 2,
contextStoreCurrentViewType: ContextStoreViewType.Table,
});
describe('useSetGlobalCommandMenuContext', () => {
beforeEach(() => {
jest.clearAllMocks();
});
it('should reset all command menu context states', () => {
const { result } = renderHook(
() => {
const { setGlobalCommandMenuContext } =
useSetGlobalCommandMenuContext();
const contextStoreTargetedRecordsRule = useAtomComponentStateValue(
contextStoreTargetedRecordsRuleComponentState,
SIDE_PANEL_COMPONENT_INSTANCE_ID,
);
const contextStoreNumberOfSelectedRecords = useAtomComponentStateValue(
contextStoreNumberOfSelectedRecordsComponentState,
SIDE_PANEL_COMPONENT_INSTANCE_ID,
);
const contextStoreFilters = useAtomComponentStateValue(
contextStoreFiltersComponentState,
SIDE_PANEL_COMPONENT_INSTANCE_ID,
);
const contextStoreFilterGroups = useAtomComponentStateValue(
contextStoreFilterGroupsComponentState,
SIDE_PANEL_COMPONENT_INSTANCE_ID,
);
const contextStoreAnyFieldFilterValue = useAtomComponentStateValue(
contextStoreAnyFieldFilterValueComponentState,
SIDE_PANEL_COMPONENT_INSTANCE_ID,
);
const contextStoreCurrentViewType = useAtomComponentStateValue(
contextStoreCurrentViewTypeComponentState,
SIDE_PANEL_COMPONENT_INSTANCE_ID,
);
return {
setGlobalCommandMenuContext,
contextStoreTargetedRecordsRule,
contextStoreNumberOfSelectedRecords,
contextStoreFilters,
contextStoreFilterGroups,
contextStoreCurrentViewType,
contextStoreAnyFieldFilterValue,
};
},
{
wrapper,
},
);
expect(result.current.contextStoreTargetedRecordsRule).toEqual({
mode: 'selection',
selectedRecordIds: [peopleMock[0].id, peopleMock[1].id],
});
expect(result.current.contextStoreNumberOfSelectedRecords).toBe(2);
expect(result.current.contextStoreFilters).toEqual([]);
expect(result.current.contextStoreAnyFieldFilterValue).toEqual('');
expect(result.current.contextStoreCurrentViewType).toBe(
ContextStoreViewType.Table,
);
const sidePanelPageInfo = jotaiStore.get(sidePanelPageInfoState.atom);
expect(sidePanelPageInfo).toEqual({
title: undefined,
Icon: undefined,
instanceId: '',
});
const hasUserSelectedSidePanelListItem = jotaiStore.get(
hasUserSelectedSidePanelListItemState.atom,
);
expect(hasUserSelectedSidePanelListItem).toBe(false);
act(() => {
result.current.setGlobalCommandMenuContext();
});
expect(result.current.contextStoreTargetedRecordsRule).toEqual({
mode: 'selection',
selectedRecordIds: [],
});
expect(result.current.contextStoreNumberOfSelectedRecords).toBe(0);
expect(result.current.contextStoreFilters).toEqual([]);
expect(result.current.contextStoreAnyFieldFilterValue).toEqual('');
expect(result.current.contextStoreCurrentViewType).toBe(
ContextStoreViewType.Table,
);
const sidePanelPageInfoAfter = jotaiStore.get(sidePanelPageInfoState.atom);
expect(sidePanelPageInfoAfter).toEqual({
title: undefined,
Icon: undefined,
instanceId: '',
});
const hasUserSelectedSidePanelListItemAfter = jotaiStore.get(
hasUserSelectedSidePanelListItemState.atom,
);
expect(hasUserSelectedSidePanelListItemAfter).toBe(false);
});
it('should copy context store states to previous instance before resetting', () => {
const { result } = renderHook(
() => {
const { setGlobalCommandMenuContext } =
useSetGlobalCommandMenuContext();
// oxlint-disable-next-line twenty/matching-state-variable
const previousTargetedRecordsRule = useAtomComponentStateValue(
contextStoreTargetedRecordsRuleComponentState,
SIDE_PANEL_PREVIOUS_COMPONENT_INSTANCE_ID,
);
// oxlint-disable-next-line twenty/matching-state-variable
const previousNumberOfSelectedRecords = useAtomComponentStateValue(
contextStoreNumberOfSelectedRecordsComponentState,
SIDE_PANEL_PREVIOUS_COMPONENT_INSTANCE_ID,
);
return {
setGlobalCommandMenuContext,
previousTargetedRecordsRule,
previousNumberOfSelectedRecords,
};
},
{
wrapper,
},
);
act(() => {
result.current.setGlobalCommandMenuContext();
});
expect(result.current.previousTargetedRecordsRule).toEqual({
mode: 'selection',
selectedRecordIds: [peopleMock[0].id, peopleMock[1].id],
});
expect(result.current.previousNumberOfSelectedRecords).toBe(2);
});
});
@@ -1,4 +1,7 @@
import { useSetGlobalCommandMenuContext } from '@/command-menu/hooks/useSetGlobalCommandMenuContext';
import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
import { useKeyboardShortcutMenu } from '@/keyboard-shortcut-menu/hooks/useKeyboardShortcutMenu';
import { SIDE_PANEL_COMPONENT_INSTANCE_ID } from '@/side-panel/constants/SidePanelComponentInstanceId';
import { SIDE_PANEL_FOCUS_ID } from '@/side-panel/constants/SidePanelFocusId';
import { useOpenAskAIPageInSidePanel } from '@/side-panel/hooks/useOpenAskAIPageInSidePanel';
import { useOpenRecordsSearchPageInSidePanel } from '@/side-panel/hooks/useOpenRecordsSearchPageInSidePanel';
@@ -8,6 +11,7 @@ import { sidePanelPageState } from '@/side-panel/states/sidePanelPageState';
import { sidePanelSearchState } from '@/side-panel/states/sidePanelSearchState';
import { useGlobalHotkeys } from '@/ui/utilities/hotkey/hooks/useGlobalHotkeys';
import { useHotkeysOnFocusedElement } from '@/ui/utilities/hotkey/hooks/useHotkeysOnFocusedElement';
import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { useIsFeatureEnabled } from '@/workspace/hooks/useIsFeatureEnabled';
import { isNonEmptyString } from '@sniptt/guards';
@@ -25,6 +29,8 @@ export const useCommandMenuHotKeys = () => {
const { goBackFromSidePanel, goBackOneSubPageOrMainPage } =
useSidePanelHistory();
const { setGlobalCommandMenuContext } = useSetGlobalCommandMenuContext();
const sidePanelSearch = useAtomStateValue(sidePanelSearchState);
const { closeKeyboardShortcutMenu } = useKeyboardShortcutMenu();
@@ -33,6 +39,11 @@ export const useCommandMenuHotKeys = () => {
const isAiEnabled = useIsFeatureEnabled(FeatureFlagKey.IS_AI_ENABLED);
const contextStoreTargetedRecordsRule = useAtomComponentStateValue(
contextStoreTargetedRecordsRuleComponentState,
SIDE_PANEL_COMPONENT_INSTANCE_ID,
);
useGlobalHotkeys({
keys: ['ctrl+k', 'meta+k'],
callback: () => {
@@ -88,12 +99,27 @@ export const useCommandMenuHotKeys = () => {
return;
}
if (
sidePanelPage === SidePanelPages.CommandMenuDisplay &&
!(
contextStoreTargetedRecordsRule.mode === 'selection' &&
contextStoreTargetedRecordsRule.selectedRecordIds.length === 0
)
) {
setGlobalCommandMenuContext();
}
if (sidePanelPage !== SidePanelPages.CommandMenuDisplay) {
goBackOneSubPageOrMainPage();
}
},
focusId: SIDE_PANEL_FOCUS_ID,
dependencies: [sidePanelPage, sidePanelSearch, goBackOneSubPageOrMainPage],
dependencies: [
sidePanelPage,
sidePanelSearch,
contextStoreTargetedRecordsRule,
goBackOneSubPageOrMainPage,
setGlobalCommandMenuContext,
],
options: {
preventDefault: false,
enableOnFormTags: false,
@@ -0,0 +1,144 @@
import { contextStoreAnyFieldFilterValueComponentState } from '@/context-store/states/contextStoreAnyFieldFilterValueComponentState';
import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState';
import { contextStoreFilterGroupsComponentState } from '@/context-store/states/contextStoreFilterGroupsComponentState';
import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState';
import { contextStoreIsPageInEditModeComponentState } from '@/context-store/states/contextStoreIsPageInEditModeComponentState';
import { contextStoreNumberOfSelectedRecordsComponentState } from '@/context-store/states/contextStoreNumberOfSelectedRecordsComponentState';
import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
import { useCallback } from 'react';
import { useStore } from 'jotai';
export const useCopyContextStoreStates = () => {
const store = useStore();
const copyContextStoreStates = useCallback(
({
instanceIdToCopyFrom,
instanceIdToCopyTo,
}: {
instanceIdToCopyFrom: string;
instanceIdToCopyTo: string;
}) => {
const contextStoreCurrentObjectMetadataItemId = store.get(
contextStoreCurrentObjectMetadataItemIdComponentState.atomFamily({
instanceId: instanceIdToCopyFrom,
}),
);
store.set(
contextStoreCurrentObjectMetadataItemIdComponentState.atomFamily({
instanceId: instanceIdToCopyTo,
}),
contextStoreCurrentObjectMetadataItemId,
);
const contextStoreTargetedRecordsRule = store.get(
contextStoreTargetedRecordsRuleComponentState.atomFamily({
instanceId: instanceIdToCopyFrom,
}),
);
store.set(
contextStoreTargetedRecordsRuleComponentState.atomFamily({
instanceId: instanceIdToCopyTo,
}),
contextStoreTargetedRecordsRule,
);
const contextStoreNumberOfSelectedRecords = store.get(
contextStoreNumberOfSelectedRecordsComponentState.atomFamily({
instanceId: instanceIdToCopyFrom,
}),
);
store.set(
contextStoreNumberOfSelectedRecordsComponentState.atomFamily({
instanceId: instanceIdToCopyTo,
}),
contextStoreNumberOfSelectedRecords,
);
const contextStoreFilters = store.get(
contextStoreFiltersComponentState.atomFamily({
instanceId: instanceIdToCopyFrom,
}),
);
store.set(
contextStoreFiltersComponentState.atomFamily({
instanceId: instanceIdToCopyTo,
}),
contextStoreFilters,
);
const contextStoreFilterGroups = store.get(
contextStoreFilterGroupsComponentState.atomFamily({
instanceId: instanceIdToCopyFrom,
}),
);
store.set(
contextStoreFilterGroupsComponentState.atomFamily({
instanceId: instanceIdToCopyTo,
}),
contextStoreFilterGroups,
);
const contextStoreAnyFieldFilterValue = store.get(
contextStoreAnyFieldFilterValueComponentState.atomFamily({
instanceId: instanceIdToCopyFrom,
}),
);
store.set(
contextStoreAnyFieldFilterValueComponentState.atomFamily({
instanceId: instanceIdToCopyTo,
}),
contextStoreAnyFieldFilterValue,
);
const contextStoreCurrentViewId = store.get(
contextStoreCurrentViewIdComponentState.atomFamily({
instanceId: instanceIdToCopyFrom,
}),
);
store.set(
contextStoreCurrentViewIdComponentState.atomFamily({
instanceId: instanceIdToCopyTo,
}),
contextStoreCurrentViewId,
);
const contextStoreCurrentViewType = store.get(
contextStoreCurrentViewTypeComponentState.atomFamily({
instanceId: instanceIdToCopyFrom,
}),
);
store.set(
contextStoreCurrentViewTypeComponentState.atomFamily({
instanceId: instanceIdToCopyTo,
}),
contextStoreCurrentViewType,
);
const contextStoreIsFullTabWidgetInEditMode = store.get(
contextStoreIsPageInEditModeComponentState.atomFamily({
instanceId: instanceIdToCopyFrom,
}),
);
store.set(
contextStoreIsPageInEditModeComponentState.atomFamily({
instanceId: instanceIdToCopyTo,
}),
contextStoreIsFullTabWidgetInEditMode,
);
},
[store],
);
return { copyContextStoreStates };
};
@@ -0,0 +1,71 @@
import { contextStoreAnyFieldFilterValueComponentState } from '@/context-store/states/contextStoreAnyFieldFilterValueComponentState';
import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
import { contextStoreFilterGroupsComponentState } from '@/context-store/states/contextStoreFilterGroupsComponentState';
import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState';
import { contextStoreNumberOfSelectedRecordsComponentState } from '@/context-store/states/contextStoreNumberOfSelectedRecordsComponentState';
import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
import { useCallback } from 'react';
import { useStore } from 'jotai';
export const useResetContextStoreStates = () => {
const store = useStore();
const resetContextStoreStates = useCallback(
(instanceId: string) => {
store.set(
contextStoreCurrentObjectMetadataItemIdComponentState.atomFamily({
instanceId,
}),
undefined,
);
store.set(
contextStoreTargetedRecordsRuleComponentState.atomFamily({
instanceId,
}),
{
mode: 'selection',
selectedRecordIds: [],
},
);
store.set(
contextStoreNumberOfSelectedRecordsComponentState.atomFamily({
instanceId,
}),
0,
);
store.set(
contextStoreFiltersComponentState.atomFamily({
instanceId,
}),
[],
);
store.set(
contextStoreFilterGroupsComponentState.atomFamily({
instanceId,
}),
[],
);
store.set(
contextStoreAnyFieldFilterValueComponentState.atomFamily({
instanceId,
}),
'',
);
store.set(
contextStoreCurrentViewIdComponentState.atomFamily({
instanceId,
}),
undefined,
);
},
[store],
);
return { resetContextStoreStates };
};
@@ -0,0 +1,182 @@
import { SIDE_PANEL_COMPONENT_INSTANCE_ID } from '@/side-panel/constants/SidePanelComponentInstanceId';
import { SIDE_PANEL_PREVIOUS_COMPONENT_INSTANCE_ID } from '@/side-panel/constants/SidePanelPreviousComponentInstanceId';
import { sidePanelPageInfoState } from '@/side-panel/states/sidePanelPageInfoState';
import { hasUserSelectedSidePanelListItemState } from '@/side-panel/states/hasUserSelectedSidePanelListItemState';
import { contextStoreAnyFieldFilterValueComponentState } from '@/context-store/states/contextStoreAnyFieldFilterValueComponentState';
import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState';
import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState';
import { contextStoreFilterGroupsComponentState } from '@/context-store/states/contextStoreFilterGroupsComponentState';
import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState';
import { contextStoreIsPageInEditModeComponentState } from '@/context-store/states/contextStoreIsPageInEditModeComponentState';
import { contextStoreNumberOfSelectedRecordsComponentState } from '@/context-store/states/contextStoreNumberOfSelectedRecordsComponentState';
import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
import { ContextStoreViewType } from '@/context-store/types/ContextStoreViewType';
import { atom, useStore } from 'jotai';
import { useCallback } from 'react';
export const useSetGlobalCommandMenuContext = () => {
const store = useStore();
const setGlobalCommandMenuContext = useCallback(() => {
store.set(
atom(null, (get, batchSet) => {
const fromId = SIDE_PANEL_COMPONENT_INSTANCE_ID;
const toId = SIDE_PANEL_PREVIOUS_COMPONENT_INSTANCE_ID;
batchSet(
contextStoreCurrentObjectMetadataItemIdComponentState.atomFamily({
instanceId: toId,
}),
get(
contextStoreCurrentObjectMetadataItemIdComponentState.atomFamily({
instanceId: fromId,
}),
),
);
batchSet(
contextStoreTargetedRecordsRuleComponentState.atomFamily({
instanceId: toId,
}),
get(
contextStoreTargetedRecordsRuleComponentState.atomFamily({
instanceId: fromId,
}),
),
);
batchSet(
contextStoreNumberOfSelectedRecordsComponentState.atomFamily({
instanceId: toId,
}),
get(
contextStoreNumberOfSelectedRecordsComponentState.atomFamily({
instanceId: fromId,
}),
),
);
batchSet(
contextStoreFiltersComponentState.atomFamily({
instanceId: toId,
}),
get(
contextStoreFiltersComponentState.atomFamily({
instanceId: fromId,
}),
),
);
batchSet(
contextStoreFilterGroupsComponentState.atomFamily({
instanceId: toId,
}),
get(
contextStoreFilterGroupsComponentState.atomFamily({
instanceId: fromId,
}),
),
);
batchSet(
contextStoreAnyFieldFilterValueComponentState.atomFamily({
instanceId: toId,
}),
get(
contextStoreAnyFieldFilterValueComponentState.atomFamily({
instanceId: fromId,
}),
),
);
batchSet(
contextStoreCurrentViewIdComponentState.atomFamily({
instanceId: toId,
}),
get(
contextStoreCurrentViewIdComponentState.atomFamily({
instanceId: fromId,
}),
),
);
batchSet(
contextStoreCurrentViewTypeComponentState.atomFamily({
instanceId: toId,
}),
get(
contextStoreCurrentViewTypeComponentState.atomFamily({
instanceId: fromId,
}),
),
);
batchSet(
contextStoreIsPageInEditModeComponentState.atomFamily({
instanceId: toId,
}),
get(
contextStoreIsPageInEditModeComponentState.atomFamily({
instanceId: fromId,
}),
),
);
batchSet(
contextStoreTargetedRecordsRuleComponentState.atomFamily({
instanceId: fromId,
}),
{ mode: 'selection', selectedRecordIds: [] },
);
batchSet(
contextStoreNumberOfSelectedRecordsComponentState.atomFamily({
instanceId: fromId,
}),
0,
);
batchSet(
contextStoreFiltersComponentState.atomFamily({
instanceId: fromId,
}),
[],
);
batchSet(
contextStoreFilterGroupsComponentState.atomFamily({
instanceId: fromId,
}),
[],
);
batchSet(
contextStoreAnyFieldFilterValueComponentState.atomFamily({
instanceId: fromId,
}),
'',
);
batchSet(
contextStoreCurrentViewTypeComponentState.atomFamily({
instanceId: fromId,
}),
ContextStoreViewType.Table,
);
batchSet(sidePanelPageInfoState.atom, {
title: undefined,
Icon: undefined,
instanceId: '',
});
batchSet(hasUserSelectedSidePanelListItemState.atom, false);
}),
);
}, [store]);
return {
setGlobalCommandMenuContext,
};
};
@@ -14,7 +14,6 @@ export const PAGE_LAYOUT_TAB_FRAGMENT = gql`
...PageLayoutWidgetFragment
}
pageLayoutId
isActive
createdAt
updatedAt
}
@@ -79,9 +79,7 @@ export const splitViewWithRelated = (
const { viewFields: _viewFields, ...viewFieldGroupProperties } =
viewFieldGroup;
flatViewFieldGroups.push({
...viewFieldGroupProperties,
});
flatViewFieldGroups.push(viewFieldGroupProperties);
}
}
@@ -0,0 +1,8 @@
import { type ActiveNavigationItem } from '@/navigation-menu-item/common/types/ActiveNavigationItem';
import { createAtomState } from '@/ui/utilities/state/jotai/utils/createAtomState';
export const activeNavigationItemState =
createAtomState<ActiveNavigationItem | null>({
key: 'activeNavigationItemState',
defaultValue: null,
});
@@ -0,0 +1,4 @@
export type ActiveNavigationItem = {
navItemId: string;
objectNameSingular: string;
};
@@ -13,7 +13,6 @@ describe('filterAndSortNavigationMenuItems', () => {
namePlural: 'people',
labelPlural: 'People',
icon: 'IconUser',
isActive: true,
} as EnrichedObjectMetadataItem;
const mockView: Pick<View, 'id' | 'objectMetadataId' | 'key'> = {
@@ -224,57 +223,6 @@ describe('filterAndSortNavigationMenuItems', () => {
expect(result).toEqual([]);
});
it('should filter out items for deactivated objects', () => {
const inactiveObjectMetadataItem = {
...mockObjectMetadataItem,
id: 'inactive-metadata-id',
isActive: false,
} as EnrichedObjectMetadataItem;
const result = filterAndSortNavigationMenuItems(
[
{
id: 'obj-1',
type: NavigationMenuItemType.OBJECT,
targetObjectMetadataId: 'inactive-metadata-id',
position: 1,
} as NavigationMenuItem,
],
[],
[inactiveObjectMetadataItem],
);
expect(result).toEqual([]);
});
it('should filter out view items for deactivated objects', () => {
const inactiveObjectMetadataItem = {
...mockObjectMetadataItem,
id: 'inactive-metadata-id',
isActive: false,
} as EnrichedObjectMetadataItem;
const viewForInactiveObject: Pick<View, 'id' | 'objectMetadataId' | 'key'> =
{
id: 'view-for-inactive',
objectMetadataId: 'inactive-metadata-id',
key: ViewKey.INDEX,
};
const result = filterAndSortNavigationMenuItems(
[
{
id: 'view-item-1',
type: NavigationMenuItemType.VIEW,
viewId: 'view-for-inactive',
position: 1,
} as NavigationMenuItem,
],
[viewForInactiveObject],
[inactiveObjectMetadataItem],
);
expect(result).toEqual([]);
});
it('should keep folder items', () => {
const result = filterAndSortNavigationMenuItems(
[
@@ -1,5 +1,5 @@
import { NavigationMenuItemType } from 'twenty-shared/types';
import { isLocationMatchingNavigationMenuItem } from '@/navigation-menu-item/common/utils/isLocationMatchingNavigationMenuItem';
import { NavigationMenuItemType } from 'twenty-shared/types';
describe('isLocationMatchingNavigationMenuItem', () => {
it('should return true when item link matches current path (non-view) or current view path (view)', () => {
@@ -7,12 +7,8 @@ import { type NavigationMenuItem } from '~/generated-metadata/graphql';
export const filterAndSortNavigationMenuItems = (
navigationMenuItems: NavigationMenuItem[],
views: Pick<View, 'id' | 'objectMetadataId' | 'key'>[],
objectMetadataItems: Pick<EnrichedObjectMetadataItem, 'id' | 'isActive'>[],
objectMetadataItems: Pick<EnrichedObjectMetadataItem, 'id'>[],
): NavigationMenuItem[] => {
const activeObjectMetadataItems = objectMetadataItems.filter(
(meta) => meta.isActive,
);
return navigationMenuItems
.filter((item) => {
if (item.type === NavigationMenuItemType.FOLDER) {
@@ -24,7 +20,7 @@ export const filterAndSortNavigationMenuItems = (
if (item.type === NavigationMenuItemType.OBJECT) {
return (
isDefined(item.targetObjectMetadataId) &&
activeObjectMetadataItems.some(
objectMetadataItems.some(
(meta) => meta.id === item.targetObjectMetadataId,
)
);
@@ -36,9 +32,7 @@ export const filterAndSortNavigationMenuItems = (
const view = views.find((view) => view.id === item.viewId);
return (
isDefined(view) &&
activeObjectMetadataItems.some(
(meta) => meta.id === view.objectMetadataId,
)
objectMetadataItems.some((meta) => meta.id === view.objectMetadataId)
);
}
if (item.type === NavigationMenuItemType.RECORD) {
@@ -46,7 +40,7 @@ export const filterAndSortNavigationMenuItems = (
isDefined(item.targetRecordId) &&
isDefined(item.targetObjectMetadataId) &&
isDefined(item.targetRecordIdentifier) &&
activeObjectMetadataItems.some(
objectMetadataItems.some(
(meta) => meta.id === item.targetObjectMetadataId,
)
);
@@ -0,0 +1,14 @@
import { AppPath } from 'twenty-shared/types';
import { getAppPath } from 'twenty-shared/utils';
export const matchesRecordShowPathForObject = (
pathname: string,
objectNameSingular: string,
): boolean => {
const recordShowBase = getAppPath(AppPath.RecordShowPage, {
objectNameSingular,
objectRecordId: '',
});
return pathname.startsWith(`${recordShowBase}/`);
};
@@ -3,6 +3,7 @@ import { NavigationMenuItemType } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { type NavigationMenuItem } from '~/generated-metadata/graphql';
import { activeNavigationItemState } from '@/navigation-menu-item/common/states/activeNavigationItemState';
import { getNavigationMenuItemColor } from '@/navigation-menu-item/common/utils/getNavigationMenuItemColor';
import { NavigationMenuItemIcon } from '@/navigation-menu-item/display/components/NavigationMenuItemIcon';
import type { EnrichedObjectMetadataItem } from '@/object-metadata/types/EnrichedObjectMetadataItem';
@@ -16,6 +17,7 @@ import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMeta
import { NavigationDrawerSubItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSubItem';
import { getNavigationSubItemLeftAdornment } from '@/ui/navigation/navigation-drawer/utils/getNavigationSubItemLeftAdornment';
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState';
import { viewsSelector } from '@/views/states/selectors/viewsSelector';
type NavigationMenuItemFolderSubItemProps = {
@@ -79,6 +81,17 @@ export const NavigationMenuItemFolderSubItem = ({
(navigationMenuItem.type === NavigationMenuItemType.LINK ||
isDefined(objectMetadataItem));
const setActiveNavigationItem = useSetAtomState(activeNavigationItemState);
const handleBeforeNavigation = () => {
if (isDefined(objectNameSingular)) {
setActiveNavigationItem({
navItemId: navigationMenuItem.id,
objectNameSingular,
});
}
};
const handleClick =
onClick ??
(isEditable
@@ -108,6 +121,7 @@ export const NavigationMenuItemFolderSubItem = ({
objectMetadataItem ?? undefined,
)}
to={isDragging || handleClick ? undefined : computedLink}
onBeforeNavigation={handleBeforeNavigation}
onClick={handleClick}
active={index === selectedNavigationMenuItemIndex}
isSelectedInEditMode={isEditHighlightedInNavigationMenu}
@@ -1,13 +1,14 @@
import { isNonEmptyString } from '@sniptt/guards';
import { useLocation, useNavigate } from 'react-router-dom';
import { NavigationMenuItemType } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { useIsMobile } from 'twenty-ui/utilities';
import { type NavigationMenuItem } from '~/generated-metadata/graphql';
import { activeNavigationItemState } from '@/navigation-menu-item/common/states/activeNavigationItemState';
import { currentNavigationMenuItemFolderIdState } from '@/navigation-menu-item/common/states/currentNavigationMenuItemFolderIdState';
import { openNavigationMenuItemFolderIdsState } from '@/navigation-menu-item/common/states/openNavigationMenuItemFolderIdsState';
import { isLocationMatchingNavigationMenuItem } from '@/navigation-menu-item/common/utils/isLocationMatchingNavigationMenuItem';
import { resolveFolderSelectedNavigationMenuItemIndex } from '@/navigation-menu-item/display/folder/utils/resolveFolderSelectedNavigationMenuItemIndex';
import { useNavigationMenuItemsData } from '@/navigation-menu-item/display/hooks/useNavigationMenuItemsData';
import { getNavigationMenuItemComputedLink } from '@/navigation-menu-item/display/utils/getNavigationMenuItemComputedLink';
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState';
@@ -31,6 +32,7 @@ export const useNavigationMenuItemFolderOpenState = ({
const isMobile = useIsMobile();
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
const views = useAtomStateValue(viewsSelector);
const { workspaceNavigationMenuItems } = useNavigationMenuItemsData();
const [openNavigationMenuItemFolderIds, setOpenNavigationMenuItemFolderIds] =
useAtomState(openNavigationMenuItemFolderIdsState);
@@ -38,25 +40,7 @@ export const useNavigationMenuItemFolderOpenState = ({
currentNavigationMenuItemFolderIdState,
);
const selectedNavigationMenuItemIndex = navigationMenuItems.findIndex(
(item) => {
const computedLink = getNavigationMenuItemComputedLink(
item,
objectMetadataItems,
views,
);
return isLocationMatchingNavigationMenuItem(
currentPath,
currentViewPath,
item.type,
computedLink,
);
},
);
const isExplicitlyOpen = openNavigationMenuItemFolderIds.includes(folderId);
const hasActiveChild = selectedNavigationMenuItemIndex >= 0;
const isOpen = isExplicitlyOpen || hasActiveChild;
const isOpen = openNavigationMenuItemFolderIds.includes(folderId);
const handleToggle = () => {
if (isMobile) {
@@ -65,37 +49,43 @@ export const useNavigationMenuItemFolderOpenState = ({
);
} else {
setOpenNavigationMenuItemFolderIds((current) =>
current.includes(folderId)
isOpen
? current.filter((id) => id !== folderId)
: [...current, folderId],
);
}
if (!isOpen) {
const firstNonLinkItem = navigationMenuItems.find((item) => {
for (const item of navigationMenuItems) {
if (item.type === NavigationMenuItemType.LINK) {
return false;
continue;
}
const computedLink = getNavigationMenuItemComputedLink(
item,
objectMetadataItems,
views,
);
return isNonEmptyString(computedLink);
});
if (isDefined(firstNonLinkItem)) {
const link = getNavigationMenuItemComputedLink(
firstNonLinkItem,
item,
objectMetadataItems,
views,
);
if (isNonEmptyString(link)) {
navigate(link);
break;
}
}
}
};
const activeNavigationItem = useAtomStateValue(activeNavigationItemState);
const selectedNavigationMenuItemIndex =
resolveFolderSelectedNavigationMenuItemIndex({
navigationMenuItems,
activeNavigationItem,
currentPath,
currentViewPath,
objectMetadataItems,
views,
workspaceNavigationMenuItems,
});
return {
isOpen,
handleToggle,

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