mirror of
https://github.com/strapi/strapi.git
synced 2025-11-17 10:38:30 +00:00
Init UploadList design
Signed-off-by: soupette <cyril.lpz@gmail.com>
This commit is contained in:
parent
320446412d
commit
3c14b0a046
@ -1,18 +1,13 @@
|
|||||||
import React, { useReducer } from 'react';
|
import React, { useReducer } from 'react';
|
||||||
// import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import {
|
import { HeaderNavWrapper, ModalBody, ModalForm } from 'strapi-helper-plugin';
|
||||||
HeaderModalTitle,
|
|
||||||
HeaderNavWrapper,
|
|
||||||
ModalBody,
|
|
||||||
ModalForm,
|
|
||||||
} from 'strapi-helper-plugin';
|
|
||||||
import ModalNav from '../ModalNav';
|
import ModalNav from '../ModalNav';
|
||||||
import NavLink from '../NavLink';
|
import NavLink from '../NavLink';
|
||||||
import InputFile from '../InputFile';
|
import InputFile from '../InputFile';
|
||||||
import init from './init';
|
import init from './init';
|
||||||
import reducer, { initialState } from './reducer';
|
import reducer, { initialState } from './reducer';
|
||||||
|
|
||||||
const UploadForm = () => {
|
const UploadForm = ({ addFilesToUpload }) => {
|
||||||
const [reducerState, dispatch] = useReducer(reducer, initialState, init);
|
const [reducerState, dispatch] = useReducer(reducer, initialState, init);
|
||||||
const { to } = reducerState.toJS();
|
const { to } = reducerState.toJS();
|
||||||
const links = ['computer', 'url'];
|
const links = ['computer', 'url'];
|
||||||
@ -27,33 +22,31 @@ const UploadForm = () => {
|
|||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<HeaderNavWrapper>
|
<HeaderNavWrapper>
|
||||||
<HeaderModalTitle>
|
<div className="settings-tabs" style={{ left: 30 }}>
|
||||||
<div className="settings-tabs" style={{ left: 30 }}>
|
<ModalNav>
|
||||||
<ModalNav>
|
{links.map(link => {
|
||||||
{links.map(link => {
|
const isActive = link === to;
|
||||||
const isActive = link === to;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<NavLink
|
<NavLink
|
||||||
key={link}
|
key={link}
|
||||||
to={link}
|
to={link}
|
||||||
isActive={isActive}
|
isActive={isActive}
|
||||||
isDisabled={link === 'url'}
|
isDisabled={link === 'url'}
|
||||||
onClick={handleGoTo}
|
onClick={handleGoTo}
|
||||||
/>
|
/>
|
||||||
);
|
);
|
||||||
})}
|
})}
|
||||||
</ModalNav>
|
</ModalNav>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
</HeaderModalTitle>
|
|
||||||
</HeaderNavWrapper>
|
</HeaderNavWrapper>
|
||||||
<ModalForm>
|
<ModalForm>
|
||||||
<ModalBody style={{ paddingTop: 35, paddingBottom: 18 }}>
|
<ModalBody style={{ paddingTop: 35, paddingBottom: 18 }}>
|
||||||
<div className="container-fluid">
|
<div className="container-fluid">
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col-12">
|
<div className="col-12">
|
||||||
{to === 'computer' && <InputFile />}
|
{to === 'computer' && <InputFile onChange={addFilesToUpload} />}
|
||||||
{to === 'url' && <div>COMING SOON</div>}
|
{to === 'url' && <div>COMING SOON</div>}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -64,4 +57,12 @@ const UploadForm = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
UploadForm.defaultProps = {
|
||||||
|
addFilesToUpload: () => {},
|
||||||
|
};
|
||||||
|
|
||||||
|
UploadForm.propTypes = {
|
||||||
|
addFilesToUpload: PropTypes.func,
|
||||||
|
};
|
||||||
|
|
||||||
export default UploadForm;
|
export default UploadForm;
|
||||||
|
|||||||
@ -0,0 +1,17 @@
|
|||||||
|
import styled from 'styled-components';
|
||||||
|
import { HeaderNavWrapper } from 'strapi-helper-plugin';
|
||||||
|
|
||||||
|
const Wrapper = styled(HeaderNavWrapper)`
|
||||||
|
padding-top: 27px;
|
||||||
|
font-size: 12px;
|
||||||
|
|
||||||
|
.assets-selected {
|
||||||
|
padding-top: 7px;
|
||||||
|
line-height: 18px;
|
||||||
|
}
|
||||||
|
.infos {
|
||||||
|
color: #9ea7b8;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
export default Wrapper;
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import { Button } from '@buffetjs/core';
|
||||||
|
import HeaderWrapper from './HeaderWrapper';
|
||||||
|
|
||||||
|
const UploadList = ({ filesToUpload }) => {
|
||||||
|
console.log(filesToUpload);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<HeaderWrapper>
|
||||||
|
<div>
|
||||||
|
<div className="assets-selected">
|
||||||
|
<span>4 selected assets</span>
|
||||||
|
</div>
|
||||||
|
<div className="infos">
|
||||||
|
<span>
|
||||||
|
Manage the assets before adding them to the Media Library
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<Button type="button" color="primary">
|
||||||
|
Add More assets
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</HeaderWrapper>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
UploadList.defaultProps = {
|
||||||
|
filesToUpload: [],
|
||||||
|
};
|
||||||
|
|
||||||
|
UploadList.propTypes = {
|
||||||
|
filesToUpload: PropTypes.array,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default UploadList;
|
||||||
@ -16,9 +16,17 @@ import reducer, { initialState } from './reducer';
|
|||||||
const ModalStepper = ({ isOpen, onToggle }) => {
|
const ModalStepper = ({ isOpen, onToggle }) => {
|
||||||
const { formatMessage } = useGlobalContext();
|
const { formatMessage } = useGlobalContext();
|
||||||
const [reducerState, dispatch] = useReducer(reducer, initialState, init);
|
const [reducerState, dispatch] = useReducer(reducer, initialState, init);
|
||||||
const { currentStep } = reducerState.toJS();
|
const { currentStep, filesToUpload } = reducerState.toJS();
|
||||||
const currentStepObject = stepper[currentStep];
|
const { Component, headerTradId, next, prev } = stepper[currentStep];
|
||||||
const { Component } = currentStepObject;
|
|
||||||
|
const addFilesToUpload = ({ target: { value } }) => {
|
||||||
|
dispatch({
|
||||||
|
type: 'ADD_FILES_TO_UPLOAD',
|
||||||
|
filesToUpload: value,
|
||||||
|
});
|
||||||
|
|
||||||
|
goTo(next);
|
||||||
|
};
|
||||||
|
|
||||||
const handleClosed = () => {
|
const handleClosed = () => {
|
||||||
dispatch({
|
dispatch({
|
||||||
@ -26,6 +34,19 @@ const ModalStepper = ({ isOpen, onToggle }) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// FIXME: when back button needed
|
||||||
|
// eslint-disable-next-line no-unused-vars
|
||||||
|
const goBack = () => {
|
||||||
|
goTo(prev);
|
||||||
|
};
|
||||||
|
|
||||||
|
const goTo = to => {
|
||||||
|
dispatch({
|
||||||
|
type: 'GO_TO',
|
||||||
|
to,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Modal
|
<Modal
|
||||||
isOpen={isOpen}
|
isOpen={isOpen}
|
||||||
@ -37,12 +58,17 @@ const ModalStepper = ({ isOpen, onToggle }) => {
|
|||||||
<HeaderModal>
|
<HeaderModal>
|
||||||
<section>
|
<section>
|
||||||
<HeaderModalTitle>
|
<HeaderModalTitle>
|
||||||
<FormattedMessage id={currentStepObject.headerTradId} />
|
<FormattedMessage id={headerTradId} />
|
||||||
</HeaderModalTitle>
|
</HeaderModalTitle>
|
||||||
</section>
|
</section>
|
||||||
</HeaderModal>
|
</HeaderModal>
|
||||||
{/* body */}
|
{/* body of the modal */}
|
||||||
{Component && <Component />}
|
{Component && (
|
||||||
|
<Component
|
||||||
|
addFilesToUpload={addFilesToUpload}
|
||||||
|
filesToUpload={filesToUpload}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
|
||||||
<ModalFooter>
|
<ModalFooter>
|
||||||
<section>
|
<section>
|
||||||
|
|||||||
@ -1,11 +1,26 @@
|
|||||||
import { fromJS } from 'immutable';
|
import { fromJS } from 'immutable';
|
||||||
|
|
||||||
const initialState = fromJS({
|
const initialState = fromJS({
|
||||||
currentStep: 'browse',
|
// currentStep: 'browse',
|
||||||
|
currentStep: 'upload',
|
||||||
|
filesToUpload: [],
|
||||||
});
|
});
|
||||||
|
|
||||||
const reducer = (state, action) => {
|
const reducer = (state, action) => {
|
||||||
switch (action.type) {
|
switch (action.type) {
|
||||||
|
case 'ADD_FILES_TO_UPLOAD':
|
||||||
|
return state
|
||||||
|
.update('filesToUpload', list =>
|
||||||
|
list.concat(
|
||||||
|
Object.keys(action.filesToUpload).reduce(
|
||||||
|
(acc, current) => [...acc, action.filesToUpload[current]],
|
||||||
|
[]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
.update('currentStep', () => action.nextStep);
|
||||||
|
case 'GO_TO':
|
||||||
|
return state.update('currentStep', () => action.to);
|
||||||
case 'RESET_PROPS':
|
case 'RESET_PROPS':
|
||||||
return initialState;
|
return initialState;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@ -1,25 +1,28 @@
|
|||||||
import UploadForm from '../../../components/UploadForm';
|
import UploadForm from '../../../components/UploadForm';
|
||||||
|
import UploadList from '../../../components/UploadList';
|
||||||
import getTrad from '../../../utils/getTrad';
|
import getTrad from '../../../utils/getTrad';
|
||||||
|
|
||||||
const stepper = {
|
const stepper = {
|
||||||
browse: {
|
browse: {
|
||||||
|
Component: UploadForm,
|
||||||
|
generateFooter: () => [],
|
||||||
|
headerTradId: getTrad('modal.header.browse'),
|
||||||
prev: null,
|
prev: null,
|
||||||
next: 'upload',
|
next: 'upload',
|
||||||
Component: UploadForm,
|
|
||||||
headerTradId: getTrad('modal.header.browse'),
|
|
||||||
generateFooter: () => [],
|
|
||||||
},
|
},
|
||||||
upload: {
|
upload: {
|
||||||
prev: 'browse',
|
Component: UploadList,
|
||||||
next: null,
|
headerTradId: getTrad('modal.header.select-files'),
|
||||||
Component: null,
|
|
||||||
generateFooter: () => [],
|
generateFooter: () => [],
|
||||||
|
next: null,
|
||||||
|
prev: 'browse',
|
||||||
},
|
},
|
||||||
'edit-new': {
|
'edit-new': {
|
||||||
prev: 'upload',
|
|
||||||
next: null,
|
|
||||||
Component: null,
|
Component: null,
|
||||||
|
headerTradId: 'coming soon',
|
||||||
generateFooter: () => [],
|
generateFooter: () => [],
|
||||||
|
next: null,
|
||||||
|
prev: 'upload',
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -9,6 +9,7 @@
|
|||||||
"list.assets-empty.title": "There is no asset yet",
|
"list.assets-empty.title": "There is no asset yet",
|
||||||
"list.assets-empty.subtitle": "Add a first one to the list.",
|
"list.assets-empty.subtitle": "Add a first one to the list.",
|
||||||
"modal.header.browse": "Upload assets",
|
"modal.header.browse": "Upload assets",
|
||||||
|
"modal.header.select-files": "Selected files",
|
||||||
"modal.nav.computer": "from computer",
|
"modal.nav.computer": "from computer",
|
||||||
"modal.nav.url": "from url",
|
"modal.nav.url": "from url",
|
||||||
"plugin.name": "Media Library",
|
"plugin.name": "Media Library",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user