Skip to content
Snippets Groups Projects
Commit 2bc0305b authored by Tom Robinson's avatar Tom Robinson
Browse files

Initial parameter reordering impl

parent 7496e078
Branches
Tags
No related merge requests found
......@@ -243,6 +243,7 @@ export default class Dashboard extends Component {
editingParameter={editingParameter}
setEditingParameter={this.props.setEditingParameter}
setParameterName={this.props.setParameterName}
setParameterIndex={this.props.setParameterIndex}
setParameterDefaultValue={this.props.setParameterDefaultValue}
removeParameter={this.props.removeParameter}
setParameterValue={this.props.setParameterValue}
......
......@@ -107,6 +107,7 @@ export const REMOVE_PARAMETER = "metabase/dashboard/REMOVE_PARAMETER";
export const SET_PARAMETER_MAPPING = "metabase/dashboard/SET_PARAMETER_MAPPING";
export const SET_PARAMETER_NAME = "metabase/dashboard/SET_PARAMETER_NAME";
export const SET_PARAMETER_VALUE = "metabase/dashboard/SET_PARAMETER_VALUE";
export const SET_PARAMETER_INDEX = "metabase/dashboard/SET_PARAMETER_INDEX";
export const SET_PARAMETER_DEFAULT_VALUE =
"metabase/dashboard/SET_PARAMETER_DEFAULT_VALUE";
......@@ -729,6 +730,28 @@ export const setParameterDefaultValue = createThunkAction(
},
);
export const setParameterIndex = createThunkAction(
SET_PARAMETER_INDEX,
(parameterId, index) => (dispatch, getState) => {
const dashboard = getDashboard(getState());
const parameterIndex = _.findIndex(
dashboard.parameters,
p => p.id === parameterId,
);
if (parameterIndex >= 0) {
const parameters = dashboard.parameters.slice();
parameters.splice(index, 0, parameters.splice(parameterIndex, 1)[0]);
dispatch(
setDashboardAttributes({
id: dashboard.id,
attributes: { parameters },
}),
);
}
return { id: parameterId, index };
},
);
export const setParameterValue = createThunkAction(
SET_PARAMETER_VALUE,
(parameterId, value) => (dispatch, getState) => {
......
......@@ -2,7 +2,7 @@
import React, { Component } from "react";
import ParameterWidget from "./ParameterWidget.jsx";
import StaticParameterWidget from "./ParameterWidget.jsx";
import querystring from "querystring";
import cx from "classnames";
......@@ -98,6 +98,11 @@ export default class Parameters extends Component {
}
}
handleSortEnd = ({ oldIndex, newIndex }) => {
const { parameters, setParameterIndex } = this.props;
setParameterIndex(parameters[oldIndex].id, newIndex);
};
render() {
const {
className,
......@@ -110,6 +115,7 @@ export default class Parameters extends Component {
setParameterName,
setParameterValue,
setParameterDefaultValue,
setParameterIndex,
removeParameter,
vertical,
commitImmediately,
......@@ -117,19 +123,32 @@ export default class Parameters extends Component {
const parameters = this._parametersWithValues();
let ParameterWidget;
let ParameterWidgetList;
if (isEditing) {
ParameterWidget = SortableParameterWidget;
ParameterWidgetList = SortableParameterWidgetList;
} else {
ParameterWidget = StaticParameterWidget;
ParameterWidgetList = StaticParameterWidgetList;
}
return (
<div
<ParameterWidgetList
className={cx(
className,
"flex align-end flex-wrap",
vertical ? "flex-column" : "flex-row",
{ mt1: isQB },
)}
axis="x"
onSortEnd={this.handleSortEnd}
>
{parameters.map(parameter => (
{parameters.map((parameter, index) => (
<ParameterWidget
className={vertical ? "mb2" : null}
key={parameter.id}
index={index}
className={vertical ? "mb2" : null}
isEditing={isEditing}
isFullscreen={isFullscreen}
isNightMode={isNightMode}
......@@ -152,7 +171,21 @@ export default class Parameters extends Component {
commitImmediately={commitImmediately}
/>
))}
</div>
</ParameterWidgetList>
);
}
}
import {
SortableContainer,
SortableElement,
arrayMove,
} from "react-sortable-hoc";
const StaticParameterWidgetList = ({ children, ...props }) => {
return <div {...props}>{children}</div>;
};
const SortableParameterWidget = SortableElement(StaticParameterWidget);
const SortableParameterWidgetList = SortableContainer(
StaticParameterWidgetList,
);
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment