Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5f316902ea |
@@ -474,7 +474,7 @@ const createExampleNavigationMenuItem = async ({
|
||||
const universalIdentifier = v4();
|
||||
|
||||
const content = `import { defineNavigationMenuItem } from 'twenty-sdk';
|
||||
import { EXAMPLE_VIEW_UNIVERSAL_IDENTIFIER } from 'src/views/example-view';
|
||||
import { EXAMPLE_VIEW_UNIVERSAL_IDENTIFIER } from 'src/views/example-view';
|
||||
|
||||
export default defineNavigationMenuItem({
|
||||
universalIdentifier: '${universalIdentifier}',
|
||||
@@ -482,7 +482,6 @@ export default defineNavigationMenuItem({
|
||||
icon: 'IconList',
|
||||
color: 'blue',
|
||||
position: 0,
|
||||
type: 'VIEW',
|
||||
viewUniversalIdentifier: EXAMPLE_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
});
|
||||
`;
|
||||
|
||||
+2
-4
@@ -1,10 +1,8 @@
|
||||
import { defineNavigationMenuItem } from 'twenty-sdk';
|
||||
import { NavigationMenuItemType } from 'twenty-shared/types';
|
||||
import { POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/post-card-recipient.object';
|
||||
import { ALL_POST_CARD_RECIPIENTS_VIEW_ID } from '../views/all-post-card-recipients.view';
|
||||
|
||||
export default defineNavigationMenuItem({
|
||||
universalIdentifier: 'c1a2b3c4-0003-4a7b-8c9d-0e1f2a3b4c5d',
|
||||
position: 2,
|
||||
type: NavigationMenuItemType.OBJECT,
|
||||
targetObjectUniversalIdentifier: POST_CARD_RECIPIENT_UNIVERSAL_IDENTIFIER,
|
||||
viewUniversalIdentifier: ALL_POST_CARD_RECIPIENTS_VIEW_ID,
|
||||
});
|
||||
|
||||
+2
-4
@@ -1,10 +1,8 @@
|
||||
import { defineNavigationMenuItem } from 'twenty-sdk';
|
||||
import { NavigationMenuItemType } from 'twenty-shared/types';
|
||||
import { POST_CARD_UNIVERSAL_IDENTIFIER } from '../objects/post-card.object';
|
||||
import { ALL_POST_CARDS_VIEW_ID } from '../views/all-post-cards.view';
|
||||
|
||||
export default defineNavigationMenuItem({
|
||||
universalIdentifier: 'c1a2b3c4-0001-4a7b-8c9d-0e1f2a3b4c5d',
|
||||
position: 0,
|
||||
type: NavigationMenuItemType.OBJECT,
|
||||
targetObjectUniversalIdentifier: POST_CARD_UNIVERSAL_IDENTIFIER,
|
||||
viewUniversalIdentifier: ALL_POST_CARDS_VIEW_ID,
|
||||
});
|
||||
|
||||
+2
-4
@@ -1,10 +1,8 @@
|
||||
import { defineNavigationMenuItem } from 'twenty-sdk';
|
||||
import { NavigationMenuItemType } from 'twenty-shared/types';
|
||||
import { RECIPIENT_UNIVERSAL_IDENTIFIER } from '../objects/recipient.object';
|
||||
import { ALL_RECIPIENTS_VIEW_ID } from '../views/all-recipients.view';
|
||||
|
||||
export default defineNavigationMenuItem({
|
||||
universalIdentifier: 'c1a2b3c4-0002-4a7b-8c9d-0e1f2a3b4c5d',
|
||||
position: 1,
|
||||
type: NavigationMenuItemType.OBJECT,
|
||||
targetObjectUniversalIdentifier: RECIPIENT_UNIVERSAL_IDENTIFIER,
|
||||
viewUniversalIdentifier: ALL_RECIPIENTS_VIEW_ID,
|
||||
});
|
||||
|
||||
+1
-3
@@ -1,6 +1,5 @@
|
||||
import { defineNavigationMenuItem } from 'twenty-sdk';
|
||||
import { NavigationMenuItemType } from 'twenty-shared/types';
|
||||
import { EXAMPLE_VIEW_UNIVERSAL_IDENTIFIER } from 'src/views/example-view';
|
||||
import { EXAMPLE_VIEW_UNIVERSAL_IDENTIFIER } from 'src/views/example-view';
|
||||
|
||||
export default defineNavigationMenuItem({
|
||||
universalIdentifier: '10f90627-e9c2-44b7-9742-bed77e3d1b17',
|
||||
@@ -8,6 +7,5 @@ export default defineNavigationMenuItem({
|
||||
icon: 'IconList',
|
||||
color: 'blue',
|
||||
position: 0,
|
||||
type: NavigationMenuItemType.VIEW,
|
||||
viewUniversalIdentifier: EXAMPLE_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
});
|
||||
|
||||
-2
@@ -1,12 +1,10 @@
|
||||
import { CALL_RECORDING_VIEW_UNIVERSAL_IDENTIFIER } from 'src/views/call-recording-view';
|
||||
import { defineNavigationMenuItem } from 'twenty-sdk';
|
||||
import { NavigationMenuItemType } from 'twenty-shared/types';
|
||||
|
||||
export default defineNavigationMenuItem({
|
||||
universalIdentifier: '5248a62d-7d2e-43a7-ba45-6e8f61876a71',
|
||||
name: 'Call recordings',
|
||||
icon: 'IconPhone',
|
||||
position: 0,
|
||||
type: NavigationMenuItemType.VIEW,
|
||||
viewUniversalIdentifier: CALL_RECORDING_VIEW_UNIVERSAL_IDENTIFIER,
|
||||
});
|
||||
|
||||
-2
@@ -1,5 +1,4 @@
|
||||
import { defineNavigationMenuItem } from 'twenty-sdk';
|
||||
import { NavigationMenuItemType } from 'twenty-shared/types';
|
||||
import { UNIVERSAL_IDENTIFIERS } from 'src/constants/universal-identifiers.constant';
|
||||
|
||||
export default defineNavigationMenuItem({
|
||||
@@ -7,7 +6,6 @@ export default defineNavigationMenuItem({
|
||||
name: 'Self host user',
|
||||
icon: 'IconList',
|
||||
position: 1,
|
||||
type: NavigationMenuItemType.VIEW,
|
||||
viewUniversalIdentifier:
|
||||
UNIVERSAL_IDENTIFIERS.views.selfHostingUserView.universalIdentifier,
|
||||
});
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -6,7 +6,7 @@ import { returnToPathState } from '@/auth/states/returnToPathState';
|
||||
import { calendarBookingPageIdState } from '@/client-config/states/calendarBookingPageIdState';
|
||||
import { useIsCurrentLocationOnAWorkspace } from '@/domain-manager/hooks/useIsCurrentLocationOnAWorkspace';
|
||||
import { useDefaultHomePagePath } from '@/navigation/hooks/useDefaultHomePagePath';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { useOnboardingStatus } from '@/onboarding/hooks/useOnboardingStatus';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
import { useIsWorkspaceActivationStatusEqualsTo } from '@/workspace/hooks/useIsWorkspaceActivationStatusEqualsTo';
|
||||
@@ -40,7 +40,7 @@ export const usePageChangeEffectNavigateLocation = () => {
|
||||
appPaths.some((appPath) => isMatchingLocation(location, appPath));
|
||||
|
||||
const objectNamePlural = useParams().objectNamePlural ?? '';
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsState);
|
||||
const objectMetadataItem = objectMetadataItems?.find(
|
||||
(objectMetadataItem) => objectMetadataItem.namePlural === objectNamePlural,
|
||||
);
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Pasmaak"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Enkelteken-aanmelding (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Enkelfout"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Enkelvoudige en meervoudige etikette moet verskil"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "تخصيص"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "تسجيل الدخول لمرة واحدة (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "فردي"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "يجب أن تكون العبارات الفردية والجمع مختلفة"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Personalització"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Autenticació única (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Singular"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Les etiquetes en singular i plural han de ser diferents"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Přizpůsobení"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Jednotné přihlášení (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Jednotlivý"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Jednotné a množné označení se musí lišit"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Tilpasning"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Enkelt logon (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Ental"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Entals- og flertalsmærkater skal være forskellige"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Anpassung"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Single Sign-On (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Einzahl"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Singular- und Pluralbezeichnungen müssen unterschiedlich sein"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Προσαρμογή"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12517,6 +12518,11 @@ msgstr "Ενιαία Σύνδεση (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Μοναδικός"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Οι ενικές και πληθυντικές ετικέτες πρέπει να είναι διαφορετικές"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3892,6 +3892,7 @@ msgstr "Customization"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12510,6 +12511,11 @@ msgstr "Single sign-on (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Singular"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Singular and plural labels must be different"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Personalización"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Inicio de sesión único (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Singular"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Las etiquetas en singular y plural deben ser diferentes"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Mukauttaminen"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Kertakirjautuminen (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Yksikkö"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Yksikön ja monikon nimikkeiden on oltava erilaisia"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Personnalisation"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Single sign-on (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Singulier"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Les libellés au singulier et au pluriel doivent être différents"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
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
@@ -3897,6 +3897,7 @@ msgstr "התאמה אישית"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "כניסה אחידה <b>(</b>SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "יחיד"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "יש לוודא ששמות היחיד והרבים יהיו שונים"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Testreszabás"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Egyszerű bejelentkezés (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Egyes"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Az egyes és többes számú címkéknek különbözniük kell"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Personalizzazione"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Single sign-on (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Singolare"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Le etichette singolari e plurali devono essere diverse"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "カスタマイズ"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "シングルサインオン (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "単数形"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "単数形と複数形のラベルは異なる必要があります"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "사용자 지정"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "싱글 사인온(SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "단수형"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "단수와 복수 레이블은 달라야 합니다"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Aanpassen"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Eenmalige aanmelding (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Enkelvoud"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Enkelvoudige en meervoudige labels moeten verschillend zijn"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Tilpasning"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Enkel pålogging (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Entall"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Entall- og flertallsetiketter må være forskjellige"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Dostosowywanie"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Jednolite logowanie (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Liczba pojedyncza"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Formularz liczby pojedynczej i mnogiej muszą się różnić"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3892,6 +3892,7 @@ msgstr ""
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12510,6 +12511,11 @@ msgstr ""
|
||||
msgid "Singular"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr ""
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Personalização"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Logon único (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Singular"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Os rótulos singulares e plurais devem ser diferentes"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Personalização"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Início de sessão único (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Singular"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Os rótulos singular e plural devem ser diferentes"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Personalizare"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Autentificare unică (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Singular"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Etichetele pentru singular și plural trebuie să fie diferite"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
Binary file not shown.
@@ -3897,6 +3897,7 @@ msgstr "Прилагођавање"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Јединствена пријава (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Једниствен"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Једнина и множина означитељи морају бити различити"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Anpassning"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12519,6 +12520,11 @@ msgstr "Enkel inloggning (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Singular"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Singulära och plurala etiketterna måste vara olika"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Özelleştirme"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Tek oturum açma (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Tekil"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Tekil ve çoğul etiketler farklı olmalıdır"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Налаштування"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Єдиний вхід (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Одиничне число"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Одниночні і множинні мітки мають бути різними"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "Tùy chỉnh"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "Đăng nhập một lần (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "Số ít"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "Nhãn số ít và số nhiều phải khác nhau"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "自定义"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "单点登录 (SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "单数"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "单数和复数标签必须不同"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
@@ -3897,6 +3897,7 @@ msgstr "自定義"
|
||||
|
||||
#. js-lingui-id: srRMnJ
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelNavigationMenuItemEditPage.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditObjectViewBase.tsx
|
||||
#: src/modules/side-panel/pages/navigation-menu-item/components/SidePanelEditLinkItemView.tsx
|
||||
msgid "Customize"
|
||||
@@ -12515,6 +12516,11 @@ msgstr "單點登錄(SSO)"
|
||||
msgid "Singular"
|
||||
msgstr "單數"
|
||||
|
||||
#. js-lingui-id: djfBXF
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural labels must be different"
|
||||
msgstr "單數和複數標籤必須不同"
|
||||
|
||||
#. js-lingui-id: zvwLTy
|
||||
#: src/modules/settings/data-model/validation-schemas/settingsDataModelObjectAboutFormSchema.ts
|
||||
msgid "Singular and plural names must be different"
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ import { type NoteTarget } from '@/activities/types/NoteTarget';
|
||||
import { type Task } from '@/activities/types/Task';
|
||||
import { type TaskTarget } from '@/activities/types/TaskTarget';
|
||||
import { getActivityTargetObjectRecords } from '@/activities/utils/getActivityTargetObjectRecords';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { recordStoreFamilyState } from '@/object-record/record-store/states/recordStoreFamilyState';
|
||||
import { useAtomFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
@@ -14,7 +14,7 @@ export const useActivityTargetObjectRecords = (
|
||||
activityRecordId?: string,
|
||||
activityTargets?: Nullable<NoteTarget[] | TaskTarget[]>,
|
||||
) => {
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsState);
|
||||
|
||||
const activity = useAtomFamilyStateValue(
|
||||
recordStoreFamilyState,
|
||||
|
||||
+2
-2
@@ -8,7 +8,7 @@ import { type ActivityTargetableObject } from '@/activities/types/ActivityTarget
|
||||
import { type NoteTarget } from '@/activities/types/NoteTarget';
|
||||
import { type TaskTarget } from '@/activities/types/TaskTarget';
|
||||
import { getActivityTargetsFilter } from '@/activities/utils/getActivityTargetsFilter';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
@@ -35,7 +35,7 @@ export const useActivityTargetsForTargetableObjects = ({
|
||||
limit: number;
|
||||
}) => {
|
||||
const objectMetadataItems = useAtomStateValue<ObjectMetadataItem[]>(
|
||||
objectMetadataItemsSelector,
|
||||
objectMetadataItemsState,
|
||||
);
|
||||
const isNoteTargetMigrated = useIsFeatureEnabled(
|
||||
FeatureFlagKey.IS_NOTE_TARGET_MIGRATED,
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
import { type ActivityTargetWithTargetRecord } from '@/activities/types/ActivityTargetObject';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { CoreObjectNameSingular } from 'twenty-shared/types';
|
||||
import { useMultipleRecordPickerOpen } from '@/object-record/record-picker/multiple-record-picker/hooks/useMultipleRecordPickerOpen';
|
||||
import { useMultipleRecordPickerPerformSearch } from '@/object-record/record-picker/multiple-record-picker/hooks/useMultipleRecordPickerPerformSearch';
|
||||
@@ -31,7 +31,7 @@ export const useOpenActivityTargetCellEditMode = () => {
|
||||
activityTargetObjectRecords,
|
||||
}: OpenActivityTargetCellEditModeProps) => {
|
||||
const objectMetadataItems = store
|
||||
.get(objectMetadataItemsSelector.atom)
|
||||
.get(objectMetadataItemsState.atom)
|
||||
.filter(
|
||||
(objectMetadataItem) =>
|
||||
objectMetadataItem.isSearchable &&
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ import { type NoteTarget } from '@/activities/types/NoteTarget';
|
||||
import { type TaskTarget } from '@/activities/types/TaskTarget';
|
||||
import { getActivityTargetFieldNameForObject } from '@/activities/utils/getActivityTargetFieldNameForObject';
|
||||
import { getJoinObjectNameSingular } from '@/activities/utils/getJoinObjectNameSingular';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { CoreObjectNameSingular } from 'twenty-shared/types';
|
||||
import { useCreateOneRecord } from '@/object-record/hooks/useCreateOneRecord';
|
||||
import { useDeleteOneRecord } from '@/object-record/hooks/useDeleteOneRecord';
|
||||
@@ -81,7 +81,7 @@ export const useUpdateActivityTargetFromCell = ({
|
||||
? 'task'
|
||||
: 'note';
|
||||
|
||||
const objectMetadataItems = store.get(objectMetadataItemsSelector.atom);
|
||||
const objectMetadataItems = store.get(objectMetadataItemsState.atom);
|
||||
|
||||
const pickedObjectMetadataItem = objectMetadataItems.find(
|
||||
(objectMetadataItem) =>
|
||||
|
||||
+5
@@ -63,6 +63,11 @@ const StyledVerticalLine = styled.div`
|
||||
`;
|
||||
|
||||
const StyledSummary = styled.summary`
|
||||
align-items: center;
|
||||
display: flex;
|
||||
flex: 1;
|
||||
flex-direction: row;
|
||||
gap: ${themeCssVariables.spacing[1]};
|
||||
width: 100%;
|
||||
`;
|
||||
|
||||
|
||||
+2
-2
@@ -1,10 +1,10 @@
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
|
||||
export const useLinkedObjectObjectMetadataItem = (id: string | null) => {
|
||||
const objectMetadataItems: ObjectMetadataItem[] = useAtomStateValue(
|
||||
objectMetadataItemsSelector,
|
||||
objectMetadataItemsState,
|
||||
);
|
||||
|
||||
if (id === null) {
|
||||
|
||||
+2
-4
@@ -12,13 +12,12 @@ const StyledCardContainer = styled.div`
|
||||
flex-direction: column;
|
||||
flex-grow: 1;
|
||||
gap: ${themeCssVariables.spacing[2]};
|
||||
max-width: 400px;
|
||||
padding: ${themeCssVariables.spacing[2]} 0px ${themeCssVariables.spacing[1]}
|
||||
0px;
|
||||
width: 100%;
|
||||
width: 400px;
|
||||
|
||||
@media (max-width: ${MOBILE_VIEWPORT}px) {
|
||||
max-width: 300px;
|
||||
width: 300px;
|
||||
}
|
||||
`;
|
||||
|
||||
@@ -33,7 +32,6 @@ const StyledCardInnerContainer = styled.div`
|
||||
flex-direction: column;
|
||||
gap: ${themeCssVariables.spacing[2]};
|
||||
justify-content: center;
|
||||
overflow: hidden;
|
||||
padding: ${themeCssVariables.spacing[2]};
|
||||
`;
|
||||
|
||||
|
||||
+1
-2
@@ -17,8 +17,7 @@ const StyledEventCardMessageContainer = styled.div<{ canOpen?: boolean }>`
|
||||
cursor: ${({ canOpen }) => (canOpen ? 'pointer' : 'not-allowed')};
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
max-width: 380px;
|
||||
width: 100%;
|
||||
width: 380px;
|
||||
`;
|
||||
|
||||
const StyledEmailContent = styled.div`
|
||||
|
||||
+7
-1
@@ -29,7 +29,7 @@ export const getActivityTargetObjectRecords = ({
|
||||
|
||||
const isNote = isDefined(activityRecord) && 'noteTargets' in activityRecord;
|
||||
|
||||
const targets = activityTargets
|
||||
const rawTargets = activityTargets
|
||||
? activityTargets
|
||||
: 'noteTargets' in activityRecord && isDefined(activityRecord.noteTargets)
|
||||
? activityRecord.noteTargets
|
||||
@@ -37,6 +37,12 @@ export const getActivityTargetObjectRecords = ({
|
||||
? activityRecord.taskTargets
|
||||
: [];
|
||||
|
||||
if (!Array.isArray(rawTargets)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const targets = rawTargets;
|
||||
|
||||
const activityTargetObjectNameSingular = isNote
|
||||
? CoreObjectNameSingular.NoteTarget
|
||||
: CoreObjectNameSingular.TaskTarget;
|
||||
|
||||
@@ -10,7 +10,7 @@ import { contextStoreCurrentViewTypeComponentState } from '@/context-store/state
|
||||
import { contextStoreFiltersComponentState } from '@/context-store/states/contextStoreFiltersComponentState';
|
||||
import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
|
||||
import { ContextStoreViewType } from '@/context-store/types/ContextStoreViewType';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { recordStoreFamilySelector } from '@/object-record/record-store/states/selectors/recordStoreFamilySelector';
|
||||
import { getTabListInstanceIdFromPageLayoutId } from '@/page-layout/utils/getTabListInstanceIdFromPageLayoutId';
|
||||
import { activeTabIdComponentState } from '@/ui/layout/tab-list/states/activeTabIdComponentState';
|
||||
@@ -35,7 +35,7 @@ export const useGetBrowsingContext = () => {
|
||||
}),
|
||||
);
|
||||
|
||||
const objectMetadataItems = store.get(objectMetadataItemsSelector.atom);
|
||||
const objectMetadataItems = store.get(objectMetadataItemsState.atom);
|
||||
|
||||
const objectMetadataItem = objectMetadataItems.find(
|
||||
(item) => item.id === objectMetadataItemId,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { MentionRecordChip } from '@/mention/components/MentionRecordChip';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { RecordChip } from '@/object-record/components/RecordChip';
|
||||
import { useFindOneRecord } from '@/object-record/hooks/useFindOneRecord';
|
||||
import { createReactInlineContentSpec } from '@blocknote/react';
|
||||
@@ -32,7 +32,7 @@ const LegacyMentionRenderer = ({
|
||||
recordId: string;
|
||||
objectMetadataId: string;
|
||||
}) => {
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsState);
|
||||
|
||||
const objectMetadataItem = objectMetadataItems.find(
|
||||
(item) => item.id === objectMetadataId,
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@ import { type CommandMenuContextType } from '@/command-menu-item/contexts/Comman
|
||||
import { CommandMenuContextProviderDefault } from '@/command-menu-item/contexts/CommandMenuContextProviderDefault';
|
||||
import { CommandMenuContextProviderWorkflowObjects } from '@/command-menu-item/contexts/CommandMenuContextProviderWorkflowObjects';
|
||||
import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { CoreObjectNameSingular } from 'twenty-shared/types';
|
||||
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue';
|
||||
@@ -23,7 +23,7 @@ export const CommandMenuContextProviderLegacy = ({
|
||||
contextStoreCurrentObjectMetadataItemIdComponentState,
|
||||
);
|
||||
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsState);
|
||||
|
||||
const objectMetadataItem =
|
||||
objectMetadataItemOverride ??
|
||||
|
||||
+2
-2
@@ -7,7 +7,7 @@ import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context
|
||||
import { contextStoreIsPageInEditModeComponentState } from '@/context-store/states/contextStoreIsPageInEditModeComponentState';
|
||||
import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
|
||||
import { useMountHeadlessFrontComponent } from '@/front-components/hooks/useMountHeadlessFrontComponent';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { useOpenFrontComponentInSidePanel } from '@/side-panel/hooks/useOpenFrontComponentInSidePanel';
|
||||
import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
@@ -180,7 +180,7 @@ export const useCommandMenuItemFrontComponentCommands = (
|
||||
contextStoreTargetedRecordsRuleComponentState,
|
||||
);
|
||||
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsState);
|
||||
|
||||
const currentObjectMetadataItem = objectMetadataItems.find(
|
||||
(item) => item.id === contextStoreCurrentObjectMetadataItemId,
|
||||
|
||||
+2
-4
@@ -27,7 +27,7 @@ import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context
|
||||
import { contextStoreCurrentViewTypeComponentState } from '@/context-store/states/contextStoreCurrentViewTypeComponentState';
|
||||
import { ContextStoreComponentInstanceContext } from '@/context-store/states/contexts/ContextStoreComponentInstanceContext';
|
||||
import { ContextStoreViewType } from '@/context-store/types/ContextStoreViewType';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { RecordComponentInstanceContextsWrapper } from '@/object-record/components/RecordComponentInstanceContextsWrapper';
|
||||
import { SidePanelRouter } from '@/side-panel/components/SidePanelRouter';
|
||||
import { SIDE_PANEL_COMPONENT_INSTANCE_ID } from '@/side-panel/constants/SidePanelComponentInstanceId';
|
||||
@@ -102,9 +102,7 @@ const meta: Meta<typeof SidePanelRootPage> = {
|
||||
},
|
||||
]);
|
||||
|
||||
const objectMetadataItems = jotaiStore.get(
|
||||
objectMetadataItemsSelector.atom,
|
||||
);
|
||||
const objectMetadataItems = jotaiStore.get(objectMetadataItemsState.atom);
|
||||
const companyMetadataItem = objectMetadataItems.find(
|
||||
(item) => item.nameSingular === 'company',
|
||||
);
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@ import { MainContextStoreProviderEffect } from '@/context-store/components/MainC
|
||||
import { metadataStoreState } from '@/metadata-store/states/metadataStoreState';
|
||||
import { useIsSettingsPage } from '@/navigation/hooks/useIsSettingsPage';
|
||||
import { useLastVisitedView } from '@/navigation/hooks/useLastVisitedView';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { useShowAuthModal } from '@/ui/layout/hooks/useShowAuthModal';
|
||||
import { useAtomFamilyStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilyStateValue';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
@@ -60,7 +60,7 @@ export const MainContextStoreProvider = () => {
|
||||
const [searchParams] = useSearchParams();
|
||||
const viewIdQueryParamRaw = searchParams.get('viewId');
|
||||
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsState);
|
||||
const metadataStore = useAtomFamilyStateValue(metadataStoreState, 'views');
|
||||
const views = useAtomStateValue(viewsSelector);
|
||||
|
||||
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
import { contextStoreCurrentObjectMetadataItemIdComponentState } from '@/context-store/states/contextStoreCurrentObjectMetadataItemIdComponentState';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
|
||||
@@ -11,7 +11,7 @@ export const useContextStoreObjectMetadataItem = (
|
||||
contextStoreInstanceId,
|
||||
);
|
||||
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsState);
|
||||
|
||||
const objectMetadataItem = objectMetadataItems.find(
|
||||
(objectMetadataItemToFind) =>
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ import { contextStoreFiltersComponentState } from '@/context-store/states/contex
|
||||
import { contextStoreTargetedRecordsRuleComponentState } from '@/context-store/states/contextStoreTargetedRecordsRuleComponentState';
|
||||
import { computeContextStoreFilters } from '@/context-store/utils/computeContextStoreFilters';
|
||||
import { useObjectMetadataItemById } from '@/object-metadata/hooks/useObjectMetadataItemById';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { useFindManyRecords } from '@/object-record/hooks/useFindManyRecords';
|
||||
import { useFilterValueDependencies } from '@/object-record/record-filter/hooks/useFilterValueDependencies';
|
||||
import { RecordFilterOperand } from '@/object-record/record-filter/types/RecordFilterOperand';
|
||||
@@ -50,7 +50,7 @@ export const useFindManyRecordsSelectedInContextStore = ({
|
||||
|
||||
const { filterValueDependencies } = useFilterValueDependencies();
|
||||
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsState);
|
||||
|
||||
const allFieldMetadataItems = objectMetadataItems.flatMap(
|
||||
(objectMetadataItem) => objectMetadataItem.fields,
|
||||
|
||||
+11
-9
@@ -1,13 +1,15 @@
|
||||
import { styled } from '@linaria/react';
|
||||
import { isNonEmptyString } from '@sniptt/guards';
|
||||
import { useContext, type ReactNode } from 'react';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { IconGripVertical, type IconComponent } from 'twenty-ui/display';
|
||||
import { ThemeContext, themeCssVariables } from 'twenty-ui/theme-constants';
|
||||
|
||||
import { NavigationMenuItemStyleIcon } from '@/navigation-menu-item/components/NavigationMenuItemStyleIcon';
|
||||
import { NavigationMenuItemType } from 'twenty-shared/types';
|
||||
import { DEFAULT_NAVIGATION_MENU_ITEM_COLOR_FOLDER } from '@/navigation-menu-item/constants/NavigationMenuItemDefaultColorFolder';
|
||||
import { DEFAULT_NAVIGATION_MENU_ITEM_COLOR_LINK } from '@/navigation-menu-item/constants/NavigationMenuItemDefaultColorLink';
|
||||
import { NavigationMenuItemType } from '@/navigation-menu-item/constants/NavigationMenuItemType';
|
||||
import type { AddToNavigationDragPayload } from '@/navigation-menu-item/types/add-to-navigation-drag-payload';
|
||||
import { getEffectiveNavigationMenuItemColor } from '@/navigation-menu-item/utils/getEffectiveNavigationMenuItemColor';
|
||||
|
||||
const StyledIconSlot = styled.div<{
|
||||
$hasFixedSize: boolean;
|
||||
@@ -81,14 +83,14 @@ export const AddToNavigationDragHandle = ({
|
||||
disableDrag = false,
|
||||
}: AddToNavigationDragHandleProps) => {
|
||||
const { theme } = useContext(ThemeContext);
|
||||
const objectColor =
|
||||
payload.type === NavigationMenuItemType.OBJECT
|
||||
const effectiveColor =
|
||||
payload.type === 'object' && isNonEmptyString(payload.iconColor)
|
||||
? payload.iconColor
|
||||
: undefined;
|
||||
const effectiveColor = getEffectiveNavigationMenuItemColor(
|
||||
{ type: payload.type as NavigationMenuItemType },
|
||||
objectColor,
|
||||
);
|
||||
: payload.type === 'folder'
|
||||
? DEFAULT_NAVIGATION_MENU_ITEM_COLOR_FOLDER
|
||||
: payload.type === 'link'
|
||||
? DEFAULT_NAVIGATION_MENU_ITEM_COLOR_LINK
|
||||
: undefined;
|
||||
const hasBackgroundColor =
|
||||
payload.type !== NavigationMenuItemType.RECORD &&
|
||||
isDefined(effectiveColor) &&
|
||||
|
||||
+61
-122
@@ -1,14 +1,11 @@
|
||||
import { Droppable } from '@hello-pangea/dnd';
|
||||
import { useLingui } from '@lingui/react/macro';
|
||||
import { useContext, useState } from 'react';
|
||||
import { type NavigationMenuItem } from '~/generated-metadata/graphql';
|
||||
|
||||
import { NavigationSections } from '@/navigation-menu-item/constants/NavigationSections.constants';
|
||||
import { useIsDropDisabledForSection } from '@/navigation-menu-item/hooks/useIsDropDisabledForSection';
|
||||
import { createPortal } from 'react-dom';
|
||||
import { useLocation, useNavigate } from 'react-router-dom';
|
||||
import { NavigationMenuItemType } from 'twenty-shared/types';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { IconFolder, IconFolderOpen, IconHeartOff } from 'twenty-ui/display';
|
||||
|
||||
import { LightIconButton } from 'twenty-ui/input';
|
||||
@@ -21,18 +18,17 @@ import { NavigationMenuItemFolderNavigationDrawerItemDropdown } from '@/navigati
|
||||
import { NavigationMenuItemIcon } from '@/navigation-menu-item/components/NavigationMenuItemIcon';
|
||||
import { DEFAULT_NAVIGATION_MENU_ITEM_COLOR_FOLDER } from '@/navigation-menu-item/constants/NavigationMenuItemDefaultColorFolder';
|
||||
import { NAVIGATION_MENU_ITEM_FOLDER_DELETE_MODAL_ID } from '@/navigation-menu-item/constants/NavigationMenuItemFolderDeleteModalId';
|
||||
import { NavigationMenuItemType } from '@/navigation-menu-item/constants/NavigationMenuItemType';
|
||||
import { NavigationMenuItemDragContext } from '@/navigation-menu-item/contexts/NavigationMenuItemDragContext';
|
||||
import { useDeleteNavigationMenuItem } from '@/navigation-menu-item/hooks/useDeleteNavigationMenuItem';
|
||||
import { useDeleteNavigationMenuItemFolder } from '@/navigation-menu-item/hooks/useDeleteNavigationMenuItemFolder';
|
||||
import { useRenameNavigationMenuItemFolder } from '@/navigation-menu-item/hooks/useRenameNavigationMenuItemFolder';
|
||||
import { openNavigationMenuItemFolderIdsState } from '@/navigation-menu-item/states/openNavigationMenuItemFolderIdsState';
|
||||
import { getEffectiveNavigationMenuItemColor } from '@/navigation-menu-item/utils/getEffectiveNavigationMenuItemColor';
|
||||
import { getNavigationMenuItemComputedLink } from '@/navigation-menu-item/utils/getNavigationMenuItemComputedLink';
|
||||
import { getNavigationMenuItemLabel } from '@/navigation-menu-item/utils/getNavigationMenuItemLabel';
|
||||
import { getNavigationMenuItemObjectNameSingular } from '@/navigation-menu-item/utils/getNavigationMenuItemObjectNameSingular';
|
||||
import { getNavigationMenuItemSecondaryLabel } from '@/navigation-menu-item/utils/getNavigationMenuItemSecondaryLabel';
|
||||
import { isLocationMatchingNavigationMenuItem } from '@/navigation-menu-item/utils/isLocationMatchingNavigationMenuItem';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { type ProcessedNavigationMenuItem } from '@/navigation-menu-item/utils/sortNavigationMenuItems';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { DraggableItem } from '@/ui/layout/draggable-list/components/DraggableItem';
|
||||
import { useCloseDropdown } from '@/ui/layout/dropdown/hooks/useCloseDropdown';
|
||||
import { isDropdownOpenComponentState } from '@/ui/layout/dropdown/states/isDropdownOpenComponentState';
|
||||
@@ -49,15 +45,14 @@ import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/use
|
||||
import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState';
|
||||
import { viewsSelector } from '@/views/states/selectors/viewsSelector';
|
||||
import { ViewKey } from '@/views/types/ViewKey';
|
||||
import { isNonEmptyString } from '@sniptt/guards';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
type CurrentWorkspaceMemberNavigationMenuItemsProps = {
|
||||
folder: {
|
||||
id: string;
|
||||
folderName: string;
|
||||
navigationMenuItems: NavigationMenuItem[];
|
||||
navigationMenuItems: ProcessedNavigationMenuItem[];
|
||||
};
|
||||
isGroup: boolean;
|
||||
isWorkspaceFolder?: boolean;
|
||||
@@ -69,8 +64,7 @@ export const CurrentWorkspaceMemberNavigationMenuItems = ({
|
||||
isWorkspaceFolder = false,
|
||||
}: CurrentWorkspaceMemberNavigationMenuItemsProps) => {
|
||||
const { t } = useLingui();
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
|
||||
const views = useAtomStateValue(viewsSelector);
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsState);
|
||||
const location = useLocation();
|
||||
const navigate = useNavigate();
|
||||
const currentPath = location.pathname;
|
||||
@@ -111,26 +105,13 @@ export const CurrentWorkspaceMemberNavigationMenuItems = ({
|
||||
}
|
||||
|
||||
if (!isOpen) {
|
||||
const firstNonLinkItem = folder.navigationMenuItems.find((item) => {
|
||||
if (item.type === NavigationMenuItemType.LINK) {
|
||||
return false;
|
||||
}
|
||||
const computedLink = getNavigationMenuItemComputedLink(
|
||||
item,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
return isNonEmptyString(computedLink);
|
||||
});
|
||||
if (isDefined(firstNonLinkItem)) {
|
||||
const link = getNavigationMenuItemComputedLink(
|
||||
firstNonLinkItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
if (isNonEmptyString(link)) {
|
||||
navigate(link);
|
||||
}
|
||||
const firstNonLinkItem = folder.navigationMenuItems.find(
|
||||
(item) =>
|
||||
item.itemType !== NavigationMenuItemType.LINK &&
|
||||
isNonEmptyString(item.link),
|
||||
);
|
||||
if (isDefined(firstNonLinkItem?.link)) {
|
||||
navigate(firstNonLinkItem.link);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -150,19 +131,8 @@ export const CurrentWorkspaceMemberNavigationMenuItems = ({
|
||||
const { closeDropdown } = useCloseDropdown();
|
||||
|
||||
const selectedNavigationMenuItemIndex = folder.navigationMenuItems.findIndex(
|
||||
(item) => {
|
||||
const computedLink = getNavigationMenuItemComputedLink(
|
||||
item,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
return isLocationMatchingNavigationMenuItem(
|
||||
currentPath,
|
||||
currentViewPath,
|
||||
item.type,
|
||||
computedLink,
|
||||
);
|
||||
},
|
||||
(item) =>
|
||||
isLocationMatchingNavigationMenuItem(currentPath, currentViewPath, item),
|
||||
);
|
||||
|
||||
const { deleteNavigationMenuItem } = useDeleteNavigationMenuItem();
|
||||
@@ -291,84 +261,53 @@ export const CurrentWorkspaceMemberNavigationMenuItems = ({
|
||||
// oxlint-disable-next-line react/jsx-props-no-spreading
|
||||
{...provided.droppableProps}
|
||||
>
|
||||
{folder.navigationMenuItems.map((navigationMenuItem, index) => {
|
||||
const label = getNavigationMenuItemLabel(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
const computedLink = getNavigationMenuItemComputedLink(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
const objectNameSingular =
|
||||
getNavigationMenuItemObjectNameSingular(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
const view = isDefined(navigationMenuItem.viewId)
|
||||
? views.find(
|
||||
(view) => view.id === navigationMenuItem.viewId,
|
||||
)
|
||||
: undefined;
|
||||
const isIndexView = view?.key === ViewKey.INDEX;
|
||||
|
||||
return (
|
||||
<DraggableItem
|
||||
key={navigationMenuItem.id}
|
||||
draggableId={navigationMenuItem.id}
|
||||
index={index}
|
||||
isInsideScrollableContainer
|
||||
itemComponent={
|
||||
<NavigationDrawerSubItem
|
||||
secondaryLabel={
|
||||
isIndexView
|
||||
? undefined
|
||||
: getNavigationMenuItemSecondaryLabel({
|
||||
objectMetadataItems,
|
||||
navigationMenuItemObjectNameSingular:
|
||||
objectNameSingular ?? '',
|
||||
})
|
||||
}
|
||||
label={label}
|
||||
Icon={() => (
|
||||
<NavigationMenuItemIcon
|
||||
navigationMenuItem={navigationMenuItem}
|
||||
{folder.navigationMenuItems.map((navigationMenuItem, index) => (
|
||||
<DraggableItem
|
||||
key={navigationMenuItem.id}
|
||||
draggableId={navigationMenuItem.id}
|
||||
index={index}
|
||||
isInsideScrollableContainer
|
||||
itemComponent={
|
||||
<NavigationDrawerSubItem
|
||||
secondaryLabel={getNavigationMenuItemSecondaryLabel({
|
||||
objectMetadataItems,
|
||||
navigationMenuItemObjectNameSingular:
|
||||
navigationMenuItem.objectNameSingular,
|
||||
})}
|
||||
label={navigationMenuItem.labelIdentifier}
|
||||
Icon={() => (
|
||||
<NavigationMenuItemIcon
|
||||
navigationMenuItem={navigationMenuItem}
|
||||
/>
|
||||
)}
|
||||
to={isDragging ? undefined : navigationMenuItem.link}
|
||||
active={index === selectedNavigationMenuItemIndex}
|
||||
subItemState={getNavigationSubItemLeftAdornment({
|
||||
index,
|
||||
arrayLength: navigationMenuItemFolderContentLength,
|
||||
selectedIndex: selectedNavigationMenuItemIndex,
|
||||
})}
|
||||
rightOptions={
|
||||
isWorkspaceFolder ? undefined : (
|
||||
<LightIconButton
|
||||
Icon={IconHeartOff}
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
deleteNavigationMenuItem(navigationMenuItem.id);
|
||||
}}
|
||||
accent="tertiary"
|
||||
/>
|
||||
)}
|
||||
to={isDragging ? undefined : computedLink}
|
||||
active={index === selectedNavigationMenuItemIndex}
|
||||
subItemState={getNavigationSubItemLeftAdornment({
|
||||
index,
|
||||
arrayLength: navigationMenuItemFolderContentLength,
|
||||
selectedIndex: selectedNavigationMenuItemIndex,
|
||||
})}
|
||||
rightOptions={
|
||||
isWorkspaceFolder ? undefined : (
|
||||
<LightIconButton
|
||||
Icon={IconHeartOff}
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
deleteNavigationMenuItem(
|
||||
navigationMenuItem.id,
|
||||
);
|
||||
}}
|
||||
accent="tertiary"
|
||||
/>
|
||||
)
|
||||
}
|
||||
isDragging={isDragging}
|
||||
triggerEvent="CLICK"
|
||||
iconColor={getEffectiveNavigationMenuItemColor(
|
||||
navigationMenuItem,
|
||||
)}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
)
|
||||
}
|
||||
isDragging={isDragging}
|
||||
triggerEvent="CLICK"
|
||||
iconColor={getEffectiveNavigationMenuItemColor(
|
||||
navigationMenuItem,
|
||||
)}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
))}
|
||||
{provided.placeholder}
|
||||
</div>
|
||||
)}
|
||||
|
||||
+53
-77
@@ -14,14 +14,10 @@ import { NavigationMenuItemDragContext } from '@/navigation-menu-item/contexts/N
|
||||
import { useDeleteNavigationMenuItem } from '@/navigation-menu-item/hooks/useDeleteNavigationMenuItem';
|
||||
import { useSortedNavigationMenuItems } from '@/navigation-menu-item/hooks/useSortedNavigationMenuItems';
|
||||
import { getEffectiveNavigationMenuItemColor } from '@/navigation-menu-item/utils/getEffectiveNavigationMenuItemColor';
|
||||
import { getNavigationMenuItemComputedLink } from '@/navigation-menu-item/utils/getNavigationMenuItemComputedLink';
|
||||
import { getNavigationMenuItemLabel } from '@/navigation-menu-item/utils/getNavigationMenuItemLabel';
|
||||
import { getNavigationMenuItemObjectNameSingular } from '@/navigation-menu-item/utils/getNavigationMenuItemObjectNameSingular';
|
||||
import { getNavigationMenuItemSecondaryLabel } from '@/navigation-menu-item/utils/getNavigationMenuItemSecondaryLabel';
|
||||
import { isLocationMatchingNavigationMenuItem } from '@/navigation-menu-item/utils/isLocationMatchingNavigationMenuItem';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
import { viewsSelector } from '@/views/states/selectors/viewsSelector';
|
||||
import { DraggableItem } from '@/ui/layout/draggable-list/components/DraggableItem';
|
||||
import { NavigationDrawerItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItem';
|
||||
|
||||
@@ -34,8 +30,7 @@ const StyledOrphanNavigationMenuItemsContainer = styled.div`
|
||||
`;
|
||||
|
||||
export const CurrentWorkspaceMemberOrphanNavigationMenuItems = () => {
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
|
||||
const views = useAtomStateValue(viewsSelector);
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsState);
|
||||
const { navigationMenuItemsSorted } = useSortedNavigationMenuItems();
|
||||
const { deleteNavigationMenuItem } = useDeleteNavigationMenuItem();
|
||||
const currentPath = useLocation().pathname;
|
||||
@@ -53,77 +48,58 @@ export const CurrentWorkspaceMemberOrphanNavigationMenuItems = () => {
|
||||
>
|
||||
{orphanNavigationMenuItems.length > 0 ? (
|
||||
<>
|
||||
{orphanNavigationMenuItems.map((navigationMenuItem, index) => {
|
||||
const label = getNavigationMenuItemLabel(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
const computedLink = getNavigationMenuItemComputedLink(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
const objectNameSingular = getNavigationMenuItemObjectNameSingular(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
|
||||
return (
|
||||
<NavigationItemDropTarget
|
||||
key={navigationMenuItem.id}
|
||||
folderId={null}
|
||||
{orphanNavigationMenuItems.map((navigationMenuItem, index) => (
|
||||
<NavigationItemDropTarget
|
||||
key={navigationMenuItem.id}
|
||||
folderId={null}
|
||||
index={index}
|
||||
sectionId={NavigationSections.FAVORITES}
|
||||
>
|
||||
<DraggableItem
|
||||
draggableId={navigationMenuItem.id}
|
||||
index={index}
|
||||
sectionId={NavigationSections.FAVORITES}
|
||||
>
|
||||
<DraggableItem
|
||||
draggableId={navigationMenuItem.id}
|
||||
index={index}
|
||||
isInsideScrollableContainer={true}
|
||||
itemComponent={
|
||||
<StyledOrphanNavigationMenuItemsContainer>
|
||||
<NavigationDrawerItem
|
||||
secondaryLabel={getNavigationMenuItemSecondaryLabel({
|
||||
objectMetadataItems,
|
||||
navigationMenuItemObjectNameSingular:
|
||||
objectNameSingular ?? '',
|
||||
})}
|
||||
label={label}
|
||||
Icon={() => (
|
||||
<NavigationMenuItemIcon
|
||||
navigationMenuItem={navigationMenuItem}
|
||||
/>
|
||||
)}
|
||||
iconColor={getEffectiveNavigationMenuItemColor(
|
||||
navigationMenuItem,
|
||||
)}
|
||||
active={isLocationMatchingNavigationMenuItem(
|
||||
currentPath,
|
||||
currentViewPath,
|
||||
navigationMenuItem.type,
|
||||
computedLink,
|
||||
)}
|
||||
to={isDragging ? undefined : computedLink}
|
||||
rightOptions={
|
||||
<LightIconButton
|
||||
Icon={IconHeartOff}
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
deleteNavigationMenuItem(navigationMenuItem.id);
|
||||
}}
|
||||
accent="tertiary"
|
||||
/>
|
||||
}
|
||||
isDragging={isDragging}
|
||||
triggerEvent="CLICK"
|
||||
/>
|
||||
</StyledOrphanNavigationMenuItemsContainer>
|
||||
}
|
||||
/>
|
||||
</NavigationItemDropTarget>
|
||||
);
|
||||
})}
|
||||
isInsideScrollableContainer={true}
|
||||
itemComponent={
|
||||
<StyledOrphanNavigationMenuItemsContainer>
|
||||
<NavigationDrawerItem
|
||||
secondaryLabel={getNavigationMenuItemSecondaryLabel({
|
||||
objectMetadataItems,
|
||||
navigationMenuItemObjectNameSingular:
|
||||
navigationMenuItem.objectNameSingular,
|
||||
})}
|
||||
label={navigationMenuItem.labelIdentifier}
|
||||
Icon={() => (
|
||||
<NavigationMenuItemIcon
|
||||
navigationMenuItem={navigationMenuItem}
|
||||
/>
|
||||
)}
|
||||
iconColor={getEffectiveNavigationMenuItemColor(
|
||||
navigationMenuItem,
|
||||
)}
|
||||
active={isLocationMatchingNavigationMenuItem(
|
||||
currentPath,
|
||||
currentViewPath,
|
||||
navigationMenuItem,
|
||||
)}
|
||||
to={isDragging ? undefined : navigationMenuItem.link}
|
||||
rightOptions={
|
||||
<LightIconButton
|
||||
Icon={IconHeartOff}
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
deleteNavigationMenuItem(navigationMenuItem.id);
|
||||
}}
|
||||
accent="tertiary"
|
||||
/>
|
||||
}
|
||||
isDragging={isDragging}
|
||||
triggerEvent="CLICK"
|
||||
/>
|
||||
</StyledOrphanNavigationMenuItemsContainer>
|
||||
}
|
||||
/>
|
||||
</NavigationItemDropTarget>
|
||||
))}
|
||||
<NavigationItemDropTarget
|
||||
folderId={null}
|
||||
index={orphanNavigationMenuItems.length}
|
||||
|
||||
+39
-63
@@ -1,25 +1,21 @@
|
||||
import { Droppable } from '@hello-pangea/dnd';
|
||||
import { IconHeartOff } from 'twenty-ui/display';
|
||||
import { LightIconButton } from 'twenty-ui/input';
|
||||
import { type NavigationMenuItem } from '~/generated-metadata/graphql';
|
||||
|
||||
import { NavigationMenuItemBackButton } from '@/navigation-menu-item/components/NavigationMenuItemBackButton';
|
||||
import { NavigationMenuItemIcon } from '@/navigation-menu-item/components/NavigationMenuItemIcon';
|
||||
import { useDeleteNavigationMenuItem } from '@/navigation-menu-item/hooks/useDeleteNavigationMenuItem';
|
||||
import { getNavigationMenuItemComputedLink } from '@/navigation-menu-item/utils/getNavigationMenuItemComputedLink';
|
||||
import { getNavigationMenuItemLabel } from '@/navigation-menu-item/utils/getNavigationMenuItemLabel';
|
||||
import { getNavigationMenuItemObjectNameSingular } from '@/navigation-menu-item/utils/getNavigationMenuItemObjectNameSingular';
|
||||
import { getNavigationMenuItemSecondaryLabel } from '@/navigation-menu-item/utils/getNavigationMenuItemSecondaryLabel';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { type ProcessedNavigationMenuItem } from '@/navigation-menu-item/utils/sortNavigationMenuItems';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
import { DraggableItem } from '@/ui/layout/draggable-list/components/DraggableItem';
|
||||
import { NavigationDrawerItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItem';
|
||||
import { viewsSelector } from '@/views/states/selectors/viewsSelector';
|
||||
|
||||
type NavigationMenuItemFolderContentProps = {
|
||||
folderId: string;
|
||||
folderName: string;
|
||||
navigationMenuItems: NavigationMenuItem[];
|
||||
navigationMenuItems: ProcessedNavigationMenuItem[];
|
||||
};
|
||||
|
||||
export const NavigationMenuItemFolderContent = ({
|
||||
@@ -27,8 +23,7 @@ export const NavigationMenuItemFolderContent = ({
|
||||
folderId,
|
||||
navigationMenuItems,
|
||||
}: NavigationMenuItemFolderContentProps) => {
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
|
||||
const views = useAtomStateValue(viewsSelector);
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsState);
|
||||
const { deleteNavigationMenuItem } = useDeleteNavigationMenuItem();
|
||||
|
||||
return (
|
||||
@@ -41,60 +36,41 @@ export const NavigationMenuItemFolderContent = ({
|
||||
// oxlint-disable-next-line react/jsx-props-no-spreading
|
||||
{...provided.droppableProps}
|
||||
>
|
||||
{navigationMenuItems.map((navigationMenuItem, index) => {
|
||||
const label = getNavigationMenuItemLabel(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
const computedLink = getNavigationMenuItemComputedLink(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
const objectNameSingular =
|
||||
getNavigationMenuItemObjectNameSingular(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
|
||||
return (
|
||||
<DraggableItem
|
||||
key={navigationMenuItem.id}
|
||||
draggableId={navigationMenuItem.id}
|
||||
index={index}
|
||||
isInsideScrollableContainer
|
||||
itemComponent={
|
||||
<NavigationDrawerItem
|
||||
secondaryLabel={getNavigationMenuItemSecondaryLabel({
|
||||
objectMetadataItems,
|
||||
navigationMenuItemObjectNameSingular:
|
||||
objectNameSingular ?? '',
|
||||
})}
|
||||
label={label}
|
||||
Icon={() => (
|
||||
<NavigationMenuItemIcon
|
||||
navigationMenuItem={navigationMenuItem}
|
||||
/>
|
||||
)}
|
||||
rightOptions={
|
||||
<LightIconButton
|
||||
Icon={IconHeartOff}
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
deleteNavigationMenuItem(navigationMenuItem.id);
|
||||
}}
|
||||
accent="tertiary"
|
||||
/>
|
||||
}
|
||||
triggerEvent="CLICK"
|
||||
to={computedLink}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
);
|
||||
})}
|
||||
{navigationMenuItems.map((navigationMenuItem, index) => (
|
||||
<DraggableItem
|
||||
key={navigationMenuItem.id}
|
||||
draggableId={navigationMenuItem.id}
|
||||
index={index}
|
||||
isInsideScrollableContainer
|
||||
itemComponent={
|
||||
<NavigationDrawerItem
|
||||
secondaryLabel={getNavigationMenuItemSecondaryLabel({
|
||||
objectMetadataItems,
|
||||
navigationMenuItemObjectNameSingular:
|
||||
navigationMenuItem.objectNameSingular,
|
||||
})}
|
||||
label={navigationMenuItem.labelIdentifier}
|
||||
Icon={() => (
|
||||
<NavigationMenuItemIcon
|
||||
navigationMenuItem={navigationMenuItem}
|
||||
/>
|
||||
)}
|
||||
rightOptions={
|
||||
<LightIconButton
|
||||
Icon={IconHeartOff}
|
||||
onClick={(e) => {
|
||||
e.stopPropagation();
|
||||
deleteNavigationMenuItem(navigationMenuItem.id);
|
||||
}}
|
||||
accent="tertiary"
|
||||
/>
|
||||
}
|
||||
triggerEvent="CLICK"
|
||||
to={navigationMenuItem.link}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
))}
|
||||
{provided.placeholder}
|
||||
</div>
|
||||
)}
|
||||
|
||||
+2
-2
@@ -1,12 +1,12 @@
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { type NavigationMenuItem } from '~/generated-metadata/graphql';
|
||||
|
||||
import { NavigationMenuItemFolderContent } from '@/navigation-menu-item/components/NavigationMenuItemFolderContent';
|
||||
import { type ProcessedNavigationMenuItem } from '@/navigation-menu-item/utils/sortNavigationMenuItems';
|
||||
|
||||
type NavigationMenuItemFolderContentDispatcherEffectProps = {
|
||||
folderName: string;
|
||||
folderId: string;
|
||||
navigationMenuItems?: NavigationMenuItem[];
|
||||
navigationMenuItems?: ProcessedNavigationMenuItem[];
|
||||
};
|
||||
|
||||
export const NavigationMenuItemFolderContentDispatcherEffect = ({
|
||||
|
||||
+31
-71
@@ -1,86 +1,68 @@
|
||||
import { isNonEmptyString } from '@sniptt/guards';
|
||||
import { NavigationMenuItemType } from 'twenty-shared/types';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { Avatar, IconLink, IconWorld, useIcons } from 'twenty-ui/display';
|
||||
import { themeCssVariables } from 'twenty-ui/theme-constants';
|
||||
import { type NavigationMenuItem } from '~/generated-metadata/graphql';
|
||||
|
||||
import { LinkIconWithLinkOverlay } from '@/navigation-menu-item/components/LinkIconWithLinkOverlay';
|
||||
import { StyledNavigationMenuItemIconContainer } from '@/navigation-menu-item/components/NavigationMenuItemIconContainer';
|
||||
import { ObjectIconWithViewOverlay } from '@/navigation-menu-item/components/ObjectIconWithViewOverlay';
|
||||
import { NavigationMenuItemType } from '@/navigation-menu-item/constants/NavigationMenuItemType';
|
||||
import { useObjectNavItemColor } from '@/navigation-menu-item/hooks/useObjectNavItemColor';
|
||||
import { getEffectiveNavigationMenuItemColor } from '@/navigation-menu-item/utils/getEffectiveNavigationMenuItemColor';
|
||||
import { getNavigationMenuItemComputedLink } from '@/navigation-menu-item/utils/getNavigationMenuItemComputedLink';
|
||||
import { getNavigationMenuItemIconStyleFromColor } from '@/navigation-menu-item/utils/getNavigationMenuItemIconStyleFromColor';
|
||||
import { getNavigationMenuItemLabel } from '@/navigation-menu-item/utils/getNavigationMenuItemLabel';
|
||||
import { getNavigationMenuItemObjectNameSingular } from '@/navigation-menu-item/utils/getNavigationMenuItemObjectNameSingular';
|
||||
import { recordIdentifierToObjectRecordIdentifier } from '@/navigation-menu-item/utils/recordIdentifierToObjectRecordIdentifier';
|
||||
import { getEffectiveNavigationMenuItemColor } from '@/navigation-menu-item/utils/getEffectiveNavigationMenuItemColor';
|
||||
import { type ProcessedNavigationMenuItem } from '@/navigation-menu-item/utils/sortNavigationMenuItems';
|
||||
import { useGetStandardObjectIcon } from '@/object-metadata/hooks/useGetStandardObjectIcon';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
import { viewsSelector } from '@/views/states/selectors/viewsSelector';
|
||||
import { ViewKey } from '@/views/types/ViewKey';
|
||||
|
||||
export const NavigationMenuItemIcon = ({
|
||||
navigationMenuItem,
|
||||
}: {
|
||||
navigationMenuItem: NavigationMenuItem;
|
||||
navigationMenuItem: ProcessedNavigationMenuItem;
|
||||
}) => {
|
||||
const { getIcon } = useIcons();
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
|
||||
const views = useAtomStateValue(viewsSelector);
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsState);
|
||||
const { Icon: StandardIcon, IconColor } = useGetStandardObjectIcon(
|
||||
navigationMenuItem.objectNameSingular ?? '',
|
||||
);
|
||||
|
||||
const objectNameSingular =
|
||||
getNavigationMenuItemObjectNameSingular(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
) ?? '';
|
||||
|
||||
const { Icon: StandardIcon, IconColor } =
|
||||
useGetStandardObjectIcon(objectNameSingular);
|
||||
|
||||
const isRecord = navigationMenuItem.type === NavigationMenuItemType.RECORD;
|
||||
|
||||
const view = isDefined(navigationMenuItem.viewId)
|
||||
? views.find((view) => view.id === navigationMenuItem.viewId)
|
||||
: undefined;
|
||||
const isRecord =
|
||||
navigationMenuItem.itemType === NavigationMenuItemType.RECORD;
|
||||
const isViewWithOverlay =
|
||||
navigationMenuItem.type === NavigationMenuItemType.VIEW &&
|
||||
isDefined(view) &&
|
||||
view.key !== ViewKey.INDEX;
|
||||
navigationMenuItem.itemType === NavigationMenuItemType.VIEW &&
|
||||
navigationMenuItem.viewKey !== ViewKey.INDEX;
|
||||
|
||||
const objectMetadataItem = objectMetadataItems.find(
|
||||
(item) => item.nameSingular === objectNameSingular,
|
||||
(item) => item.nameSingular === navigationMenuItem.objectNameSingular,
|
||||
);
|
||||
const objectNavItemColor = useObjectNavItemColor(
|
||||
navigationMenuItem.objectNameSingular ?? '',
|
||||
);
|
||||
const objectNavItemColor = useObjectNavItemColor(objectNameSingular);
|
||||
const objectIconForView =
|
||||
objectMetadataItem?.icon != null
|
||||
? getIcon(objectMetadataItem.icon)
|
||||
: StandardIcon;
|
||||
|
||||
const canShowViewOverlay =
|
||||
isViewWithOverlay && isDefined(objectIconForView) && isDefined(view?.icon);
|
||||
isViewWithOverlay &&
|
||||
isDefined(objectIconForView) &&
|
||||
isDefined(navigationMenuItem.Icon);
|
||||
|
||||
if (canShowViewOverlay) {
|
||||
return (
|
||||
<ObjectIconWithViewOverlay
|
||||
ObjectIcon={objectIconForView}
|
||||
ViewIcon={getIcon(view!.icon)}
|
||||
ViewIcon={getIcon(navigationMenuItem.Icon!)}
|
||||
objectColor={objectNavItemColor}
|
||||
/>
|
||||
);
|
||||
}
|
||||
|
||||
if (navigationMenuItem.type === NavigationMenuItemType.LINK) {
|
||||
const computedLink = getNavigationMenuItemComputedLink(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
if (navigationMenuItem.itemType === NavigationMenuItemType.LINK) {
|
||||
return (
|
||||
<LinkIconWithLinkOverlay
|
||||
link={computedLink}
|
||||
link={navigationMenuItem.link}
|
||||
LinkIcon={IconLink}
|
||||
DefaultIcon={IconWorld}
|
||||
color={getEffectiveNavigationMenuItemColor(navigationMenuItem)}
|
||||
@@ -88,17 +70,11 @@ export const NavigationMenuItemIcon = ({
|
||||
);
|
||||
}
|
||||
|
||||
const itemIcon = isRecord
|
||||
? undefined
|
||||
: objectMetadataItem?.icon
|
||||
? getIcon(objectMetadataItem.icon)
|
||||
: undefined;
|
||||
const iconToUse = StandardIcon ?? itemIcon;
|
||||
|
||||
const effectiveColor = getEffectiveNavigationMenuItemColor(
|
||||
navigationMenuItem,
|
||||
objectNavItemColor,
|
||||
);
|
||||
const iconToUse =
|
||||
StandardIcon ??
|
||||
(navigationMenuItem.Icon ? getIcon(navigationMenuItem.Icon) : undefined);
|
||||
const effectiveColor =
|
||||
getEffectiveNavigationMenuItemColor(navigationMenuItem);
|
||||
const useStyledIcon = !isRecord && isNonEmptyString(effectiveColor);
|
||||
const iconStyle = useStyledIcon
|
||||
? getNavigationMenuItemIconStyleFromColor(effectiveColor)
|
||||
@@ -110,30 +86,14 @@ export const NavigationMenuItemIcon = ({
|
||||
? IconColor
|
||||
: themeCssVariables.font.color.secondary;
|
||||
|
||||
const labelIdentifier = getNavigationMenuItemLabel(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
|
||||
const recordIdentifier =
|
||||
isRecord &&
|
||||
isDefined(navigationMenuItem.targetRecordIdentifier) &&
|
||||
isDefined(objectMetadataItem)
|
||||
? recordIdentifierToObjectRecordIdentifier({
|
||||
recordIdentifier: navigationMenuItem.targetRecordIdentifier,
|
||||
objectMetadataItem,
|
||||
})
|
||||
: null;
|
||||
|
||||
const avatar = (
|
||||
<Avatar
|
||||
size={iconStyle ? 'sm' : 'md'}
|
||||
type={recordIdentifier?.avatarType ?? 'icon'}
|
||||
type={navigationMenuItem.avatarType}
|
||||
Icon={iconToUse}
|
||||
iconColor={iconColorToUse}
|
||||
avatarUrl={recordIdentifier?.avatarUrl ?? ''}
|
||||
placeholder={labelIdentifier}
|
||||
avatarUrl={navigationMenuItem.avatarUrl}
|
||||
placeholder={navigationMenuItem.labelIdentifier}
|
||||
placeholderColorSeed={navigationMenuItem.targetRecordId ?? undefined}
|
||||
/>
|
||||
);
|
||||
|
||||
+8
-26
@@ -6,24 +6,21 @@ import {
|
||||
import { useContext } from 'react';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { ThemeContext } from 'twenty-ui/theme-constants';
|
||||
import { type NavigationMenuItem } from '~/generated-metadata/graphql';
|
||||
|
||||
import { NavigationMenuItemIcon } from '@/navigation-menu-item/components/NavigationMenuItemIcon';
|
||||
import { getNavigationMenuItemLabel } from '@/navigation-menu-item/utils/getNavigationMenuItemLabel';
|
||||
import { getNavigationMenuItemObjectNameSingular } from '@/navigation-menu-item/utils/getNavigationMenuItemObjectNameSingular';
|
||||
import { getNavigationMenuItemSecondaryLabel } from '@/navigation-menu-item/utils/getNavigationMenuItemSecondaryLabel';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { type ProcessedNavigationMenuItem } from '@/navigation-menu-item/utils/sortNavigationMenuItems';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
import { NavigationDrawerSubItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSubItem';
|
||||
import { getNavigationSubItemLeftAdornment } from '@/ui/navigation/navigation-drawer/utils/getNavigationSubItemLeftAdornment';
|
||||
import { viewsSelector } from '@/views/states/selectors/viewsSelector';
|
||||
import { ViewKey } from '@/views/types/ViewKey';
|
||||
|
||||
type WorkspaceNavigationMenuItemFolderDragCloneProps = {
|
||||
draggableProvided: DraggableProvided;
|
||||
draggableSnapshot: DraggableStateSnapshot;
|
||||
rubric: DraggableRubric;
|
||||
navigationMenuItems: NavigationMenuItem[];
|
||||
navigationMenuItems: ProcessedNavigationMenuItem[];
|
||||
navigationMenuItemFolderContentLength: number;
|
||||
selectedNavigationMenuItemIndex: number;
|
||||
};
|
||||
@@ -37,29 +34,13 @@ export const WorkspaceNavigationMenuItemFolderDragClone = ({
|
||||
selectedNavigationMenuItemIndex,
|
||||
}: WorkspaceNavigationMenuItemFolderDragCloneProps) => {
|
||||
const { theme } = useContext(ThemeContext);
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
|
||||
const views = useAtomStateValue(viewsSelector);
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsState);
|
||||
const navigationMenuItem = navigationMenuItems[rubric.source.index];
|
||||
|
||||
if (!isDefined(navigationMenuItem)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const label = getNavigationMenuItemLabel(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
const objectNameSingular = getNavigationMenuItemObjectNameSingular(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
const view = isDefined(navigationMenuItem.viewId)
|
||||
? views.find((view) => view.id === navigationMenuItem.viewId)
|
||||
: undefined;
|
||||
const isIndexView = view?.key === ViewKey.INDEX;
|
||||
|
||||
return (
|
||||
<div
|
||||
ref={draggableProvided.innerRef}
|
||||
@@ -76,14 +57,15 @@ export const WorkspaceNavigationMenuItemFolderDragClone = ({
|
||||
>
|
||||
<NavigationDrawerSubItem
|
||||
secondaryLabel={
|
||||
isIndexView
|
||||
navigationMenuItem.viewKey === ViewKey.INDEX
|
||||
? undefined
|
||||
: getNavigationMenuItemSecondaryLabel({
|
||||
objectMetadataItems,
|
||||
navigationMenuItemObjectNameSingular: objectNameSingular ?? '',
|
||||
navigationMenuItemObjectNameSingular:
|
||||
navigationMenuItem.objectNameSingular,
|
||||
})
|
||||
}
|
||||
label={label}
|
||||
label={navigationMenuItem.labelIdentifier}
|
||||
Icon={() => (
|
||||
<NavigationMenuItemIcon navigationMenuItem={navigationMenuItem} />
|
||||
)}
|
||||
|
||||
+17
-39
@@ -1,16 +1,13 @@
|
||||
import { NavigationMenuItemType } from 'twenty-shared/types';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { type NavigationMenuItem } from '~/generated-metadata/graphql';
|
||||
|
||||
import { NavigationMenuItemIcon } from '@/navigation-menu-item/components/NavigationMenuItemIcon';
|
||||
import { NavigationMenuItemType } from '@/navigation-menu-item/constants/NavigationMenuItemType';
|
||||
import { type NavigationMenuItemClickParams } from '@/navigation-menu-item/hooks/useWorkspaceSectionItems';
|
||||
import { isNavigationMenuInEditModeState } from '@/navigation-menu-item/states/isNavigationMenuInEditModeState';
|
||||
import { getNavigationMenuItemComputedLink } from '@/navigation-menu-item/utils/getNavigationMenuItemComputedLink';
|
||||
import { getNavigationMenuItemLabel } from '@/navigation-menu-item/utils/getNavigationMenuItemLabel';
|
||||
import { getNavigationMenuItemObjectNameSingular } from '@/navigation-menu-item/utils/getNavigationMenuItemObjectNameSingular';
|
||||
import { getNavigationMenuItemSecondaryLabel } from '@/navigation-menu-item/utils/getNavigationMenuItemSecondaryLabel';
|
||||
import { getObjectMetadataForNavigationMenuItem } from '@/navigation-menu-item/utils/getObjectMetadataForNavigationMenuItem';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { type ProcessedNavigationMenuItem } from '@/navigation-menu-item/utils/sortNavigationMenuItems';
|
||||
import { objectMetadataItemsState } from '@/object-metadata/states/objectMetadataItemsState';
|
||||
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';
|
||||
@@ -18,7 +15,7 @@ import { viewsSelector } from '@/views/states/selectors/viewsSelector';
|
||||
import { ViewKey } from '@/views/types/ViewKey';
|
||||
|
||||
type WorkspaceNavigationMenuItemFolderSubItemProps = {
|
||||
navigationMenuItem: NavigationMenuItem;
|
||||
navigationMenuItem: ProcessedNavigationMenuItem;
|
||||
index: number;
|
||||
arrayLength: number;
|
||||
selectedNavigationMenuItemIndex: number;
|
||||
@@ -39,24 +36,21 @@ export const WorkspaceNavigationMenuItemFolderSubItem = ({
|
||||
const isNavigationMenuInEditMode = useAtomStateValue(
|
||||
isNavigationMenuInEditModeState,
|
||||
);
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsState);
|
||||
const views = useAtomStateValue(viewsSelector);
|
||||
|
||||
const objectMetadataItem =
|
||||
navigationMenuItem.type === NavigationMenuItemType.OBJECT ||
|
||||
navigationMenuItem.type === NavigationMenuItemType.VIEW ||
|
||||
navigationMenuItem.type === NavigationMenuItemType.RECORD
|
||||
navigationMenuItem.itemType === NavigationMenuItemType.VIEW ||
|
||||
navigationMenuItem.itemType === NavigationMenuItemType.RECORD
|
||||
? getObjectMetadataForNavigationMenuItem(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
)
|
||||
: null;
|
||||
|
||||
const isEditableInEditMode =
|
||||
isNavigationMenuInEditMode &&
|
||||
isDefined(onNavigationMenuItemClick) &&
|
||||
(navigationMenuItem.type === NavigationMenuItemType.LINK ||
|
||||
(navigationMenuItem.itemType === NavigationMenuItemType.LINK ||
|
||||
isDefined(objectMetadataItem));
|
||||
|
||||
const handleEditModeClick =
|
||||
@@ -68,42 +62,26 @@ export const WorkspaceNavigationMenuItemFolderSubItem = ({
|
||||
})
|
||||
: undefined;
|
||||
|
||||
const label = getNavigationMenuItemLabel(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
const computedLink = getNavigationMenuItemComputedLink(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
const objectNameSingular = getNavigationMenuItemObjectNameSingular(
|
||||
navigationMenuItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
|
||||
const view = isDefined(navigationMenuItem.viewId)
|
||||
? views.find((view) => view.id === navigationMenuItem.viewId)
|
||||
: undefined;
|
||||
const isIndexView = view?.key === ViewKey.INDEX;
|
||||
|
||||
return (
|
||||
<NavigationDrawerSubItem
|
||||
secondaryLabel={
|
||||
isIndexView
|
||||
navigationMenuItem.viewKey === ViewKey.INDEX
|
||||
? undefined
|
||||
: getNavigationMenuItemSecondaryLabel({
|
||||
objectMetadataItems,
|
||||
navigationMenuItemObjectNameSingular: objectNameSingular ?? '',
|
||||
navigationMenuItemObjectNameSingular:
|
||||
navigationMenuItem.objectNameSingular,
|
||||
})
|
||||
}
|
||||
label={label}
|
||||
label={navigationMenuItem.labelIdentifier}
|
||||
Icon={() => (
|
||||
<NavigationMenuItemIcon navigationMenuItem={navigationMenuItem} />
|
||||
)}
|
||||
to={isContextDragging || handleEditModeClick ? undefined : computedLink}
|
||||
to={
|
||||
isContextDragging || handleEditModeClick
|
||||
? undefined
|
||||
: navigationMenuItem.link
|
||||
}
|
||||
onClick={handleEditModeClick}
|
||||
active={index === selectedNavigationMenuItemIndex}
|
||||
isSelectedInEditMode={
|
||||
|
||||
+19
-43
@@ -13,7 +13,7 @@ import { LightIconButton } from 'twenty-ui/input';
|
||||
import { themeCssVariables } from 'twenty-ui/theme-constants';
|
||||
|
||||
import { FOLDER_ICON_DEFAULT } from '@/navigation-menu-item/constants/FolderIconDefault';
|
||||
import { NavigationMenuItemType, SidePanelPages } from 'twenty-shared/types';
|
||||
import { NavigationMenuItemType } from '@/navigation-menu-item/constants/NavigationMenuItemType';
|
||||
import { useOpenNavigationMenuItemInSidePanel } from '@/navigation-menu-item/hooks/useOpenNavigationMenuItemInSidePanel';
|
||||
import { useSortedNavigationMenuItems } from '@/navigation-menu-item/hooks/useSortedNavigationMenuItems';
|
||||
import {
|
||||
@@ -25,19 +25,16 @@ import { navigationMenuItemsDraftState } from '@/navigation-menu-item/states/nav
|
||||
import { openNavigationMenuItemFolderIdsState } from '@/navigation-menu-item/states/openNavigationMenuItemFolderIdsState';
|
||||
import { selectedNavigationMenuItemInEditModeState } from '@/navigation-menu-item/states/selectedNavigationMenuItemInEditModeState';
|
||||
import { filterWorkspaceNavigationMenuItems } from '@/navigation-menu-item/utils/filterWorkspaceNavigationMenuItems';
|
||||
import { getNavigationMenuItemComputedLink } from '@/navigation-menu-item/utils/getNavigationMenuItemComputedLink';
|
||||
import { getNavigationMenuItemLabel } from '@/navigation-menu-item/utils/getNavigationMenuItemLabel';
|
||||
import { preloadWorkspaceDndKit } from '@/navigation/preloadWorkspaceDndKit';
|
||||
import { NavigationDrawerSectionForWorkspaceItems } from '@/object-metadata/components/NavigationDrawerSectionForWorkspaceItems';
|
||||
import { objectMetadataItemsSelector } from '@/object-metadata/states/objectMetadataItemsSelector';
|
||||
import { type ObjectMetadataItem } from '@/object-metadata/types/ObjectMetadataItem';
|
||||
import { navigationMenuItemsSelector } from '@/navigation-menu-item/states/navigationMenuItemsSelector';
|
||||
import { navigationMenuItemsState } from '@/navigation-menu-item/states/navigationMenuItemsState';
|
||||
import { useNavigateSidePanel } from '@/side-panel/hooks/useNavigateSidePanel';
|
||||
import { useAtomState } from '@/ui/utilities/state/jotai/hooks/useAtomState';
|
||||
import { useAtomStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomStateValue';
|
||||
import { useSetAtomState } from '@/ui/utilities/state/jotai/hooks/useSetAtomState';
|
||||
import { viewsSelector } from '@/views/states/selectors/viewsSelector';
|
||||
import { useStore } from 'jotai';
|
||||
import { SidePanelPages } from 'twenty-shared/types';
|
||||
|
||||
const StyledRightIconsContainer = styled.div`
|
||||
align-items: center;
|
||||
@@ -48,13 +45,9 @@ const StyledRightIconsContainer = styled.div`
|
||||
export const WorkspaceNavigationMenuItems = () => {
|
||||
const items = useWorkspaceSectionItems();
|
||||
const { workspaceNavigationMenuItemsSorted } = useSortedNavigationMenuItems();
|
||||
const objectMetadataItems = useAtomStateValue(objectMetadataItemsSelector);
|
||||
const views = useAtomStateValue(viewsSelector);
|
||||
const store = useStore();
|
||||
const enterEditMode = () => {
|
||||
const currentNavigationMenuItems = store.get(
|
||||
navigationMenuItemsSelector.atom,
|
||||
);
|
||||
const currentNavigationMenuItems = store.get(navigationMenuItemsState.atom);
|
||||
const workspaceNavigationMenuItems = filterWorkspaceNavigationMenuItems(
|
||||
currentNavigationMenuItems,
|
||||
);
|
||||
@@ -93,27 +86,16 @@ export const WorkspaceNavigationMenuItems = () => {
|
||||
);
|
||||
openNavigationMenuItemInSidePanel({
|
||||
pageTitle: t`Edit folder`,
|
||||
pageIcon: getIcon(item.icon ?? FOLDER_ICON_DEFAULT),
|
||||
pageIcon: getIcon(item.icon ?? item.Icon ?? FOLDER_ICON_DEFAULT),
|
||||
});
|
||||
const firstChild = workspaceNavigationMenuItemsSorted.find((navItem) => {
|
||||
if (navItem.folderId !== folderId) return false;
|
||||
if (navItem.type === NavigationMenuItemType.LINK) return false;
|
||||
const link = getNavigationMenuItemComputedLink(
|
||||
navItem,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
return isNonEmptyString(link);
|
||||
});
|
||||
if (firstChild) {
|
||||
const link = getNavigationMenuItemComputedLink(
|
||||
firstChild,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
if (isNonEmptyString(link)) {
|
||||
navigate(link);
|
||||
}
|
||||
const firstChild = workspaceNavigationMenuItemsSorted.find(
|
||||
(navItem) =>
|
||||
navItem.folderId === folderId &&
|
||||
navItem.itemType !== NavigationMenuItemType.LINK &&
|
||||
isNonEmptyString(navItem.link),
|
||||
);
|
||||
if (firstChild?.link) {
|
||||
navigate(firstChild.link);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -122,21 +104,15 @@ export const WorkspaceNavigationMenuItems = () => {
|
||||
objectMetadataItem: ObjectMetadataItem | null | undefined,
|
||||
) => {
|
||||
if (objectMetadataItem) {
|
||||
const label =
|
||||
item.type === NavigationMenuItemType.VIEW ||
|
||||
item.type === NavigationMenuItemType.OBJECT
|
||||
? getNavigationMenuItemLabel(item, objectMetadataItems, views)
|
||||
: objectMetadataItem.labelSingular;
|
||||
openNavigationMenuItemInSidePanel({
|
||||
pageTitle: label,
|
||||
pageTitle:
|
||||
item.itemType === NavigationMenuItemType.VIEW
|
||||
? item.labelIdentifier
|
||||
: objectMetadataItem.labelSingular,
|
||||
pageIcon: getIcon(objectMetadataItem.icon),
|
||||
});
|
||||
}
|
||||
const link = getNavigationMenuItemComputedLink(
|
||||
item,
|
||||
objectMetadataItems,
|
||||
views,
|
||||
);
|
||||
const link = 'link' in item ? item.link : undefined;
|
||||
if (isNonEmptyString(link)) {
|
||||
navigate(link);
|
||||
}
|
||||
@@ -148,7 +124,7 @@ export const WorkspaceNavigationMenuItems = () => {
|
||||
const { item, objectMetadataItem } = params;
|
||||
setSelectedNavigationMenuItemInEditMode(item.id);
|
||||
|
||||
switch (item.type) {
|
||||
switch (item.itemType) {
|
||||
case NavigationMenuItemType.FOLDER:
|
||||
openFolderAndNavigateToFirstChild(item.id, item);
|
||||
break;
|
||||
|
||||
+2
-2
@@ -36,8 +36,8 @@ import { SortableDropTargetRefContext } from '@/navigation-menu-item/contexts/So
|
||||
import { type NavigationMenuItemClickParams } from '@/navigation-menu-item/hooks/useWorkspaceSectionItems';
|
||||
import { isNavigationMenuInEditModeState } from '@/navigation-menu-item/states/isNavigationMenuInEditModeState';
|
||||
import { getDndKitDropTargetId } from '@/navigation-menu-item/utils/getDndKitDropTargetId';
|
||||
import { type ProcessedNavigationMenuItem } from '@/navigation-menu-item/utils/sortNavigationMenuItems';
|
||||
import { NavigationDrawerItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItem';
|
||||
import { type NavigationMenuItem } from '~/generated-metadata/graphql';
|
||||
import { NavigationDrawerItemsCollapsableContainer } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerItemsCollapsableContainer';
|
||||
import { NavigationDrawerSubItem } from '@/ui/navigation/navigation-drawer/components/NavigationDrawerSubItem';
|
||||
import { getNavigationSubItemLeftAdornment } from '@/ui/navigation/navigation-drawer/utils/getNavigationSubItemLeftAdornment';
|
||||
@@ -76,7 +76,7 @@ type WorkspaceNavigationMenuItemsFolderProps = {
|
||||
folderName: string;
|
||||
folderIconKey?: string | null;
|
||||
folderColor?: string | null;
|
||||
navigationMenuItems: NavigationMenuItem[];
|
||||
navigationMenuItems: ProcessedNavigationMenuItem[];
|
||||
isGroup: boolean;
|
||||
isSelectedInEditMode?: boolean;
|
||||
onEditModeClick?: () => void;
|
||||
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
export enum NavigationMenuItemType {
|
||||
FOLDER = 'folder',
|
||||
LINK = 'link',
|
||||
OBJECT = 'object',
|
||||
RECORD = 'record',
|
||||
VIEW = 'view',
|
||||
}
|
||||
-1
@@ -3,7 +3,6 @@ import { gql } from '@apollo/client';
|
||||
export const NAVIGATION_MENU_ITEM_FRAGMENT = gql`
|
||||
fragment NavigationMenuItemFields on NavigationMenuItem {
|
||||
id
|
||||
type
|
||||
userWorkspaceId
|
||||
targetRecordId
|
||||
targetObjectMetadataId
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user