feat: added new painting functionality with mac device restriction

This commit is contained in:
kangfenmao 2024-10-31 14:35:05 +08:00
parent 837d91aa61
commit 2f420c0fcd
2 changed files with 44 additions and 8 deletions

View File

@ -1,4 +1,4 @@
import { DeleteOutlined } from '@ant-design/icons' import { DeleteOutlined, PlusOutlined } from '@ant-design/icons'
import DragableList from '@renderer/components/DragableList' import DragableList from '@renderer/components/DragableList'
import { usePaintings } from '@renderer/hooks/usePaintings' import { usePaintings } from '@renderer/hooks/usePaintings'
import FileManager from '@renderer/services/FileManager' import FileManager from '@renderer/services/FileManager'
@ -14,15 +14,22 @@ interface PaintingsListProps {
selectedPainting: Painting selectedPainting: Painting
onSelectPainting: (painting: Painting) => void onSelectPainting: (painting: Painting) => void
onDeletePainting: (painting: Painting) => void onDeletePainting: (painting: Painting) => void
onNewPainting: () => void
} }
const PaintingsList: FC<PaintingsListProps> = ({ paintings, selectedPainting, onSelectPainting, onDeletePainting }) => { const PaintingsList: FC<PaintingsListProps> = ({
paintings,
selectedPainting,
onSelectPainting,
onDeletePainting,
onNewPainting
}) => {
const { t } = useTranslation() const { t } = useTranslation()
const [dragging, setDragging] = useState(false) const [dragging, setDragging] = useState(false)
const { updatePaintings } = usePaintings() const { updatePaintings } = usePaintings()
return ( return (
<Container style={{ paddingBottom: dragging ? 30 : 0 }}> <Container style={{ paddingBottom: dragging ? 80 : 0 }}>
<DragableList <DragableList
list={paintings} list={paintings}
onUpdate={updatePaintings} onUpdate={updatePaintings}
@ -47,6 +54,11 @@ const PaintingsList: FC<PaintingsListProps> = ({ paintings, selectedPainting, on
</CanvasWrapper> </CanvasWrapper>
)} )}
</DragableList> </DragableList>
{!dragging && (
<NewPaintingButton onClick={onNewPainting}>
<PlusOutlined />
</NewPaintingButton>
)}
</Container> </Container>
) )
} }
@ -116,4 +128,24 @@ const DeleteButton = styled.div.attrs({ className: 'delete-button' })`
justify-content: center; justify-content: center;
` `
const NewPaintingButton = styled.div`
width: 80px;
height: 80px;
margin-top: -10px;
background-color: var(--color-background-soft);
cursor: pointer;
transition: background-color 0.2s ease;
border: 1px dashed var(--color-border);
display: flex;
align-items: center;
justify-content: center;
color: var(--color-text-2);
&:hover {
background-color: var(--color-background-mute);
border-color: var(--color-primary);
color: var(--color-primary);
}
`
export default PaintingsList export default PaintingsList

View File

@ -9,6 +9,7 @@ import { Navbar, NavbarCenter, NavbarRight } from '@renderer/components/app/Navb
import { VStack } from '@renderer/components/Layout' import { VStack } from '@renderer/components/Layout'
import Scrollbar from '@renderer/components/Scrollbar' import Scrollbar from '@renderer/components/Scrollbar'
import TranslateButton from '@renderer/components/TranslateButton' import TranslateButton from '@renderer/components/TranslateButton'
import { isMac } from '@renderer/config/constant'
import { TEXT_TO_IMAGES_MODELS } from '@renderer/config/models' import { TEXT_TO_IMAGES_MODELS } from '@renderer/config/models'
import { useTheme } from '@renderer/context/ThemeProvider' import { useTheme } from '@renderer/context/ThemeProvider'
import { usePaintings } from '@renderer/hooks/usePaintings' import { usePaintings } from '@renderer/hooks/usePaintings'
@ -252,11 +253,13 @@ const PaintingsPage: FC = () => {
<Container> <Container>
<Navbar> <Navbar>
<NavbarCenter style={{ borderRight: 'none' }}>{t('images.title')}</NavbarCenter> <NavbarCenter style={{ borderRight: 'none' }}>{t('images.title')}</NavbarCenter>
<NavbarRight style={{ justifyContent: 'flex-end' }}> {isMac && (
<Button size="small" className="nodrag" icon={<PlusOutlined />} onClick={() => setPainting(addPainting())}> <NavbarRight style={{ justifyContent: 'flex-end' }}>
{t('images.button.new.image')} <Button size="small" className="nodrag" icon={<PlusOutlined />} onClick={() => setPainting(addPainting())}>
</Button> {t('images.button.new.image')}
</NavbarRight> </Button>
</NavbarRight>
)}
</Navbar> </Navbar>
<ContentContainer id="content-container"> <ContentContainer id="content-container">
<LeftContainer> <LeftContainer>
@ -391,6 +394,7 @@ const PaintingsPage: FC = () => {
selectedPainting={painting} selectedPainting={painting}
onSelectPainting={onSelectPainting} onSelectPainting={onSelectPainting}
onDeletePainting={onDeletePainting} onDeletePainting={onDeletePainting}
onNewPainting={() => setPainting(addPainting())}
/> />
</ContentContainer> </ContentContainer>
</Container> </Container>