Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

make tasks in task properties widget collapsible #2502

Merged
merged 2 commits into from
Dec 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/components/EnhancedMap/PropertyList/PropertyList.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,16 @@

return (
<tr key={key} className="property">
<td className={classNames("name", {"mr-border-none mr-links-green-lighter mr-pr-3": darkMode})}>{link}</td>
<td className={classNames("value", {"mr-border-none mr-pb-1": darkMode})}>{value}</td>
<td className={classNames("name", {"mr-border-none mr-break-words mr-links-green-lighter mr-pr-3": darkMode})}>{link}</td>
<td className={classNames("value", {"mr-border-none mr-break-words mr-pb-1": darkMode})}>{value}</td>

Check warning on line 63 in src/components/EnhancedMap/PropertyList/PropertyList.jsx

View check run for this annotation

Codecov / codecov/patch

src/components/EnhancedMap/PropertyList/PropertyList.jsx#L62-L63

Added lines #L62 - L63 were not covered by tests
</tr>
)
}))

return (
<div className="feature-properties mr-ml-4" style={{ maxHeight: "300px", overflow: "auto" }}>
{!props.hideHeader && header}
<table className={classNames("property-list", {"mr-bg-transparent mr-text-white": darkMode, "table": !darkMode})}>
<table className={classNames("property-list", {"mr-bg-transparent mr-text-white": darkMode, "table": !darkMode})} style={{ width: "100%", tableLayout: "fixed" }}>

Check warning on line 71 in src/components/EnhancedMap/PropertyList/PropertyList.jsx

View check run for this annotation

Codecov / codecov/patch

src/components/EnhancedMap/PropertyList/PropertyList.jsx#L71

Added line #L71 was not covered by tests
<tbody>{rows}</tbody>
</table>
</div>
Expand Down
10 changes: 10 additions & 0 deletions src/components/Widgets/TaskPropertiesWidget/Messages.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,14 @@ export default defineMessages({
id: "Widgets.TaskPropertiesWidget.task.label",
defaultMessage: "Task {taskId}",
},

expandAll: {
id: "Widgets.TaskPropertiesWidget.expandAll",
defaultMessage: "Expand All",
},

collapseAll: {
id: "Widgets.TaskPropertiesWidget.collapseAll",
defaultMessage: "Collapse All",
},
})
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Component } from 'react'
import React, { useState } from 'react'
import { FormattedMessage } from 'react-intl'
import _get from 'lodash/get'
import _map from 'lodash/map'
Expand All @@ -8,6 +8,7 @@
import AsMappableTask from '../../../interactions/Task/AsMappableTask'
import QuickWidget from '../../QuickWidget/QuickWidget'
import messages from './Messages'
import './TaskPropertiesWidget.scss'

const descriptor = {
widgetKey: 'TaskPropertiesWidget',
Expand All @@ -19,45 +20,59 @@
defaultHeight: 6,
}

export default class TaskPropertiesWidget extends Component {
render() {
const taskList = _get(this.props.taskBundle, 'tasks') || [this.props.task]
const propertyLists = _map(taskList, (task) => {
const featurePropertiesList = AsMappableTask(task).osmFeatureProperties(this.props.osmElements)

return (
<div key={task.id} className="mr-mb-6">
<div className="mr-text-yellow">
<FormattedMessage {...messages.taskLabel} values={{taskId: task.id}}/>
</div>
{
featurePropertiesList.map((feature, index) => {
return (
<div key={index}>
<div className="mr-text-yellow mr-ml-2">
{feature.properties?.id || feature.geometry?.type}
</div>
<PropertyList featureProperties={feature.properties} hideHeader
lightMode={false} {...this.props} />
</div>
)
})
}
</div>
)
})
const TaskPropertiesWidget = (props) => {
const taskList = _get(props.taskBundle, 'tasks') || [props.task];
const [collapsed, setCollapsed] = useState();

Check warning on line 25 in src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx

View check run for this annotation

Codecov / codecov/patch

src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx#L24-L25

Added lines #L24 - L25 were not covered by tests

const toggleCollapsed = () => {
setCollapsed(!collapsed);
}

Check warning on line 29 in src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx

View check run for this annotation

Codecov / codecov/patch

src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx#L27-L29

Added lines #L27 - L29 were not covered by tests

const propertyLists = _map(taskList, (task) => {
const featurePropertiesList = AsMappableTask(task).osmFeatureProperties(props.osmElements);

Check warning on line 32 in src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx

View check run for this annotation

Codecov / codecov/patch

src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx#L31-L32

Added lines #L31 - L32 were not covered by tests

return (
<QuickWidget
{...this.props}
className="task-properties-widget"
widgetTitle={<FormattedMessage {...messages.title} />}
>
{propertyLists}
</QuickWidget>
<div key={task.id} className="mr-mb-4 border-b mr-border-gray-300 pb-2">

Check warning on line 35 in src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx

View check run for this annotation

Codecov / codecov/patch

src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx#L35

Added line #L35 was not covered by tests
{
featurePropertiesList.map((feature, index) => {
const featureIndex = `${task.id}-${index}`;
return (
<details key={featureIndex} open={!collapsed} className="mr-pb-2 mr-border-b mr-bg-gray-100">
<summary className="mr-text-yellow mr-cursor-pointer mr-p-1 mr-rounded mr-flex mr-justify-between mr-items-center">
<div className="mr-flex mr-items-center">
<div className="mr-text-yellow mr-font-bold mr-text-lg">
<FormattedMessage {...messages.taskLabel} values={{taskId: task.id}}/>

Check warning on line 44 in src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx

View check run for this annotation

Codecov / codecov/patch

src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx#L37-L44

Added lines #L37 - L44 were not covered by tests
</div>
<span className="mr-text-grey-lighter mr-mx-2 mr-mt-1">
{feature.properties?.id || feature.geometry?.type}

Check warning on line 47 in src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx

View check run for this annotation

Codecov / codecov/patch

src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx#L46-L47

Added lines #L46 - L47 were not covered by tests
</span>
</div>
</summary>
<PropertyList featureProperties={feature.properties} hideHeader lightMode={false} {...props} />

Check warning on line 51 in src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx

View check run for this annotation

Codecov / codecov/patch

src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx#L51

Added line #L51 was not covered by tests
</details>
)
})

Check warning on line 54 in src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx

View check run for this annotation

Codecov / codecov/patch

src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx#L54

Added line #L54 was not covered by tests
}
</div>
)
}
})

Check warning on line 58 in src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx

View check run for this annotation

Codecov / codecov/patch

src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx#L58

Added line #L58 was not covered by tests

return (
<QuickWidget
{...props}
className="task-properties-widget"
widgetTitle={<FormattedMessage {...messages.title} />}
rightHeaderControls={
<div onClick={toggleCollapsed} className="mr-cursor-pointer mr-button mr-button--small mr-text-sm mr-ml-4">
{collapsed ? <FormattedMessage {...messages.expandAll} /> : <FormattedMessage {...messages.collapseAll} />}

Check warning on line 67 in src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx

View check run for this annotation

Codecov / codecov/patch

src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx#L60-L67

Added lines #L60 - L67 were not covered by tests
</div>
}
>
{propertyLists}

Check warning on line 71 in src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx

View check run for this annotation

Codecov / codecov/patch

src/components/Widgets/TaskPropertiesWidget/TaskPropertiesWidget.jsx#L71

Added line #L71 was not covered by tests
</QuickWidget>
)
}

registerWidgetType(TaskPropertiesWidget, descriptor)

export default TaskPropertiesWidget;
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
details {
overflow: hidden;
transition: max-height 0.3s ease;
max-height: 100px;
}

details[open] {
max-height: 500px;
}

details > summary {
position: relative;
padding-left: 1.5em;
cursor: pointer;
transition: transform 0.2s ease;
}

details > summary::before {
content: '▶';
position: absolute;
right: 10px;
color: #FFFD86;
font-size: 1.2em;
transition: transform 0.2s ease;
}

details[open] > summary::before {
transform: rotate(90deg);
}
Loading