Merge branch 'dev' into album-cover
This commit is contained in:
commit
d809c82b3b
|
@ -235,12 +235,11 @@
|
||||||
"MAP": "",
|
"MAP": "",
|
||||||
"MAP_SETTINGS": "",
|
"MAP_SETTINGS": "",
|
||||||
"ENABLE_MAPS": "",
|
"ENABLE_MAPS": "",
|
||||||
|
"ENABLE_MAP": "",
|
||||||
"DISABLE_MAPS": "",
|
"DISABLE_MAPS": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_1": "",
|
"ENABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_2": "",
|
"DISABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_3": "",
|
"DISABLE_MAP": "",
|
||||||
"DISABLE_MAP_DESCRIPTION_1": "",
|
|
||||||
"DISABLE_MAP_DESCRIPTION_2": "",
|
|
||||||
"DETAILS": "",
|
"DETAILS": "",
|
||||||
"VIEW_EXIF": "",
|
"VIEW_EXIF": "",
|
||||||
"NO_EXIF": "",
|
"NO_EXIF": "",
|
||||||
|
|
|
@ -235,12 +235,11 @@
|
||||||
"MAP": "",
|
"MAP": "",
|
||||||
"MAP_SETTINGS": "",
|
"MAP_SETTINGS": "",
|
||||||
"ENABLE_MAPS": "",
|
"ENABLE_MAPS": "",
|
||||||
|
"ENABLE_MAP": "",
|
||||||
"DISABLE_MAPS": "",
|
"DISABLE_MAPS": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_1": "",
|
"ENABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_2": "",
|
"DISABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_3": "",
|
"DISABLE_MAP": "",
|
||||||
"DISABLE_MAP_DESCRIPTION_1": "",
|
|
||||||
"DISABLE_MAP_DESCRIPTION_2": "",
|
|
||||||
"DETAILS": "Detalles",
|
"DETAILS": "Detalles",
|
||||||
"VIEW_EXIF": "Ver todos los datos de EXIF",
|
"VIEW_EXIF": "Ver todos los datos de EXIF",
|
||||||
"NO_EXIF": "No hay datos EXIF",
|
"NO_EXIF": "No hay datos EXIF",
|
||||||
|
|
|
@ -235,12 +235,11 @@
|
||||||
"MAP": "",
|
"MAP": "",
|
||||||
"MAP_SETTINGS": "",
|
"MAP_SETTINGS": "",
|
||||||
"ENABLE_MAPS": "",
|
"ENABLE_MAPS": "",
|
||||||
|
"ENABLE_MAP": "",
|
||||||
"DISABLE_MAPS": "",
|
"DISABLE_MAPS": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_1": "",
|
"ENABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_2": "",
|
"DISABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_3": "",
|
"DISABLE_MAP": "",
|
||||||
"DISABLE_MAP_DESCRIPTION_1": "",
|
|
||||||
"DISABLE_MAP_DESCRIPTION_2": "",
|
|
||||||
"DETAILS": "",
|
"DETAILS": "",
|
||||||
"VIEW_EXIF": "",
|
"VIEW_EXIF": "",
|
||||||
"NO_EXIF": "",
|
"NO_EXIF": "",
|
||||||
|
|
|
@ -235,12 +235,11 @@
|
||||||
"MAP": "",
|
"MAP": "",
|
||||||
"MAP_SETTINGS": "",
|
"MAP_SETTINGS": "",
|
||||||
"ENABLE_MAPS": "",
|
"ENABLE_MAPS": "",
|
||||||
|
"ENABLE_MAP": "",
|
||||||
"DISABLE_MAPS": "",
|
"DISABLE_MAPS": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_1": "",
|
"ENABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_2": "",
|
"DISABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_3": "",
|
"DISABLE_MAP": "",
|
||||||
"DISABLE_MAP_DESCRIPTION_1": "",
|
|
||||||
"DISABLE_MAP_DESCRIPTION_2": "",
|
|
||||||
"DETAILS": "",
|
"DETAILS": "",
|
||||||
"VIEW_EXIF": "",
|
"VIEW_EXIF": "",
|
||||||
"NO_EXIF": "",
|
"NO_EXIF": "",
|
||||||
|
|
|
@ -235,12 +235,11 @@
|
||||||
"MAP": "",
|
"MAP": "",
|
||||||
"MAP_SETTINGS": "",
|
"MAP_SETTINGS": "",
|
||||||
"ENABLE_MAPS": "",
|
"ENABLE_MAPS": "",
|
||||||
|
"ENABLE_MAP": "",
|
||||||
"DISABLE_MAPS": "",
|
"DISABLE_MAPS": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_1": "",
|
"ENABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_2": "",
|
"DISABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_3": "",
|
"DISABLE_MAP": "",
|
||||||
"DISABLE_MAP_DESCRIPTION_1": "",
|
|
||||||
"DISABLE_MAP_DESCRIPTION_2": "",
|
|
||||||
"DETAILS": "Détails",
|
"DETAILS": "Détails",
|
||||||
"VIEW_EXIF": "Visualiser toutes les données EXIF",
|
"VIEW_EXIF": "Visualiser toutes les données EXIF",
|
||||||
"NO_EXIF": "Aucune donnée EXIF",
|
"NO_EXIF": "Aucune donnée EXIF",
|
||||||
|
|
|
@ -235,12 +235,11 @@
|
||||||
"MAP": "",
|
"MAP": "",
|
||||||
"MAP_SETTINGS": "",
|
"MAP_SETTINGS": "",
|
||||||
"ENABLE_MAPS": "",
|
"ENABLE_MAPS": "",
|
||||||
|
"ENABLE_MAP": "",
|
||||||
"DISABLE_MAPS": "",
|
"DISABLE_MAPS": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_1": "",
|
"ENABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_2": "",
|
"DISABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_3": "",
|
"DISABLE_MAP": "",
|
||||||
"DISABLE_MAP_DESCRIPTION_1": "",
|
|
||||||
"DISABLE_MAP_DESCRIPTION_2": "",
|
|
||||||
"DETAILS": "",
|
"DETAILS": "",
|
||||||
"VIEW_EXIF": "",
|
"VIEW_EXIF": "",
|
||||||
"NO_EXIF": "",
|
"NO_EXIF": "",
|
||||||
|
|
|
@ -235,12 +235,11 @@
|
||||||
"MAP": "",
|
"MAP": "",
|
||||||
"MAP_SETTINGS": "",
|
"MAP_SETTINGS": "",
|
||||||
"ENABLE_MAPS": "",
|
"ENABLE_MAPS": "",
|
||||||
|
"ENABLE_MAP": "",
|
||||||
"DISABLE_MAPS": "",
|
"DISABLE_MAPS": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_1": "",
|
"ENABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_2": "",
|
"DISABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_3": "",
|
"DISABLE_MAP": "",
|
||||||
"DISABLE_MAP_DESCRIPTION_1": "",
|
|
||||||
"DISABLE_MAP_DESCRIPTION_2": "",
|
|
||||||
"DETAILS": "Details",
|
"DETAILS": "Details",
|
||||||
"VIEW_EXIF": "Bekijk alle EXIF gegevens",
|
"VIEW_EXIF": "Bekijk alle EXIF gegevens",
|
||||||
"NO_EXIF": "Geen EXIF gegevens",
|
"NO_EXIF": "Geen EXIF gegevens",
|
||||||
|
|
|
@ -235,12 +235,11 @@
|
||||||
"MAP": "",
|
"MAP": "",
|
||||||
"MAP_SETTINGS": "",
|
"MAP_SETTINGS": "",
|
||||||
"ENABLE_MAPS": "",
|
"ENABLE_MAPS": "",
|
||||||
|
"ENABLE_MAP": "",
|
||||||
"DISABLE_MAPS": "",
|
"DISABLE_MAPS": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_1": "",
|
"ENABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_2": "",
|
"DISABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_3": "",
|
"DISABLE_MAP": "",
|
||||||
"DISABLE_MAP_DESCRIPTION_1": "",
|
|
||||||
"DISABLE_MAP_DESCRIPTION_2": "",
|
|
||||||
"DETAILS": "",
|
"DETAILS": "",
|
||||||
"VIEW_EXIF": "",
|
"VIEW_EXIF": "",
|
||||||
"NO_EXIF": "",
|
"NO_EXIF": "",
|
||||||
|
|
|
@ -235,12 +235,11 @@
|
||||||
"MAP": "",
|
"MAP": "",
|
||||||
"MAP_SETTINGS": "",
|
"MAP_SETTINGS": "",
|
||||||
"ENABLE_MAPS": "",
|
"ENABLE_MAPS": "",
|
||||||
|
"ENABLE_MAP": "",
|
||||||
"DISABLE_MAPS": "",
|
"DISABLE_MAPS": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_1": "",
|
"ENABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_2": "",
|
"DISABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_3": "",
|
"DISABLE_MAP": "",
|
||||||
"DISABLE_MAP_DESCRIPTION_1": "",
|
|
||||||
"DISABLE_MAP_DESCRIPTION_2": "",
|
|
||||||
"DETAILS": "",
|
"DETAILS": "",
|
||||||
"VIEW_EXIF": "",
|
"VIEW_EXIF": "",
|
||||||
"NO_EXIF": "",
|
"NO_EXIF": "",
|
||||||
|
|
|
@ -235,12 +235,11 @@
|
||||||
"MAP": "",
|
"MAP": "",
|
||||||
"MAP_SETTINGS": "",
|
"MAP_SETTINGS": "",
|
||||||
"ENABLE_MAPS": "",
|
"ENABLE_MAPS": "",
|
||||||
|
"ENABLE_MAP": "",
|
||||||
"DISABLE_MAPS": "",
|
"DISABLE_MAPS": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_1": "",
|
"ENABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_2": "",
|
"DISABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_3": "",
|
"DISABLE_MAP": "",
|
||||||
"DISABLE_MAP_DESCRIPTION_1": "",
|
|
||||||
"DISABLE_MAP_DESCRIPTION_2": "",
|
|
||||||
"DETAILS": "",
|
"DETAILS": "",
|
||||||
"VIEW_EXIF": "",
|
"VIEW_EXIF": "",
|
||||||
"NO_EXIF": "",
|
"NO_EXIF": "",
|
||||||
|
|
|
@ -235,12 +235,11 @@
|
||||||
"MAP": "",
|
"MAP": "",
|
||||||
"MAP_SETTINGS": "",
|
"MAP_SETTINGS": "",
|
||||||
"ENABLE_MAPS": "",
|
"ENABLE_MAPS": "",
|
||||||
|
"ENABLE_MAP": "",
|
||||||
"DISABLE_MAPS": "",
|
"DISABLE_MAPS": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_1": "",
|
"ENABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_2": "",
|
"DISABLE_MAP_DESCRIPTION": "",
|
||||||
"ENABLE_MAP_DESCRIPTION_3": "",
|
"DISABLE_MAP": "",
|
||||||
"DISABLE_MAP_DESCRIPTION_1": "",
|
|
||||||
"DISABLE_MAP_DESCRIPTION_2": "",
|
|
||||||
"DETAILS": "详情",
|
"DETAILS": "详情",
|
||||||
"VIEW_EXIF": "查看所有 EXIF 数据",
|
"VIEW_EXIF": "查看所有 EXIF 数据",
|
||||||
"NO_EXIF": "无 EXIF 数据",
|
"NO_EXIF": "无 EXIF 数据",
|
||||||
|
|
|
@ -13,7 +13,7 @@ import PushPinOutlined from '@mui/icons-material/PushPinOutlined';
|
||||||
import { UnPinIcon } from 'components/icons/UnPinIcon';
|
import { UnPinIcon } from 'components/icons/UnPinIcon';
|
||||||
|
|
||||||
interface Iprops {
|
interface Iprops {
|
||||||
IsArchived: boolean;
|
isArchived: boolean;
|
||||||
isPinned: boolean;
|
isPinned: boolean;
|
||||||
handleCollectionAction: (
|
handleCollectionAction: (
|
||||||
action: CollectionActions,
|
action: CollectionActions,
|
||||||
|
@ -22,7 +22,7 @@ interface Iprops {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function AlbumCollectionOption({
|
export function AlbumCollectionOption({
|
||||||
IsArchived,
|
isArchived,
|
||||||
isPinned,
|
isPinned,
|
||||||
handleCollectionAction,
|
handleCollectionAction,
|
||||||
}: Iprops) {
|
}: Iprops) {
|
||||||
|
@ -63,7 +63,7 @@ export function AlbumCollectionOption({
|
||||||
{t('PIN_ALBUM')}
|
{t('PIN_ALBUM')}
|
||||||
</OverflowMenuOption>
|
</OverflowMenuOption>
|
||||||
)}
|
)}
|
||||||
{IsArchived ? (
|
{isArchived ? (
|
||||||
<OverflowMenuOption
|
<OverflowMenuOption
|
||||||
onClick={handleCollectionAction(
|
onClick={handleCollectionAction(
|
||||||
CollectionActions.UNARCHIVE
|
CollectionActions.UNARCHIVE
|
||||||
|
|
|
@ -3,16 +3,38 @@ import React from 'react';
|
||||||
import LogoutIcon from '@mui/icons-material/Logout';
|
import LogoutIcon from '@mui/icons-material/Logout';
|
||||||
import { CollectionActions } from '.';
|
import { CollectionActions } from '.';
|
||||||
import { t } from 'i18next';
|
import { t } from 'i18next';
|
||||||
|
import Unarchive from '@mui/icons-material/Unarchive';
|
||||||
|
import ArchiveOutlined from '@mui/icons-material/ArchiveOutlined';
|
||||||
|
|
||||||
interface Iprops {
|
interface Iprops {
|
||||||
|
isArchived: boolean;
|
||||||
handleCollectionAction: (
|
handleCollectionAction: (
|
||||||
action: CollectionActions,
|
action: CollectionActions,
|
||||||
loader?: boolean
|
loader?: boolean
|
||||||
) => (...args: any[]) => Promise<void>;
|
) => (...args: any[]) => Promise<void>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function SharedCollectionOption({ handleCollectionAction }: Iprops) {
|
export function SharedCollectionOption({
|
||||||
|
isArchived,
|
||||||
|
handleCollectionAction,
|
||||||
|
}: Iprops) {
|
||||||
return (
|
return (
|
||||||
|
<>
|
||||||
|
{isArchived ? (
|
||||||
|
<OverflowMenuOption
|
||||||
|
onClick={handleCollectionAction(
|
||||||
|
CollectionActions.UNARCHIVE
|
||||||
|
)}
|
||||||
|
startIcon={<Unarchive />}>
|
||||||
|
{t('UNARCHIVE_COLLECTION')}
|
||||||
|
</OverflowMenuOption>
|
||||||
|
) : (
|
||||||
|
<OverflowMenuOption
|
||||||
|
onClick={handleCollectionAction(CollectionActions.ARCHIVE)}
|
||||||
|
startIcon={<ArchiveOutlined />}>
|
||||||
|
{t('ARCHIVE_COLLECTION')}
|
||||||
|
</OverflowMenuOption>
|
||||||
|
)}
|
||||||
<OverflowMenuOption
|
<OverflowMenuOption
|
||||||
startIcon={<LogoutIcon />}
|
startIcon={<LogoutIcon />}
|
||||||
onClick={handleCollectionAction(
|
onClick={handleCollectionAction(
|
||||||
|
@ -21,5 +43,6 @@ export function SharedCollectionOption({ handleCollectionAction }: Iprops) {
|
||||||
)}>
|
)}>
|
||||||
{t('LEAVE_ALBUM')}
|
{t('LEAVE_ALBUM')}
|
||||||
</OverflowMenuOption>
|
</OverflowMenuOption>
|
||||||
|
</>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ import {
|
||||||
} from 'utils/collection';
|
} from 'utils/collection';
|
||||||
import { SetCollectionNamerAttributes } from '../CollectionNamer';
|
import { SetCollectionNamerAttributes } from '../CollectionNamer';
|
||||||
import { Collection } from 'types/collection';
|
import { Collection } from 'types/collection';
|
||||||
import { IsArchived, isPinnedCollection } from 'utils/magicMetadata';
|
import { isArchivedCollection, isPinnedCollection } from 'utils/magicMetadata';
|
||||||
import { GalleryContext } from 'pages/gallery';
|
import { GalleryContext } from 'pages/gallery';
|
||||||
import { logError } from 'utils/sentry';
|
import { logError } from 'utils/sentry';
|
||||||
import { VISIBILITY_STATE } from 'types/magicMetadata';
|
import { VISIBILITY_STATE } from 'types/magicMetadata';
|
||||||
|
@ -343,11 +343,12 @@ const CollectionOptions = (props: CollectionOptionsProps) => {
|
||||||
collectionSummaryType ===
|
collectionSummaryType ===
|
||||||
CollectionSummaryType.incomingShareCollaborator ? (
|
CollectionSummaryType.incomingShareCollaborator ? (
|
||||||
<SharedCollectionOption
|
<SharedCollectionOption
|
||||||
|
isArchived={isArchivedCollection(activeCollection)}
|
||||||
handleCollectionAction={handleCollectionAction}
|
handleCollectionAction={handleCollectionAction}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<AlbumCollectionOption
|
<AlbumCollectionOption
|
||||||
IsArchived={IsArchived(activeCollection)}
|
isArchived={isArchivedCollection(activeCollection)}
|
||||||
isPinned={isPinnedCollection(activeCollection)}
|
isPinned={isPinnedCollection(activeCollection)}
|
||||||
handleCollectionAction={handleCollectionAction}
|
handleCollectionAction={handleCollectionAction}
|
||||||
/>
|
/>
|
||||||
|
|
|
@ -37,6 +37,7 @@ import {
|
||||||
getMapDisableConfirmationDialog,
|
getMapDisableConfirmationDialog,
|
||||||
getMapEnableConfirmationDialog,
|
getMapEnableConfirmationDialog,
|
||||||
} from 'utils/ui';
|
} from 'utils/ui';
|
||||||
|
import { PublicCollectionGalleryContext } from 'utils/publicCollectionGallery';
|
||||||
|
|
||||||
export const FileInfoSidebar = styled((props: DialogProps) => (
|
export const FileInfoSidebar = styled((props: DialogProps) => (
|
||||||
<EnteDrawer {...props} anchor="right" />
|
<EnteDrawer {...props} anchor="right" />
|
||||||
|
@ -97,6 +98,9 @@ export function FileInfo({
|
||||||
}: Iprops) {
|
}: Iprops) {
|
||||||
const appContext = useContext(AppContext);
|
const appContext = useContext(AppContext);
|
||||||
const galleryContext = useContext(GalleryContext);
|
const galleryContext = useContext(GalleryContext);
|
||||||
|
const publicCollectionGalleryContext = useContext(
|
||||||
|
PublicCollectionGalleryContext
|
||||||
|
);
|
||||||
|
|
||||||
const [parsedExifData, setParsedExifData] = useState<Record<string, any>>();
|
const [parsedExifData, setParsedExifData] = useState<Record<string, any>>();
|
||||||
const [showExif, setShowExif] = useState(false);
|
const [showExif, setShowExif] = useState(false);
|
||||||
|
@ -235,7 +239,8 @@ export function FileInfo({
|
||||||
icon={<LocationOnOutlined />}
|
icon={<LocationOnOutlined />}
|
||||||
title={t('LOCATION')}
|
title={t('LOCATION')}
|
||||||
caption={
|
caption={
|
||||||
!appContext.mapEnabled ? (
|
!appContext.mapEnabled ||
|
||||||
|
publicCollectionGalleryContext.accessedThroughSharedURL ? (
|
||||||
<Link
|
<Link
|
||||||
href={getOpenStreetMapLink(location)}
|
href={getOpenStreetMapLink(location)}
|
||||||
target="_blank"
|
target="_blank"
|
||||||
|
@ -264,6 +269,7 @@ export function FileInfo({
|
||||||
/>
|
/>
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
{!publicCollectionGalleryContext.accessedThroughSharedURL && (
|
||||||
<MapBox
|
<MapBox
|
||||||
location={location}
|
location={location}
|
||||||
mapEnabled={appContext.mapEnabled}
|
mapEnabled={appContext.mapEnabled}
|
||||||
|
@ -271,6 +277,7 @@ export function FileInfo({
|
||||||
openEnableMapConfirmationDialog
|
openEnableMapConfirmationDialog
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
|
)}
|
||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
<InfoItem
|
<InfoItem
|
||||||
|
|
|
@ -18,21 +18,17 @@ export function FamilySubscriptionCardContent({ userDetails }: Iprops) {
|
||||||
return userDetails.usage;
|
return userDetails.usage;
|
||||||
}
|
}
|
||||||
}, [userDetails]);
|
}, [userDetails]);
|
||||||
|
const totalStorage =
|
||||||
|
userDetails.familyData.storage + (userDetails.storageBonus ?? 0);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<StorageSection
|
<StorageSection storage={totalStorage} usage={totalUsage} />
|
||||||
storage={userDetails.familyData.storage}
|
|
||||||
usage={totalUsage}
|
|
||||||
/>
|
|
||||||
<FamilyUsageSection
|
<FamilyUsageSection
|
||||||
userUsage={userDetails.usage}
|
userUsage={userDetails.usage}
|
||||||
fileCount={userDetails.fileCount}
|
fileCount={userDetails.fileCount}
|
||||||
totalUsage={totalUsage}
|
totalUsage={totalUsage}
|
||||||
totalStorage={
|
totalStorage={totalStorage}
|
||||||
userDetails.familyData.storage +
|
|
||||||
(userDetails.storageBonus ?? 0)
|
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
|
@ -8,19 +8,15 @@ interface Iprops {
|
||||||
}
|
}
|
||||||
|
|
||||||
export function IndividualSubscriptionCardContent({ userDetails }: Iprops) {
|
export function IndividualSubscriptionCardContent({ userDetails }: Iprops) {
|
||||||
|
const totalStorage =
|
||||||
|
userDetails.subscription.storage + (userDetails.storageBonus ?? 0);
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<StorageSection
|
<StorageSection storage={totalStorage} usage={userDetails.usage} />
|
||||||
storage={userDetails.subscription.storage}
|
|
||||||
usage={userDetails.usage}
|
|
||||||
/>
|
|
||||||
<IndividualUsageSection
|
<IndividualUsageSection
|
||||||
usage={userDetails.usage}
|
usage={userDetails.usage}
|
||||||
fileCount={userDetails.fileCount}
|
fileCount={userDetails.fileCount}
|
||||||
storage={
|
storage={totalStorage}
|
||||||
userDetails.subscription.storage +
|
|
||||||
(userDetails.storageBonus ?? 0)
|
|
||||||
}
|
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
|
@ -20,8 +20,7 @@ import {
|
||||||
import { FILE_TYPE } from 'constants/file';
|
import { FILE_TYPE } from 'constants/file';
|
||||||
import AlbumOutlined from '@mui/icons-material/AlbumOutlined';
|
import AlbumOutlined from '@mui/icons-material/AlbumOutlined';
|
||||||
import Avatar from './Avatar';
|
import Avatar from './Avatar';
|
||||||
import { User } from 'types/user';
|
import { shouldShowAvatar } from 'utils/file';
|
||||||
import { getData, LS_KEYS } from 'utils/storage/localStorage';
|
|
||||||
|
|
||||||
interface IProps {
|
interface IProps {
|
||||||
file: EnteFile;
|
file: EnteFile;
|
||||||
|
@ -217,7 +216,7 @@ const Cont = styled('div')<{ disabled: boolean }>`
|
||||||
`;
|
`;
|
||||||
|
|
||||||
export default function PreviewCard(props: IProps) {
|
export default function PreviewCard(props: IProps) {
|
||||||
const { thumbs } = useContext(GalleryContext);
|
const { thumbs, user } = useContext(GalleryContext);
|
||||||
|
|
||||||
const {
|
const {
|
||||||
file,
|
file,
|
||||||
|
@ -334,8 +333,6 @@ export default function PreviewCard(props: IProps) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const user: User = getData(LS_KEYS.USER);
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Cont
|
<Cont
|
||||||
key={`thumb-${file.id}-${props.showPlaceholder}`}
|
key={`thumb-${file.id}-${props.showPlaceholder}`}
|
||||||
|
@ -371,9 +368,7 @@ export default function PreviewCard(props: IProps) {
|
||||||
)
|
)
|
||||||
)}
|
)}
|
||||||
<SelectedOverlay selected={selected} />
|
<SelectedOverlay selected={selected} />
|
||||||
{(file.ownerID !== user.id ||
|
{shouldShowAvatar(file, user) && (
|
||||||
(file.ownerID === user.id &&
|
|
||||||
file.pubMagicMetadata?.data?.uploaderName)) && (
|
|
||||||
<AvatarOverlay>
|
<AvatarOverlay>
|
||||||
<Avatar file={file} />
|
<Avatar file={file} />
|
||||||
</AvatarOverlay>
|
</AvatarOverlay>
|
||||||
|
|
|
@ -119,7 +119,7 @@ import ExportModal from 'components/ExportModal';
|
||||||
import GalleryEmptyState from 'components/GalleryEmptyState';
|
import GalleryEmptyState from 'components/GalleryEmptyState';
|
||||||
import AuthenticateUserModal from 'components/AuthenticateUserModal';
|
import AuthenticateUserModal from 'components/AuthenticateUserModal';
|
||||||
import useMemoSingleThreaded from 'hooks/useMemoSingleThreaded';
|
import useMemoSingleThreaded from 'hooks/useMemoSingleThreaded';
|
||||||
import { IsArchived } from 'utils/magicMetadata';
|
import { isArchivedFile } from 'utils/magicMetadata';
|
||||||
import { isSameDayAnyYear, isInsideLocationTag } from 'utils/search';
|
import { isSameDayAnyYear, isInsideLocationTag } from 'utils/search';
|
||||||
import { getSessionExpiredMessage } from 'utils/ui';
|
import { getSessionExpiredMessage } from 'utils/ui';
|
||||||
import { syncEntities } from 'services/entityService';
|
import { syncEntities } from 'services/entityService';
|
||||||
|
@ -497,7 +497,7 @@ export default function Gallery() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Archived files can only be seen in archive section or their respective collection
|
// Archived files can only be seen in archive section or their respective collection
|
||||||
if (IsArchived(item)) {
|
if (isArchivedFile(item)) {
|
||||||
if (
|
if (
|
||||||
activeCollection === ARCHIVE_SECTION ||
|
activeCollection === ARCHIVE_SECTION ||
|
||||||
activeCollection === item.collectionID
|
activeCollection === item.collectionID
|
||||||
|
|
|
@ -30,6 +30,7 @@ import {
|
||||||
CollectionMagicMetadataProps,
|
CollectionMagicMetadataProps,
|
||||||
CollectionPublicMagicMetadata,
|
CollectionPublicMagicMetadata,
|
||||||
RemoveFromCollectionRequest,
|
RemoveFromCollectionRequest,
|
||||||
|
CollectionShareeMagicMetadata,
|
||||||
} from 'types/collection';
|
} from 'types/collection';
|
||||||
import {
|
import {
|
||||||
COLLECTION_LIST_SORT_BY,
|
COLLECTION_LIST_SORT_BY,
|
||||||
|
@ -44,7 +45,8 @@ import {
|
||||||
} from 'constants/collection';
|
} from 'constants/collection';
|
||||||
import { SUB_TYPE, UpdateMagicMetadataRequest } from 'types/magicMetadata';
|
import { SUB_TYPE, UpdateMagicMetadataRequest } from 'types/magicMetadata';
|
||||||
import {
|
import {
|
||||||
IsArchived,
|
isArchivedCollection,
|
||||||
|
isArchivedFile,
|
||||||
isPinnedCollection,
|
isPinnedCollection,
|
||||||
updateMagicMetadata,
|
updateMagicMetadata,
|
||||||
} from 'utils/magicMetadata';
|
} from 'utils/magicMetadata';
|
||||||
|
@ -144,12 +146,25 @@ const getCollectionWithSecrets = async (
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let collectionShareeMagicMetadata: CollectionShareeMagicMetadata;
|
||||||
|
if (collection.sharedMagicMetadata?.data) {
|
||||||
|
collectionShareeMagicMetadata = {
|
||||||
|
...collection.sharedMagicMetadata,
|
||||||
|
data: await cryptoWorker.decryptMetadata(
|
||||||
|
collection.sharedMagicMetadata.data,
|
||||||
|
collection.sharedMagicMetadata.header,
|
||||||
|
collectionKey
|
||||||
|
),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...collection,
|
...collection,
|
||||||
name: collectionName,
|
name: collectionName,
|
||||||
key: collectionKey,
|
key: collectionKey,
|
||||||
magicMetadata: collectionMagicMetadata,
|
magicMetadata: collectionMagicMetadata,
|
||||||
pubMagicMetadata: collectionPublicMagicMetadata,
|
pubMagicMetadata: collectionPublicMagicMetadata,
|
||||||
|
sharedMagicMetadata: collectionShareeMagicMetadata,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -293,7 +308,7 @@ export const getCollectionLatestFiles = (
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
!latestFiles.has(ALL_SECTION) &&
|
!latestFiles.has(ALL_SECTION) &&
|
||||||
!IsArchived(file) &&
|
!isArchivedFile(file) &&
|
||||||
!archivedCollections.has(file.collectionID)
|
!archivedCollections.has(file.collectionID)
|
||||||
) {
|
) {
|
||||||
latestFiles.set(ALL_SECTION, file);
|
latestFiles.set(ALL_SECTION, file);
|
||||||
|
@ -339,7 +354,10 @@ export const getCollectionCoverFiles = (
|
||||||
if (coverFiles.has(ALL_SECTION)) {
|
if (coverFiles.has(ALL_SECTION)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!IsArchived(file) && !archivedCollections.has(file.collectionID)) {
|
if (
|
||||||
|
!isArchivedFile(file) &&
|
||||||
|
!archivedCollections.has(file.collectionID)
|
||||||
|
) {
|
||||||
coverFiles.set(ALL_SECTION, file);
|
coverFiles.set(ALL_SECTION, file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -407,6 +425,7 @@ const createCollection = async (
|
||||||
isDeleted: false,
|
isDeleted: false,
|
||||||
magicMetadata: encryptedMagicMetadata,
|
magicMetadata: encryptedMagicMetadata,
|
||||||
pubMagicMetadata: null,
|
pubMagicMetadata: null,
|
||||||
|
sharedMagicMetadata: null,
|
||||||
};
|
};
|
||||||
const createdCollection = await postCollection(newCollection, token);
|
const createdCollection = await postCollection(newCollection, token);
|
||||||
const decryptedCreatedCollection = await getCollectionWithSecrets(
|
const decryptedCreatedCollection = await getCollectionWithSecrets(
|
||||||
|
@ -786,6 +805,50 @@ export const updateCollectionMagicMetadata = async (
|
||||||
return updatedCollection;
|
return updatedCollection;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const updateSharedCollectionMagicMetadata = async (
|
||||||
|
collection: Collection,
|
||||||
|
updatedMagicMetadata: CollectionMagicMetadata
|
||||||
|
) => {
|
||||||
|
const token = getToken();
|
||||||
|
if (!token) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const cryptoWorker = await ComlinkCryptoWorker.getInstance();
|
||||||
|
|
||||||
|
const { file: encryptedMagicMetadata } = await cryptoWorker.encryptMetadata(
|
||||||
|
updatedMagicMetadata.data,
|
||||||
|
collection.key
|
||||||
|
);
|
||||||
|
|
||||||
|
const reqBody: UpdateMagicMetadataRequest = {
|
||||||
|
id: collection.id,
|
||||||
|
magicMetadata: {
|
||||||
|
version: updatedMagicMetadata.version,
|
||||||
|
count: updatedMagicMetadata.count,
|
||||||
|
data: encryptedMagicMetadata.encryptedData,
|
||||||
|
header: encryptedMagicMetadata.decryptionHeader,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
await HTTPService.put(
|
||||||
|
`${ENDPOINT}/collections/sharee-magic-metadata`,
|
||||||
|
reqBody,
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
'X-Auth-Token': token,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
const updatedCollection: Collection = {
|
||||||
|
...collection,
|
||||||
|
magicMetadata: {
|
||||||
|
...updatedMagicMetadata,
|
||||||
|
version: updatedMagicMetadata.version + 1,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
return updatedCollection;
|
||||||
|
};
|
||||||
|
|
||||||
export const updatePublicCollectionMagicMetadata = async (
|
export const updatePublicCollectionMagicMetadata = async (
|
||||||
collection: Collection,
|
collection: Collection,
|
||||||
updatedPublicMagicMetadata: CollectionPublicMagicMetadata
|
updatedPublicMagicMetadata: CollectionPublicMagicMetadata
|
||||||
|
@ -1082,7 +1145,7 @@ export async function getCollectionSummaries(
|
||||||
type = CollectionSummaryType.outgoingShare;
|
type = CollectionSummaryType.outgoingShare;
|
||||||
} else if (isSharedOnlyViaLink(collection)) {
|
} else if (isSharedOnlyViaLink(collection)) {
|
||||||
type = CollectionSummaryType.sharedOnlyViaLink;
|
type = CollectionSummaryType.sharedOnlyViaLink;
|
||||||
} else if (IsArchived(collection)) {
|
} else if (isArchivedCollection(collection)) {
|
||||||
type = CollectionSummaryType.archived;
|
type = CollectionSummaryType.archived;
|
||||||
} else if (isHiddenCollection(collection)) {
|
} else if (isHiddenCollection(collection)) {
|
||||||
type = CollectionSummaryType.hidden;
|
type = CollectionSummaryType.hidden;
|
||||||
|
@ -1177,7 +1240,7 @@ function getCollectionsFileCount(
|
||||||
for (const file of files) {
|
for (const file of files) {
|
||||||
if (isSharedFile(user, file)) {
|
if (isSharedFile(user, file)) {
|
||||||
continue;
|
continue;
|
||||||
} else if (IsArchived(file)) {
|
} else if (isArchivedFile(file)) {
|
||||||
uniqueArchivedFileIDs.add(file.id);
|
uniqueArchivedFileIDs.add(file.id);
|
||||||
} else if (!archivedCollections.has(file.collectionID)) {
|
} else if (!archivedCollections.has(file.collectionID)) {
|
||||||
uniqueAllSectionFileIDs.add(file.id);
|
uniqueAllSectionFileIDs.add(file.id);
|
||||||
|
|
|
@ -37,6 +37,7 @@ export interface EncryptedCollection {
|
||||||
isDeleted: boolean;
|
isDeleted: boolean;
|
||||||
magicMetadata: EncryptedMagicMetadata;
|
magicMetadata: EncryptedMagicMetadata;
|
||||||
pubMagicMetadata: EncryptedMagicMetadata;
|
pubMagicMetadata: EncryptedMagicMetadata;
|
||||||
|
sharedMagicMetadata: EncryptedMagicMetadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface Collection
|
export interface Collection
|
||||||
|
@ -48,11 +49,13 @@ export interface Collection
|
||||||
| 'nameDecryptionNonce'
|
| 'nameDecryptionNonce'
|
||||||
| 'magicMetadata'
|
| 'magicMetadata'
|
||||||
| 'pubMagicMetadata'
|
| 'pubMagicMetadata'
|
||||||
|
| 'sharedMagicMetadata'
|
||||||
> {
|
> {
|
||||||
key: string;
|
key: string;
|
||||||
name: string;
|
name: string;
|
||||||
magicMetadata: CollectionMagicMetadata;
|
magicMetadata: CollectionMagicMetadata;
|
||||||
pubMagicMetadata: CollectionPublicMagicMetadata;
|
pubMagicMetadata: CollectionPublicMagicMetadata;
|
||||||
|
sharedMagicMetadata: CollectionShareeMagicMetadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface PublicURL {
|
export interface PublicURL {
|
||||||
|
@ -124,6 +127,12 @@ export interface CollectionMagicMetadataProps {
|
||||||
export type CollectionMagicMetadata =
|
export type CollectionMagicMetadata =
|
||||||
MagicMetadataCore<CollectionMagicMetadataProps>;
|
MagicMetadataCore<CollectionMagicMetadataProps>;
|
||||||
|
|
||||||
|
export interface CollectionShareeMetadataProps {
|
||||||
|
visibility?: VISIBILITY_STATE;
|
||||||
|
}
|
||||||
|
export type CollectionShareeMagicMetadata =
|
||||||
|
MagicMetadataCore<CollectionShareeMetadataProps>;
|
||||||
|
|
||||||
export interface CollectionPublicMagicMetadataProps {
|
export interface CollectionPublicMagicMetadataProps {
|
||||||
asc?: boolean;
|
asc?: boolean;
|
||||||
coverID?: number;
|
coverID?: number;
|
||||||
|
|
|
@ -8,6 +8,7 @@ import {
|
||||||
unhideToCollection,
|
unhideToCollection,
|
||||||
updateCollectionMagicMetadata,
|
updateCollectionMagicMetadata,
|
||||||
updatePublicCollectionMagicMetadata,
|
updatePublicCollectionMagicMetadata,
|
||||||
|
updateSharedCollectionMagicMetadata,
|
||||||
} from 'services/collectionService';
|
} from 'services/collectionService';
|
||||||
import { downloadFiles } from 'utils/file';
|
import { downloadFiles } from 'utils/file';
|
||||||
import { getLocalFiles, getLocalHiddenFiles } from 'services/fileService';
|
import { getLocalFiles, getLocalHiddenFiles } from 'services/fileService';
|
||||||
|
@ -34,7 +35,7 @@ import {
|
||||||
} from 'constants/collection';
|
} from 'constants/collection';
|
||||||
import { getUnixTimeInMicroSecondsWithDelta } from 'utils/time';
|
import { getUnixTimeInMicroSecondsWithDelta } from 'utils/time';
|
||||||
import { SUB_TYPE, VISIBILITY_STATE } from 'types/magicMetadata';
|
import { SUB_TYPE, VISIBILITY_STATE } from 'types/magicMetadata';
|
||||||
import { IsArchived, updateMagicMetadata } from 'utils/magicMetadata';
|
import { isArchivedCollection, updateMagicMetadata } from 'utils/magicMetadata';
|
||||||
import { getAlbumsURL } from 'utils/common/apiUtil';
|
import { getAlbumsURL } from 'utils/common/apiUtil';
|
||||||
import bs58 from 'bs58';
|
import bs58 from 'bs58';
|
||||||
import { t } from 'i18next';
|
import { t } from 'i18next';
|
||||||
|
@ -166,12 +167,29 @@ export const changeCollectionVisibility = async (
|
||||||
visibility,
|
visibility,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const user: User = getData(LS_KEYS.USER);
|
||||||
|
if (collection.owner.id === user.id) {
|
||||||
const updatedMagicMetadata = await updateMagicMetadata(
|
const updatedMagicMetadata = await updateMagicMetadata(
|
||||||
updatedMagicMetadataProps,
|
updatedMagicMetadataProps,
|
||||||
collection.magicMetadata,
|
collection.magicMetadata,
|
||||||
collection.key
|
collection.key
|
||||||
);
|
);
|
||||||
await updateCollectionMagicMetadata(collection, updatedMagicMetadata);
|
|
||||||
|
await updateCollectionMagicMetadata(
|
||||||
|
collection,
|
||||||
|
updatedMagicMetadata
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
const updatedMagicMetadata = await updateMagicMetadata(
|
||||||
|
updatedMagicMetadataProps,
|
||||||
|
collection.sharedMagicMetadata,
|
||||||
|
collection.key
|
||||||
|
);
|
||||||
|
await updateSharedCollectionMagicMetadata(
|
||||||
|
collection,
|
||||||
|
updatedMagicMetadata
|
||||||
|
);
|
||||||
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
logError(e, 'change collection visibility failed');
|
logError(e, 'change collection visibility failed');
|
||||||
throw e;
|
throw e;
|
||||||
|
@ -247,7 +265,9 @@ export const changeCollectionSubType = async (
|
||||||
|
|
||||||
export const getArchivedCollections = (collections: Collection[]) => {
|
export const getArchivedCollections = (collections: Collection[]) => {
|
||||||
return new Set<number>(
|
return new Set<number>(
|
||||||
collections.filter(IsArchived).map((collection) => collection.id)
|
collections
|
||||||
|
.filter(isArchivedCollection)
|
||||||
|
.map((collection) => collection.id)
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,7 @@ import PublicCollectionDownloadManager from 'services/publicCollectionDownloadMa
|
||||||
import heicConversionService from 'services/heicConversionService';
|
import heicConversionService from 'services/heicConversionService';
|
||||||
import * as ffmpegService from 'services/ffmpeg/ffmpegService';
|
import * as ffmpegService from 'services/ffmpeg/ffmpegService';
|
||||||
import { VISIBILITY_STATE } from 'types/magicMetadata';
|
import { VISIBILITY_STATE } from 'types/magicMetadata';
|
||||||
import { IsArchived, updateMagicMetadata } from 'utils/magicMetadata';
|
import { isArchivedFile, updateMagicMetadata } from 'utils/magicMetadata';
|
||||||
|
|
||||||
import { addLocalLog, addLogLine } from 'utils/logging';
|
import { addLocalLog, addLogLine } from 'utils/logging';
|
||||||
import { CustomError } from 'utils/error';
|
import { CustomError } from 'utils/error';
|
||||||
|
@ -576,7 +576,7 @@ export const isImageOrVideo = (fileType: FILE_TYPE) =>
|
||||||
[FILE_TYPE.IMAGE, FILE_TYPE.VIDEO].includes(fileType);
|
[FILE_TYPE.IMAGE, FILE_TYPE.VIDEO].includes(fileType);
|
||||||
|
|
||||||
export const getArchivedFiles = (files: EnteFile[]) => {
|
export const getArchivedFiles = (files: EnteFile[]) => {
|
||||||
return files.filter(IsArchived).map((file) => file.id);
|
return files.filter(isArchivedFile).map((file) => file.id);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const createTypedObjectURL = async (blob: Blob, fileName: string) => {
|
export const createTypedObjectURL = async (blob: Blob, fileName: string) => {
|
||||||
|
@ -672,3 +672,22 @@ export function constructFileToCollectionMap(files: EnteFile[]) {
|
||||||
});
|
});
|
||||||
return fileToCollectionsMap;
|
return fileToCollectionsMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const shouldShowAvatar = (file: EnteFile, user: User) => {
|
||||||
|
if (!file || !user) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// is Shared file
|
||||||
|
else if (file.ownerID !== user.id) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
// is public collected file
|
||||||
|
else if (
|
||||||
|
file.ownerID === user.id &&
|
||||||
|
file.pubMagicMetadata?.data?.uploaderName
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
|
@ -3,19 +3,31 @@ import { EnteFile } from 'types/file';
|
||||||
import { MagicMetadataCore, VISIBILITY_STATE } from 'types/magicMetadata';
|
import { MagicMetadataCore, VISIBILITY_STATE } from 'types/magicMetadata';
|
||||||
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
|
import ComlinkCryptoWorker from 'utils/comlink/ComlinkCryptoWorker';
|
||||||
|
|
||||||
export function IsArchived(item: Collection | EnteFile) {
|
export function isArchivedFile(item: EnteFile): boolean {
|
||||||
if (
|
if (!item || !item.magicMetadata || !item.magicMetadata.data) {
|
||||||
!item ||
|
|
||||||
!item.magicMetadata ||
|
|
||||||
!item.magicMetadata.data ||
|
|
||||||
typeof item.magicMetadata.data === 'string' ||
|
|
||||||
typeof item.magicMetadata.data.visibility === 'undefined'
|
|
||||||
) {
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return item.magicMetadata.data.visibility === VISIBILITY_STATE.ARCHIVED;
|
return item.magicMetadata.data.visibility === VISIBILITY_STATE.ARCHIVED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function isArchivedCollection(item: Collection): boolean {
|
||||||
|
if (!item) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.magicMetadata && item.magicMetadata.data) {
|
||||||
|
return item.magicMetadata.data.visibility === VISIBILITY_STATE.ARCHIVED;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (item.sharedMagicMetadata && item.sharedMagicMetadata.data) {
|
||||||
|
return (
|
||||||
|
item.sharedMagicMetadata.data.visibility ===
|
||||||
|
VISIBILITY_STATE.ARCHIVED
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
export function isPinnedCollection(item: Collection) {
|
export function isPinnedCollection(item: Collection) {
|
||||||
if (
|
if (
|
||||||
!item ||
|
!item ||
|
||||||
|
|
Loading…
Reference in a new issue