update collection selector

This commit is contained in:
Abhinav 2022-05-26 20:42:13 +05:30
parent cafaef68e5
commit 171ce74207
2 changed files with 65 additions and 73 deletions

View file

@ -1,23 +1,19 @@
import React, { useEffect, useState } from 'react';
import { Card, Modal } from 'react-bootstrap';
import styled from 'styled-components';
import AddCollectionButton from './AddCollectionButton';
import PreviewCard from './PreviewCard';
import { getData, LS_KEYS } from 'utils/storage/localStorage';
import { User } from 'types/user';
import { Collection, CollectionAndItsLatestFile } from 'types/collection';
import {
Collection,
CollectionSummaries,
CollectionSummary,
} from 'types/collection';
import { CollectionType } from 'constants/collection';
export const CollectionIcon = styled.div`
width: 200px;
margin: 10px;
height: 240px;
padding: 4px;
color: black;
border-width: 4px;
border-radius: 34px;
outline: none;
`;
import DialogBoxBase from 'components/DialogBox/base';
import DialogTitleWithCloseButton from 'components/DialogBox/titleWithCloseButton';
import { DialogContent } from '@mui/material';
import { FlexWrapper } from 'components/Container';
import { CollectionSelectorTile } from 'components/Collections/styledComponents';
import AllCollectionCard from 'components/Collections/AllCollections/CollectionCard';
export interface CollectionSelectorAttributes {
callback: (collection: Collection) => void;
@ -29,83 +25,80 @@ export type SetCollectionSelectorAttributes = React.Dispatch<
React.SetStateAction<CollectionSelectorAttributes>
>;
const CollectionCard = styled(Card)`
display: flex;
flex-direction: column;
height: 221px;
`;
interface Props {
show: boolean;
onHide: (closeBtnClick?: boolean) => void;
collectionsAndTheirLatestFile: CollectionAndItsLatestFile[];
open: boolean;
onClose: (closeBtnClick?: boolean) => void;
attributes: CollectionSelectorAttributes;
collections: Collection[];
collectionSummaries: CollectionSummaries;
}
function CollectionSelector({
attributes,
collectionsAndTheirLatestFile,
collectionSummaries,
collections,
...props
}: Props) {
const [collectionToShow, setCollectionToShow] = useState<
CollectionAndItsLatestFile[]
CollectionSummary[]
>([]);
useEffect(() => {
if (!attributes || !props.show) {
if (!attributes || !props.open) {
return;
}
const user: User = getData(LS_KEYS.USER);
const personalCollectionsOtherThanFrom =
collectionsAndTheirLatestFile?.filter(
(item) =>
item.collection.id !== attributes.fromCollection &&
item.collection.owner.id === user?.id &&
item.collection.type !== CollectionType.favorites
);
const personalCollectionsOtherThanFrom = [
...collectionSummaries.values(),
]?.filter(
({ collectionAttributes }) =>
collectionAttributes.id !== attributes.fromCollection &&
collectionAttributes.ownerID === user?.id &&
collectionAttributes.type !== CollectionType.favorites &&
collectionAttributes.type !== CollectionType.system
);
if (personalCollectionsOtherThanFrom.length === 0) {
props.onHide();
props.onClose();
attributes.showNextModal();
} else {
setCollectionToShow(personalCollectionsOtherThanFrom);
}
}, [props.show]);
}, [props.open]);
if (!attributes) {
return <Modal />;
return <></>;
}
const CollectionIcons: JSX.Element[] = collectionToShow?.map((item) => (
<CollectionIcon
key={item.collection.id}
onClick={() => {
attributes.callback(item.collection);
props.onHide();
}}>
<CollectionCard>
<PreviewCard file={item.file} forcedEnable />
<Card.Text className="text-center">
{item.collection.name}
</Card.Text>
</CollectionCard>
</CollectionIcon>
));
const handleCollectionClick = (collectionID: number) => {
const collection = collections.find((c) => c.id === collectionID);
attributes.callback(collection);
props.onClose();
};
return (
<Modal
{...props}
size="xl"
centered
contentClassName="plan-selector-modal-content">
<Modal.Header closeButton onHide={() => props.onHide(true)}>
<Modal.Title>{attributes.title}</Modal.Title>
</Modal.Header>
<Modal.Body
style={{
display: 'flex',
flexWrap: 'wrap',
<DialogBoxBase {...props} maxWidth="md">
<DialogTitleWithCloseButton onClose={() => props.onClose(true)}>
{attributes.title}
</DialogTitleWithCloseButton>
<DialogContent
sx={{
'&&&': {
px: 0,
},
}}>
<AddCollectionButton showNextModal={attributes.showNextModal} />
{CollectionIcons}
</Modal.Body>
</Modal>
<FlexWrapper style={{ flexWrap: 'wrap' }}>
<AddCollectionButton
showNextModal={attributes.showNextModal}
/>
{collectionToShow.map((collectionSummary) => (
<AllCollectionCard
collectionTile={CollectionSelectorTile}
onCollectionClick={handleCollectionClick}
collectionSummary={collectionSummary}
key={collectionSummary.collectionAttributes.id}
/>
))}
</FlexWrapper>
</DialogContent>
</DialogBoxBase>
);
}

View file

@ -627,12 +627,11 @@ export default function Gallery() {
attributes={collectionNamerAttributes}
/>
<CollectionSelector
show={collectionSelectorView}
onHide={closeCollectionSelector}
collectionsAndTheirLatestFile={
collectionsAndTheirLatestFile
}
open={collectionSelectorView}
onClose={closeCollectionSelector}
collectionSummaries={collectionSummaries}
attributes={collectionSelectorAttributes}
collections={collections}
/>
<FixCreationTime
isOpen={fixCreationTimeView}