Make Multiselect functional

This commit is contained in:
Nathan Barber
2021-04-07 12:15:23 -04:00
parent 752d6305fd
commit c3fc549bd6
4 changed files with 54 additions and 68 deletions

File diff suppressed because one or more lines are too long

View File

@@ -25,7 +25,6 @@ const CreateGroup = (props) => {
id="group-name"
placeholder="group name..."
onChange={(e) => {
console.log(e.target.value);
setGroupName(e.target.value);
}}
></input>

View File

@@ -1,69 +1,56 @@
import React, { Component } from "react";
import React, { useState } from "react";
import "./multi-select.css";
import PropTypes from "prop-types";
export default class Multiselect extends Component {
static get propTypes() {
return {
value: PropTypes.array,
onChange: PropTypes.func,
options: PropTypes.array,
};
}
const Multiselect = (props) => {
var { onChange, options, value } = props;
constructor(props) {
super(props);
this.state = {
selected: props.value,
};
}
var [selected, setSelected] = useState(value);
render() {
var { onChange, options, value } = this.props;
if (!options) return null;
if (!options) return null;
return (
<div className="multi-container">
<div>
{this.state.selected.map((e, i) => (
return (
<div className="multi-container">
<div>
{selected.map((e, i) => (
<div
key={"selected" + i}
className="item selected"
onClick={() => {
let updated_selection = selected
.slice(0, i)
.concat(selected.slice(i + 1));
onChange(updated_selection, options);
setSelected(updated_selection);
}}
>
{e}
</div>
))}
{options.map((e, i) =>
selected.includes(e) ? undefined : (
<div
key={"selected" + i}
className="item selected"
key={"unselected" + i}
className="item unselected"
onClick={() => {
let updated_selection = this.state.selected
.slice(0, i)
.concat(this.state.selected.slice(i + 1));
let updated_selection = selected.concat([e]);
onChange(updated_selection, options);
this.setState(
Object.assign({}, this.state, { selected: updated_selection })
);
setSelected(updated_selection);
}}
>
{e}
</div>
))}
{options.map((e, i) =>
this.state.selected.includes(e) ? undefined : (
<div
key={"unselected" + i}
className="item unselected"
onClick={() => {
let updated_selection = this.state.selected.concat([e]);
onChange(updated_selection, options);
this.setState(
Object.assign({}, this.state, {
selected: updated_selection,
})
);
}}
>
{e}
</div>
)
)}
</div>
)
)}
</div>
);
}
}
</div>
);
};
Multiselect.propTypes = {
value: PropTypes.array,
onChange: PropTypes.func,
options: PropTypes.array,
};
export default Multiselect;

File diff suppressed because one or more lines are too long