From 994180c72eacc16fa9f9cb3d336edd23e190a521 Mon Sep 17 00:00:00 2001 From: Etienne <45695613+etiennejouan@users.noreply.github.com> Date: Mon, 30 Mar 2026 11:30:55 +0200 Subject: [PATCH] Fix - Not shared message on record index (#19103) quality-feedbacks : https://discord.com/channels/1130383047699738754/1486711185436053514/1486711185436053514 Screenshot 2026-03-30 at 09 42 48 Screenshot 2026-03-30 at 09 42 34 --- .../placeholders/background/not_shared_bg.png | Bin 0 -> 7190 bytes .../dark-background/not_shared_bg.png | Bin 0 -> 4618 bytes .../dark-moving-image/not_shared.png | Bin 0 -> 13591 bytes .../placeholders/moving-image/not_shared.png | Bin 0 -> 24293 bytes .../components/RecordIndexContainer.tsx | 52 +++++++---- .../components/RecordIndexContainerGater.tsx | 20 ++-- .../RecordIndexEmptyStateNotShared.tsx | 45 +++++++++ .../useHasCurrentViewNonReadableFields.ts | 86 ++++++++++++++++++ .../utils/getNonReadableInfoForViewField.ts | 83 +++++++++++++++++ .../utils/getNonReadableViewFieldSubTitle.ts | 16 ++++ .../src/modules/views/components/ViewBar.tsx | 2 +- .../constants/Background.ts | 1 + .../constants/DarkBackground.ts | 1 + .../constants/DarkMovingImage.ts | 1 + .../constants/MovingImage.ts | 1 + 15 files changed, 278 insertions(+), 30 deletions(-) create mode 100644 packages/twenty-front/public/images/placeholders/background/not_shared_bg.png create mode 100644 packages/twenty-front/public/images/placeholders/dark-background/not_shared_bg.png create mode 100644 packages/twenty-front/public/images/placeholders/dark-moving-image/not_shared.png create mode 100644 packages/twenty-front/public/images/placeholders/moving-image/not_shared.png create mode 100644 packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexEmptyStateNotShared.tsx create mode 100644 packages/twenty-front/src/modules/object-record/record-index/hooks/useHasCurrentViewNonReadableFields.ts create mode 100644 packages/twenty-front/src/modules/object-record/record-index/utils/getNonReadableInfoForViewField.ts create mode 100644 packages/twenty-front/src/modules/object-record/record-index/utils/getNonReadableViewFieldSubTitle.ts diff --git a/packages/twenty-front/public/images/placeholders/background/not_shared_bg.png b/packages/twenty-front/public/images/placeholders/background/not_shared_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..6c3d400c7e0c3a4b64e6c2b289bab81814c3edfd GIT binary patch literal 7190 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 literal 0 HcmV?d00001 diff --git a/packages/twenty-front/public/images/placeholders/dark-background/not_shared_bg.png b/packages/twenty-front/public/images/placeholders/dark-background/not_shared_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..de52d1a895fa740c841cb8f618eb7acfa44c080e GIT binary patch literal 4618 zcmXX~c{mi@_a6+#K4k1KB1`sN7&5l8Z%IN7Sw@j{VyG~7gK3B?4I_ILp|WL53PXrc zQ+CE0iL%ab-uL_a#vxA4aPE59>Lq1N82FDLA`bx_d8(<*XV{#4ZM@8dN-j-!VAU zcvY;MvzAax55L2w$<=8aTF{%i^_d3%Q|4sLPda&h_VBrB%!YeK(i3UEgYRwudJEWH z(IkWRaSav)`p2Cuz(2{+qsV%PRg%1ylh!7lzhW$KK-+sStt1J;i+3@r4wKx2TonLC zKloAAumo{qKlr%i@5$r)MzWdI&@i*NS9B%aHC3;-Y{%v#Nub>chR|6_IM;<;PnHZl zCJp6U{!PaOnNtrUHKL-f#cpClk?qknz@Nc+# zm7hcK6-GnHe69nM*t4Rx^n%bYT0V^e8PI)a4TCCH0L(6>RNbQ4}>#<9s6*nbYF63o#M1=DeO^?MF6Rl3uywG##gA7 zutZTVnRrppk277X4;+ea^(*WENpn5ai6u5Hn$VlZFE4K7|5@rebm~WR=<)_Bd{JYW zietKlfi?mqetWr(KS2GepImua#gYNH#bX6cgSJwv=Kbgv#f`+0ts;~>cetKyLoz#> z?Ff^K1@M~5l*;ZtOP*^P8|!{so3#_Ejc66Z#P3UXEgiPWuteKmHEnZAhv2=yX4}9u zheE4jQ9&k*=sf;_A#O6C0Wbc`!y*&+Q3d=v_3vd*Gk+(|6$wa%z8aazfZ?<_i8hJw z0B~0b3#Xyx&2o%Ex=Z&_@sy5BA{ClHq!J8Ay?o1R?|=#XDUsXA*YBhfUNd06)Fp2s z5-IMWk+HsPP8>TOY-2#&56C9@3c04JX7ZhJ3$G;)g7L#|y;D(0Ilqwje#YhPKi{pNn&HX>UAC`M7ZNJ63j;KHDmD}-FWL;%TsUp@c4ODG>DCn}(|4M)g1KdjogRh^ z08o&K$IU(}SH0;Od#b=ls0CAXEfGE@_@fp2r0Kx)Ch2(9f=3;OW7Hh>+jU~31Pr|&kN#G2jPby|3dUaUhxgUaKGvL$vrz7UZ zzjZ;nV=QU6KXtReJ55|ROjH6qcKl#2u3Hqpm3%j9RqMPFzY#ftThEa_rw%5pr+hD$ zarik46!jT>_83S~CEHv`ocai^l|x?3uv%wweh2OOA$j^m#<=b&amM>z&7D!6Db9C3 zNep>6>87>Y@14hG$4xdE4Tc$xhWARfwLEs+m|$xV(gL%TX0kFjSz>HOWR-E*(@Dlo-0!HuI=rq!w}DT=dH37_s!>P2_6jBH(pU_Cvv5=?uld@e(Me+ z!7KAaFIC){ePbPALK#&yurV#@U1m86fUg7ZPt+&ajy|tM>V@WXXAO{#`9+DLjWR zVRw*%g^x$#BVu|y4r@M#$q6fPkttAt?`=L0<(za}y4};;O$zg`_YwGG8B~?e*UXmp z+jeKq7Hx)AzYuxx{t~t`e8^gb_&t_-HMVzIR?^CR_>bN{JvJYx;$|WkU#AsTGhs+Z zMdiHx&foa$vf#8`f3-Npp`PWIq4K*vZ1rUH*)t!YPn_jrF5sC4`k+G2+)^sS2ZZhR=r3m&qq6qH7Prk#V__> zgZSUiVfyx_qTwR1Mx?kR>V9*L+=tTB2l>0T%%^(VOQ~~~A2ys8Ot5J?)za1%rhi^j zc3oH{=1N674<;5+$tjBC}@oJ1)jx7&#?&M8B z*oH){2uVmrG+FeN#jKABkA0}GMhx<5P;cR>A(K6z$&90gId_UHQ6kPf|~yR9QWB z4k`z!Y5fTdj`F+Q7-CV+4r`j6i@br-UZ<0Ye@ zbi3lqhIS2jpOWL~cVwbe+w*YQvG^K|LdA=>3jBT9+#vj6SB=woBSZ+_sz#E1g#ck{ zrqiO!b;-Q1^2)5n9!bMjUxn9m1F+pi3AK;QKb~5Y zT75;w1sRkxqx|jZGo9VC=H_qgr}_)DIuoYvwIdU=Vl;;IeJI+@mWf+|@-tOQ+F2Ls zK0L)_ZJCAd`2!7Snr%D9{RJdlNMdUxo+hJ8HJZY5i}p^dSki({P0$qXR;fw$QyO#mXERN{rsX@qT>eLfwo%k~yY`}n~)UeQJ z`;B@y;*8!0ZlTp;KoReGPp)Iwu4@P21!8&s#@xFYSqr0qn|0XuXa^4lIaXa{= z->O)7~WxXu9?3JEWa7&+y8ua zv_Kl!tN_UM8fP!{E+mdM0-Tb6Cr{T+EoF^@H5ypp{z1kH*qKk!-!H)06KMn_meNK@ z7hq++bk*z$@D%MnKUIrSj}r-6orZY1OaBF+FaBrZq{;5)iF(ebu7~l%$ekn5&Nbr4^CNXFzGEI8%&ZWjksdV>U!@ z&$6=n$vQ73kLbf3sJ8tvEr5bKSV(d4VpdSwHY7qR|DTjOlA-h;zW9dWaEFf>5+pQT zo(kIHp|O@znWtsS{*M*<>wOy|makYbgb}051v}$@i~m0`HAT`2cdS4u5#;+H+MTy=rm!{`heSpG z(Hf>>J8Efz8G!;{B2Ta5|I`HoEPcn0n&>f1xrndvg=jC>@w%UEh7O=|Ae@Hvq>mqW zcZMF3@s!r5)X^I2a{x)+Wg3r&ldL#mJjX9l&?9CzmCcbbPA5y~V7|3t%Hn!NLHy+A zF-AO+C{r)X?)|GQM1E@l$d~v@!*@VYaErkJ7(>D%?$QEL)7J@#ALh>NXm<=LTHIdr zcR{b+gei4|BPzgN_Z?wj5XE|9^s#JoN{I01c(5kGS1rn&oS1IJui=(8`>d#QXS@cZ z4M@sPA7wlCmwtOGEt2K;#4zpQO`C~i0O`{2Eth_2 zv2)z`tBw?7^7H6hok;N8E+HqB)ja)+HV+SRb0HE=$OPrdnLG%cb zjyfYZ*ZG{hT1ZdbeYXDwHI{Lq343ZBh7eQQ^7BXb)VyE3cpx$B03?ptlFJ)nt#uon2<_VwX7j2(f)$Nf!K1PXpF_8jvqf#&bBFYtE9LR?Sx%PM; z^hFi*CZv#|o_+pld)Jjl@HZVd!H4TPzeYNI4kaMg+!)(;^!|Da4zfEfH-1jUvcq>@ z*@Wo|hng_g!ptH%4H*^qZLTB}n?eFE{F*{C;pMRlCJd0=B8 za`gI>DJCp=XwP&IXN3=ja%%+ym)4_lbz0CjOeo*hzwj@LL~sQKCBd>_o*y? zN@{IsGVfIE#YT~b;G(ymIOSeTV)-7pap(&{xN$kDUn{A|DB6dPHl8}!kjsRm2_2c1 zuUpMs*-O~3s`t~u__1*L;)up;1}*zGM*=L#Qvh-P zPvv-7-ib~exu;+=J|J4a^=P%CM3B2+J_yY}5a#qHo>&`i6)sIEZNNeDA~=s@c%jpI zxoj_Fs^s|7MRObOKLd$V)*GY7FFw^l>CUUambV#hWH)CkF$CsCASr~` z&#lL!6%JvFw0nA)1WFhXGd4{P3u5dZ)H literal 0 HcmV?d00001 diff --git a/packages/twenty-front/public/images/placeholders/dark-moving-image/not_shared.png b/packages/twenty-front/public/images/placeholders/dark-moving-image/not_shared.png new file mode 100644 index 0000000000000000000000000000000000000000..ac90c966e1fd6eb7d084a4186af7458f5f558e14 GIT binary patch literal 13591 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 vrAdhKfFw61!gw{6oQ(TvSf|8aq#~D=)PX1 literal 0 HcmV?d00001 diff --git a/packages/twenty-front/public/images/placeholders/moving-image/not_shared.png b/packages/twenty-front/public/images/placeholders/moving-image/not_shared.png new file mode 100644 index 0000000000000000000000000000000000000000..26607bb78a28682bd2407752cf365f41197d0994 GIT binary patch literal 24293 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 R0aECZ6l7GTYbDJ>{|Br^D|!F` literal 0 HcmV?d00001 diff --git a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexContainer.tsx b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexContainer.tsx index 23700f0f79f..d69c3733741 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexContainer.tsx +++ b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexContainer.tsx @@ -12,7 +12,9 @@ import { useRecordIndexContextOrThrow } from '@/object-record/record-index/conte import { SpreadsheetImportProvider } from '@/spreadsheet-import/provider/components/SpreadsheetImportProvider'; import { RecordIndexCalendarContainer } from '@/object-record/record-index/components/RecordIndexCalendarContainer'; +import { RecordIndexEmptyStateNotShared } from '@/object-record/record-index/components/RecordIndexEmptyStateNotShared'; import { RecordIndexFiltersToContextStoreEffect } from '@/object-record/record-index/components/RecordIndexFiltersToContextStoreEffect'; +import { useHasCurrentViewNonReadableFields } from '@/object-record/record-index/hooks/useHasCurrentViewNonReadableFields'; import { ViewBar } from '@/views/components/ViewBar'; import { ViewType } from '@/views/types/ViewType'; import { themeCssVariables } from 'twenty-ui/theme-constants'; @@ -43,12 +45,16 @@ export const RecordIndexContainer = () => { objectNameSingular, } = useRecordIndexContextOrThrow(); + const { hasCurrentViewNonReadableFields, nonReadableViewFieldInfo } = + useHasCurrentViewNonReadableFields(objectMetadataItem); + return ( <> { viewBarId={recordIndexId} /> - - {recordIndexViewType === ViewType.TABLE && ( + {hasCurrentViewNonReadableFields ? ( + + ) : ( <> - + + {recordIndexViewType === ViewType.TABLE && ( + + )} + {recordIndexViewType === ViewType.KANBAN && ( + + + + )} + {recordIndexViewType === ViewType.CALENDAR && ( + + + + )} )} - {recordIndexViewType === ViewType.KANBAN && ( - - - - )} - {recordIndexViewType === ViewType.CALENDAR && ( - - - - )} ); diff --git a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexContainerGater.tsx b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexContainerGater.tsx index 05876aab0b2..9c6956ab67c 100644 --- a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexContainerGater.tsx +++ b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexContainerGater.tsx @@ -1,7 +1,7 @@ import { RecordIndexContextProvider } from '@/object-record/record-index/contexts/RecordIndexContext'; -import { CommandMenuComponentInstanceContext } from '@/command-menu/states/contexts/CommandMenuComponentInstanceContext'; import { getCommandMenuIdFromRecordIndexId } from '@/command-menu-item/utils/getCommandMenuIdFromRecordIndexId'; +import { CommandMenuComponentInstanceContext } from '@/command-menu/states/contexts/CommandMenuComponentInstanceContext'; import { getObjectPermissionsForObject } from '@/object-metadata/utils/getObjectPermissionsForObject'; import { MainContainerLayoutWithSidePanel } from '@/object-record/components/MainContainerLayoutWithSidePanel'; import { RecordComponentInstanceContextsWrapper } from '@/object-record/components/RecordComponentInstanceContextsWrapper'; @@ -9,6 +9,7 @@ import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions import { lastShowPageRecordIdState } from '@/object-record/record-field/ui/states/lastShowPageRecordId'; import { RecordIndexContainer } from '@/object-record/record-index/components/RecordIndexContainer'; import { RecordIndexContainerContextStoreNumberOfSelectedRecordsEffect } from '@/object-record/record-index/components/RecordIndexContainerContextStoreNumberOfSelectedRecordsEffect'; +import { RecordIndexEmptyStateNotShared } from '@/object-record/record-index/components/RecordIndexEmptyStateNotShared'; import { RecordIndexLoadBaseOnContextStoreEffect } from '@/object-record/record-index/components/RecordIndexLoadBaseOnContextStoreEffect'; import { RecordIndexPageHeader } from '@/object-record/record-index/components/RecordIndexPageHeader'; import { useHandleIndexIdentifierClick } from '@/object-record/record-index/hooks/useHandleIndexIdentifierClick'; @@ -18,9 +19,8 @@ import { RECORD_INDEX_DRAG_SELECT_BOUNDARY_CLASS } from '@/ui/utilities/drag-sel import { PageTitle } from '@/ui/utilities/page-title/components/PageTitle'; import { ViewComponentInstanceContext } from '@/views/states/contexts/ViewComponentInstanceContext'; import { styled } from '@linaria/react'; -import { useCallback } from 'react'; -import { NotFound } from '~/pages/not-found/NotFound'; import { useStore } from 'jotai'; +import { useCallback } from 'react'; const StyledIndexContainer = styled.div` display: flex; @@ -60,10 +60,6 @@ export const RecordIndexContainerGater = () => { recordIndexId, ); - if (!hasObjectReadPermissions) { - return ; - } - return ( <> { - - + {hasObjectReadPermissions ? ( + <> + + + + ) : ( + + )} diff --git a/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexEmptyStateNotShared.tsx b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexEmptyStateNotShared.tsx new file mode 100644 index 00000000000..3f03e07c2f3 --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/record-index/components/RecordIndexEmptyStateNotShared.tsx @@ -0,0 +1,45 @@ +import { type NonReadableViewFieldInfo } from '@/object-record/record-index/hooks/useHasCurrentViewNonReadableFields'; +import { getNonReadableViewFieldSubTitle } from '@/object-record/record-index/utils/getNonReadableViewFieldSubTitle'; +import { styled } from '@linaria/react'; +import { t } from '@lingui/core/macro'; +import { isDefined } from 'twenty-shared/utils'; +import { + AnimatedPlaceholder, + AnimatedPlaceholderEmptyContainer, + AnimatedPlaceholderEmptySubTitle, + AnimatedPlaceholderEmptyTextContainer, + AnimatedPlaceholderEmptyTitle, +} from 'twenty-ui/layout'; + +const StyledEmptyPlaceholderOuterContainer = styled.div` + height: 100%; + width: 100%; +`; + +type RecordIndexEmptyStateNotSharedProps = { + nonReadableViewFieldInfo?: NonReadableViewFieldInfo; +}; + +export const RecordIndexEmptyStateNotShared = ({ + nonReadableViewFieldInfo, +}: RecordIndexEmptyStateNotSharedProps) => { + return ( + + + + + + {isDefined(nonReadableViewFieldInfo) + ? t`View not shared` + : t`Object not shared`} + + + {isDefined(nonReadableViewFieldInfo) + ? getNonReadableViewFieldSubTitle(nonReadableViewFieldInfo) + : t`You don't have access to this object.`} + + + + + ); +}; diff --git a/packages/twenty-front/src/modules/object-record/record-index/hooks/useHasCurrentViewNonReadableFields.ts b/packages/twenty-front/src/modules/object-record/record-index/hooks/useHasCurrentViewNonReadableFields.ts new file mode 100644 index 00000000000..11dd3ae43db --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/record-index/hooks/useHasCurrentViewNonReadableFields.ts @@ -0,0 +1,86 @@ +import { contextStoreCurrentViewIdComponentState } from '@/context-store/states/contextStoreCurrentViewIdComponentState'; +import { useObjectMetadataItems } from '@/object-metadata/hooks/useObjectMetadataItems'; +import { type EnrichedObjectMetadataItem } from '@/object-metadata/types/EnrichedObjectMetadataItem'; +import { useObjectPermissions } from '@/object-record/hooks/useObjectPermissions'; +import { getNonReadableFieldInfoForViewField } from '@/object-record/record-index/utils/getNonReadableInfoForViewField'; +import { useAtomComponentStateValue } from '@/ui/utilities/state/jotai/hooks/useAtomComponentStateValue'; +import { useAtomFamilySelectorValue } from '@/ui/utilities/state/jotai/hooks/useAtomFamilySelectorValue'; +import { viewFromViewIdFamilySelector } from '@/views/states/selectors/viewFromViewIdFamilySelector'; +import { useMemo } from 'react'; +import { isDefined } from 'twenty-shared/utils'; + +export type NonReadableViewFieldUsage = 'filter' | 'sort'; + +export type NonReadableViewFieldInfo = { + fieldLabel?: string; + objectLabel: string; + usage: NonReadableViewFieldUsage; +}; + +export const useHasCurrentViewNonReadableFields = ( + objectMetadataItem: EnrichedObjectMetadataItem, +) => { + const contextStoreCurrentViewId = useAtomComponentStateValue( + contextStoreCurrentViewIdComponentState, + ); + + const view = useAtomFamilySelectorValue(viewFromViewIdFamilySelector, { + viewId: contextStoreCurrentViewId ?? '', + }); + + const { objectMetadataItems } = useObjectMetadataItems(); + const { objectPermissionsByObjectMetadataId } = useObjectPermissions(); + + const nonReadableViewFieldInfo = useMemo((): + | NonReadableViewFieldInfo + | undefined => { + if (!isDefined(view)) { + return undefined; + } + + const readableFieldIds = new Set( + objectMetadataItem.readableFields.map((field) => field.id), + ); + + const params = { + objectMetadataItem, + objectMetadataItems, + readableFieldIds, + objectPermissionsByObjectMetadataId, + }; + + for (const sort of view.viewSorts) { + const info = getNonReadableFieldInfoForViewField({ + fieldMetadataId: sort.fieldMetadataId, + ...params, + }); + + if (isDefined(info)) { + return { ...info, usage: 'sort' }; + } + } + + for (const filter of view.viewFilters) { + const info = getNonReadableFieldInfoForViewField({ + fieldMetadataId: filter.fieldMetadataId, + ...params, + }); + + if (isDefined(info)) { + return { ...info, usage: 'filter' }; + } + } + + return undefined; + }, [ + view, + objectMetadataItem, + objectMetadataItems, + objectPermissionsByObjectMetadataId, + ]); + + return { + hasCurrentViewNonReadableFields: isDefined(nonReadableViewFieldInfo), + nonReadableViewFieldInfo, + }; +}; diff --git a/packages/twenty-front/src/modules/object-record/record-index/utils/getNonReadableInfoForViewField.ts b/packages/twenty-front/src/modules/object-record/record-index/utils/getNonReadableInfoForViewField.ts new file mode 100644 index 00000000000..8397c32d38e --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/record-index/utils/getNonReadableInfoForViewField.ts @@ -0,0 +1,83 @@ +import { type EnrichedObjectMetadataItem } from '@/object-metadata/types/EnrichedObjectMetadataItem'; +import { getFieldMetadataItemById } from '@/object-metadata/utils/getFieldMetadataItemById'; +import { getObjectPermissionsForObject } from '@/object-metadata/utils/getObjectPermissionsForObject'; +import { type ObjectPermissions } from 'twenty-shared/types'; +import { isDefined } from 'twenty-shared/utils'; +import { FieldMetadataType } from '~/generated-metadata/graphql'; + +export const getNonReadableFieldInfoForViewField = ({ + fieldMetadataId, + objectMetadataItem, + objectMetadataItems, + readableFieldIds, + objectPermissionsByObjectMetadataId, +}: { + fieldMetadataId: string; + objectMetadataItem: EnrichedObjectMetadataItem; + objectMetadataItems: EnrichedObjectMetadataItem[]; + readableFieldIds: Set; + objectPermissionsByObjectMetadataId: Record< + string, + ObjectPermissions & { objectMetadataId: string } + >; +}): { fieldLabel?: string; objectLabel: string } | undefined => { + const { fieldMetadataItem } = getFieldMetadataItemById({ + fieldMetadataId, + objectMetadataItems, + }); + + if (!isDefined(fieldMetadataItem)) { + return; + } + + if (!readableFieldIds.has(fieldMetadataId)) { + return { + fieldLabel: fieldMetadataItem.label, + objectLabel: objectMetadataItem.labelSingular, + }; + } + + if (fieldMetadataItem.type !== FieldMetadataType.RELATION) { + return; + } + + const targetObjectMetadataItem = objectMetadataItems.find( + (item) => + item.nameSingular === + fieldMetadataItem.relation?.targetObjectMetadata.nameSingular, + ); + + if (!isDefined(targetObjectMetadataItem)) { + return; + } + + const targetObjectPermissions = getObjectPermissionsForObject( + objectPermissionsByObjectMetadataId, + targetObjectMetadataItem.id, + ); + + if (!targetObjectPermissions.canReadObjectRecords) { + return { + objectLabel: targetObjectMetadataItem.labelSingular, + }; + } + + const labelIdentifierFieldId = + targetObjectMetadataItem.labelIdentifierFieldMetadataId; + + const labelIdentifierField = targetObjectMetadataItem.fields.find( + (field) => field.id === labelIdentifierFieldId, + ); + + const isLabelIdentifierReadable = + targetObjectMetadataItem.readableFields.some( + (field) => field.id === labelIdentifierFieldId, + ); + + if (!isLabelIdentifierReadable) { + return { + fieldLabel: labelIdentifierField?.label, + objectLabel: targetObjectMetadataItem.labelSingular, + }; + } +}; diff --git a/packages/twenty-front/src/modules/object-record/record-index/utils/getNonReadableViewFieldSubTitle.ts b/packages/twenty-front/src/modules/object-record/record-index/utils/getNonReadableViewFieldSubTitle.ts new file mode 100644 index 00000000000..73f230c9a05 --- /dev/null +++ b/packages/twenty-front/src/modules/object-record/record-index/utils/getNonReadableViewFieldSubTitle.ts @@ -0,0 +1,16 @@ +import { type NonReadableViewFieldInfo } from '@/object-record/record-index/hooks/useHasCurrentViewNonReadableFields'; +import { t } from '@lingui/core/macro'; +import { isDefined } from 'twenty-shared/utils'; + +export const getNonReadableViewFieldSubTitle = ( + nonReadableViewFieldInfo: NonReadableViewFieldInfo, +): string => { + const usageLabel = + nonReadableViewFieldInfo.usage === 'sort' ? t`sorting` : t`filtering`; + + if (isDefined(nonReadableViewFieldInfo.fieldLabel)) { + return t`This view uses ${usageLabel} on field "${nonReadableViewFieldInfo.fieldLabel}" on "${nonReadableViewFieldInfo.objectLabel}" which is not accessible.`; + } + + return t`This view uses ${usageLabel} on object "${nonReadableViewFieldInfo.objectLabel}" which is not accessible.`; +}; diff --git a/packages/twenty-front/src/modules/views/components/ViewBar.tsx b/packages/twenty-front/src/modules/views/components/ViewBar.tsx index f7625a8b469..1d970fd5ead 100644 --- a/packages/twenty-front/src/modules/views/components/ViewBar.tsx +++ b/packages/twenty-front/src/modules/views/components/ViewBar.tsx @@ -1,7 +1,7 @@ import { type ReactNode } from 'react'; -import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext'; import { ObjectSortDropdownButton } from '@/object-record/object-sort-dropdown/components/ObjectSortDropdownButton'; +import { useRecordIndexContextOrThrow } from '@/object-record/record-index/contexts/RecordIndexContext'; import { TopBar } from '@/ui/layout/top-bar/components/TopBar'; import { QueryParamsFiltersEffect } from '@/views/components/QueryParamsFiltersEffect'; import { QueryParamsSortsEffect } from '@/views/components/QueryParamsSortsEffect'; diff --git a/packages/twenty-ui/src/layout/animated-placeholder/constants/Background.ts b/packages/twenty-ui/src/layout/animated-placeholder/constants/Background.ts index 215388b6d0e..d485b8f9672 100644 --- a/packages/twenty-ui/src/layout/animated-placeholder/constants/Background.ts +++ b/packages/twenty-ui/src/layout/animated-placeholder/constants/Background.ts @@ -14,4 +14,5 @@ export const BACKGROUND: Record = { error500: '/images/placeholders/background/500_bg.png', noDeletedRecord: '/images/placeholders/background/no_deleted_record_bg.png', noWidgets: '/images/placeholders/background/no_widgets_bg.png', + notShared: '/images/placeholders/background/not_shared_bg.png', }; diff --git a/packages/twenty-ui/src/layout/animated-placeholder/constants/DarkBackground.ts b/packages/twenty-ui/src/layout/animated-placeholder/constants/DarkBackground.ts index 534bc4cd866..3371f4990a1 100644 --- a/packages/twenty-ui/src/layout/animated-placeholder/constants/DarkBackground.ts +++ b/packages/twenty-ui/src/layout/animated-placeholder/constants/DarkBackground.ts @@ -15,4 +15,5 @@ export const DARK_BACKGROUND: Record = { noDeletedRecord: '/images/placeholders/dark-background/no_deleted_record_bg.png', noWidgets: '/images/placeholders/dark-background/no_widgets_bg.png', + notShared: '/images/placeholders/dark-background/not_shared_bg.png', }; diff --git a/packages/twenty-ui/src/layout/animated-placeholder/constants/DarkMovingImage.ts b/packages/twenty-ui/src/layout/animated-placeholder/constants/DarkMovingImage.ts index 6949166672f..63633ada6f8 100644 --- a/packages/twenty-ui/src/layout/animated-placeholder/constants/DarkMovingImage.ts +++ b/packages/twenty-ui/src/layout/animated-placeholder/constants/DarkMovingImage.ts @@ -15,4 +15,5 @@ export const DARK_MOVING_IMAGE: Record = { noDeletedRecord: '/images/placeholders/dark-moving-image/no_deleted_record.png', noWidgets: '/images/placeholders/dark-moving-image/no_widgets.png', + notShared: '/images/placeholders/dark-moving-image/not_shared.png', }; diff --git a/packages/twenty-ui/src/layout/animated-placeholder/constants/MovingImage.ts b/packages/twenty-ui/src/layout/animated-placeholder/constants/MovingImage.ts index 6d591b5bb1f..afedead50f2 100644 --- a/packages/twenty-ui/src/layout/animated-placeholder/constants/MovingImage.ts +++ b/packages/twenty-ui/src/layout/animated-placeholder/constants/MovingImage.ts @@ -14,4 +14,5 @@ export const MOVING_IMAGE: Record = { error500: '/images/placeholders/moving-image/500.png', noDeletedRecord: '/images/placeholders/moving-image/no_deleted_record.png', noWidgets: '/images/placeholders/moving-image/no_widgets.png', + notShared: '/images/placeholders/moving-image/not_shared.png', };