Skip to content

Commit

Permalink
Add copy to management interface
Browse files Browse the repository at this point in the history
  • Loading branch information
jochenklar committed May 7, 2023
1 parent 85678a0 commit 37b2612
Show file tree
Hide file tree
Showing 25 changed files with 134 additions and 171 deletions.
22 changes: 14 additions & 8 deletions rdmo/management/assets/js/components/common/Buttons.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,29 @@ const BackButton = () => (
</button>
)

const SaveButton = ({ element, onClick, back }) => {

const className = classNames({
'element-button btn btn-xs': true,
'btn-primary': back,
'btn-default': !back
})
const SaveButton = ({ element, elementAction, onClick, back }) => {
let text, className = 'element-button btn btn-xs'
if (elementAction == 'create') {
text = back ? gettext('Create') : gettext('Create and continue editing')
className += back ? ' btn-success' : ' btn-default'
} else if (elementAction == 'copy') {
text = back ? gettext('Copy') : gettext('Copy and continue editing')
className += back ? ' btn-info' : ' btn-default'
} else {
text = back ? gettext('Save') : gettext('Save and continue editing')
className += back ? ' btn-primary' : ' btn-default'
}

return (
<button className={className} onClick={event => onClick(back)}>
{back ? gettext('Save') : gettext('Save and continue editing')}
{text}
</button>
)
}

SaveButton.propTypes = {
element: PropTypes.object.isRequired,
elementAction: PropTypes.string,
onClick: PropTypes.func.isRequired,
back: PropTypes.bool
}
Expand Down
115 changes: 21 additions & 94 deletions rdmo/management/assets/js/components/common/Links.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,8 @@ import isEmpty from 'lodash/isEmpty'
import Link from 'rdmo/core/assets/js/components/Link'

const EditLink = ({ element, verboseName, onClick }) => {
const handleClick = (event) => {
event.preventDefault()
onClick()
}

const title = interpolate(gettext('Edit %s'), [verboseName])

return (
<a href="" className="element-link fa fa-pencil"
title={title}
onClick={event => handleClick(event)}>
</a>
)
return <Link className="element-link fa fa-pencil" title={title} onClick={onClick} />
}

EditLink.propTypes = {
Expand All @@ -28,19 +17,8 @@ EditLink.propTypes = {
}

const AddLink = ({ element, verboseName, onClick }) => {
const handleClick = (event) => {
event.preventDefault()
onClick()
}

const title = interpolate(gettext('Add %s'), [verboseName])

return (
<a href="" className="element-link fa fa-plus"
title={title}
onClick={event => handleClick(event)}>
</a>
)
return <Link className="element-link fa fa-plus" title={title} onClick={onClick} />
}

AddLink.propTypes = {
Expand All @@ -50,19 +28,8 @@ AddLink.propTypes = {
}

const AddSquareLink = ({ element, verboseName, onClick }) => {
const handleClick = (event) => {
event.preventDefault()
onClick()
}

const title = interpolate(gettext('Add %s'), [verboseName])

return (
<a href="" className="element-link fa fa-plus-square"
title={title}
onClick={event => handleClick(event)}>
</a>
)
return <Link className="element-link fa fa-plus-square" title={title} onClick={onClick} />
}

AddSquareLink.propTypes = {
Expand All @@ -71,12 +38,18 @@ AddSquareLink.propTypes = {
onClick: PropTypes.func.isRequired
}

const AvailableLink = ({ element, verboseName, onClick }) => {
const handleClick = (event) => {
event.preventDefault()
onClick()
}
const CopyLink = ({ element, verboseName, onClick }) => {
const title = interpolate(gettext('Copy %s'), [verboseName])
return <Link className="element-link fa fa-copy" title={title} onClick={onClick} />
}

CopyLink.propTypes = {
element: PropTypes.object.isRequired,
verboseName: PropTypes.string.isRequired,
onClick: PropTypes.func.isRequired
}

const AvailableLink = ({ element, verboseName, onClick }) => {
const className = classNames({
'element-link fa': true,
'fa-toggle-on': element.available,
Expand All @@ -88,12 +61,7 @@ const AvailableLink = ({ element, verboseName, onClick }) => {
if (element.available) title = interpolate(gettext('Make %s unavaiable'), [verboseName])
if (element.locked) title = gettext('Locked')

return (
<a href="" className={className}
title={title}
onClick={event => handleClick(event)}>
</a>
)
return <Link className={className} title={title} onClick={onClick} />
}

AvailableLink.propTypes = {
Expand All @@ -103,11 +71,6 @@ AvailableLink.propTypes = {
}

const LockedLink = ({ element, verboseName, onClick }) => {
const handleClick = (event) => {
event.preventDefault()
onClick()
}

const className = classNames({
'element-link fa': true,
'fa-lock': element.locked,
Expand All @@ -117,12 +80,7 @@ const LockedLink = ({ element, verboseName, onClick }) => {
const title = element.locked ? interpolate(gettext('Unlock %s'), [verboseName])
: interpolate(gettext('Lock %s'), [verboseName])

return (
<a href="" className={className}
title={title}
onClick={event => handleClick(event)}>
</a>
)
return <Link className={className} title={title} onClick={onClick} />
}

LockedLink.propTypes = {
Expand All @@ -133,7 +91,6 @@ LockedLink.propTypes = {

const ExportLink = ({ element, verboseName }) => {
const title = interpolate(gettext('Export %s as XML'), [verboseName])

return (
<a href={element.xml_url} className="element-link fa fa-download"
title={title} target="_blank">
Expand All @@ -146,21 +103,9 @@ ExportLink.propTypes = {
verboseName: PropTypes.string.isRequired
}


const NestedLink = ({ element, verboseName, onClick }) => {
const handleClick = (event) => {
event.preventDefault()
onClick()
}

const title = gettext('View nested')

return (
<a href="" className="element-link fa fa-align-right flip"
title={title}
onClick={event => handleClick(event)}>
</a>
)
return <Link className="element-link fa fa-align-right flip" title={title} onClick={onClick} />
}

NestedLink.propTypes = {
Expand All @@ -169,13 +114,7 @@ NestedLink.propTypes = {
onClick: PropTypes.func.isRequired
}


const ExtendLink = ({ extend, onClick }) => {
const handleClick = (event) => {
event.preventDefault()
onClick()
}

const className = classNames({
'element-link fa': true,
'fa-chevron-up': extend,
Expand All @@ -185,12 +124,7 @@ const ExtendLink = ({ extend, onClick }) => {
const title = extend ? gettext('Show less')
: gettext('Show more')

return (
<a href="" className={className}
title={title}
onClick={event => handleClick(event)}>
</a>
)
return <Link className={className} title={title} onClick={onClick} />
}

ExtendLink.propTypes = {
Expand All @@ -199,15 +133,10 @@ ExtendLink.propTypes = {
}

const CodeLink = ({ className, uri, onClick }) => {
const handleClick = (event) => {
event.preventDefault()
onClick()
}

return (
<a href="" onClick={event => handleClick(event)}>
<Link onClick={onClick}>
<code className={className}>{uri}</code>
</a>
</Link>
)
}

Expand All @@ -217,7 +146,6 @@ CodeLink.propTypes = {
onClick: PropTypes.func.isRequired
}


const ErrorLink = ({ element, onClick }) => {
return (
!isEmpty(element.errors) &&
Expand Down Expand Up @@ -260,6 +188,5 @@ ShowLink.propTypes = {
onClick: PropTypes.func.isRequired
}


export { EditLink, AddLink, AddSquareLink, AvailableLink, LockedLink,
export { EditLink, CopyLink, AddLink, AddSquareLink, AvailableLink, LockedLink,
NestedLink, ExportLink, ExtendLink, CodeLink, ErrorLink, WarningLink, ShowLink }
10 changes: 5 additions & 5 deletions rdmo/management/assets/js/components/edit/EditAttribute.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import useDeleteModal from '../../hooks/useDeleteModal'

const EditAttribute = ({ config, attribute, elements, elementActions }) => {

const { parent, attributes, conditions, pages, questionsets, questions, tasks } = elements
const { elementAction, parent, attributes, conditions, pages, questionsets, questions, tasks } = elements

const editAttribute = (attribute) => elementActions.fetchElement('attributes', attribute)
const updateAttribute = (key, value) => elementActions.updateElement(attribute, {[key]: value})
Expand All @@ -33,8 +33,8 @@ const EditAttribute = ({ config, attribute, elements, elementActions }) => {
<div className="panel-heading">
<div className="pull-right">
<BackButton />
<SaveButton element={attribute} onClick={storeAttribute} />
<SaveButton element={attribute} onClick={storeAttribute} back={true}/>
<SaveButton element={attribute} elementAction={elementAction} onClick={storeAttribute} />
<SaveButton element={attribute} elementAction={elementAction} onClick={storeAttribute} back={true}/>
</div>
{
attribute.id ? <>
Expand Down Expand Up @@ -104,8 +104,8 @@ const EditAttribute = ({ config, attribute, elements, elementActions }) => {
<div className="panel-footer">
<div className="pull-right">
<BackButton />
<SaveButton element={attribute} onClick={storeAttribute} />
<SaveButton element={attribute} onClick={storeAttribute} back={true}/>
<SaveButton element={attribute} elementAction={elementAction} onClick={storeAttribute} />
<SaveButton element={attribute} elementAction={elementAction} onClick={storeAttribute} back={true}/>
</div>
<DeleteButton element={attribute} onClick={openDeleteModal} />
</div>
Expand Down
10 changes: 5 additions & 5 deletions rdmo/management/assets/js/components/edit/EditCatalog.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import useDeleteModal from '../../hooks/useDeleteModal'

const EditCatalog = ({ config, catalog, elements, elementActions }) => {

const { sites, groups, sections } = elements
const { elementAction, sites, groups, sections } = elements

const updateCatalog = (key, value) => elementActions.updateElement(catalog, {[key]: value})
const storeCatalog = (back) => elementActions.storeElement('catalogs', catalog, back)
Expand All @@ -38,8 +38,8 @@ const EditCatalog = ({ config, catalog, elements, elementActions }) => {
<div className="panel-heading">
<div className="pull-right">
<BackButton />
<SaveButton element={catalog} onClick={storeCatalog} />
<SaveButton element={catalog} onClick={storeCatalog} back={true}/>
<SaveButton element={catalog} elementAction={elementAction} onClick={storeCatalog} />
<SaveButton element={catalog} elementAction={elementAction} onClick={storeCatalog} back={true}/>
</div>
{
catalog.id ? <>
Expand Down Expand Up @@ -106,8 +106,8 @@ const EditCatalog = ({ config, catalog, elements, elementActions }) => {
<div className="panel-footer">
<div className="pull-right">
<BackButton />
<SaveButton element={catalog} onClick={storeCatalog} />
<SaveButton element={catalog} onClick={storeCatalog} back={true} />
<SaveButton element={catalog} elementAction={elementAction} onClick={storeCatalog} />
<SaveButton element={catalog} elementAction={elementAction} onClick={storeCatalog} back={true} />
</div>
<DeleteButton element={catalog} onClick={openDeleteModal} />
</div>
Expand Down
11 changes: 6 additions & 5 deletions rdmo/management/assets/js/components/edit/EditCondition.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,8 @@ import useDeleteModal from '../../hooks/useDeleteModal'

const EditCondition = ({ config, condition, elements, elementActions }) => {

const { parent, relations, attributes, optionsets, options, pages, questionsets, questions, tasks } = elements
const { elementAction, parent, relations, attributes, optionsets, options,
pages, questionsets, questions, tasks } = elements

const updateCondition = (key, value) => elementActions.updateElement(condition, {[key]: value})
const storeCondition = (back) => elementActions.storeElement('conditions', condition, back)
Expand All @@ -37,8 +38,8 @@ const EditCondition = ({ config, condition, elements, elementActions }) => {
<div className="panel-heading">
<div className="pull-right">
<BackButton />
<SaveButton element={condition} onClick={storeCondition} />
<SaveButton element={condition} onClick={storeCondition} back={true}/>
<SaveButton element={condition} elementAction={elementAction} onClick={storeCondition} />
<SaveButton element={condition} elementAction={elementAction} onClick={storeCondition} back={true}/>
</div>
{
condition.id ? <>
Expand Down Expand Up @@ -130,8 +131,8 @@ const EditCondition = ({ config, condition, elements, elementActions }) => {
<div className="panel-footer">
<div className="pull-right">
<BackButton />
<SaveButton element={condition} onClick={storeCondition} />
<SaveButton element={condition} onClick={storeCondition} back={true}/>
<SaveButton element={condition} elementAction={elementAction} onClick={storeCondition} />
<SaveButton element={condition} elementAction={elementAction} onClick={storeCondition} back={true}/>
</div>
<DeleteButton element={condition} onClick={openDeleteModal} />
</div>
Expand Down
10 changes: 5 additions & 5 deletions rdmo/management/assets/js/components/edit/EditOption.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ import useDeleteModal from '../../hooks/useDeleteModal'

const EditOption = ({ config, option, elements, elementActions }) => {

const { parent, optionsets, conditions } = elements
const { elementAction, parent, optionsets, conditions } = elements

const optionConditions = conditions.filter(e => option.conditions.includes(e.id))

Expand All @@ -33,8 +33,8 @@ const EditOption = ({ config, option, elements, elementActions }) => {
<div className="panel-heading">
<div className="pull-right">
<BackButton />
<SaveButton element={option} onClick={storeOption} />
<SaveButton element={option} onClick={storeOption} back={true}/>
<SaveButton element={option} elementAction={elementAction} onClick={storeOption} />
<SaveButton element={option} elementAction={elementAction} onClick={storeOption} back={true}/>
</div>
{
option.id ? <>
Expand Down Expand Up @@ -103,8 +103,8 @@ const EditOption = ({ config, option, elements, elementActions }) => {
<div className="panel-footer">
<div className="pull-right">
<BackButton />
<SaveButton element={option} onClick={storeOption} />
<SaveButton element={option} onClick={storeOption} back={true}/>
<SaveButton element={option} elementAction={elementAction} onClick={storeOption} />
<SaveButton element={option} elementAction={elementAction} onClick={storeOption} back={true}/>
</div>
<DeleteButton element={option} onClick={openDeleteModal} />
</div>
Expand Down

0 comments on commit 37b2612

Please sign in to comment.