aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormadelinegr <monika_hedman@brown.edu>2019-06-18 18:24:51 -0400
committermadelinegr <monika_hedman@brown.edu>2019-06-18 18:24:51 -0400
commitf3f76fc25a9e39d4c08618fb601b5e66ce62e235 (patch)
treea68fc930a8827c06805435e67aa8bf716fb9fb8a /src
parent8b4bb0e1cc0ebec92403f163937f821403f970c5 (diff)
end of day 6/18
Diffstat (limited to 'src')
-rw-r--r--src/client/views/search/CheckBox.scss19
-rw-r--r--src/client/views/search/CheckBox.tsx58
2 files changed, 69 insertions, 8 deletions
diff --git a/src/client/views/search/CheckBox.scss b/src/client/views/search/CheckBox.scss
index 8eee9176b..f7652d830 100644
--- a/src/client/views/search/CheckBox.scss
+++ b/src/client/views/search/CheckBox.scss
@@ -1,8 +1,15 @@
-@import "../globalCssVariables";
+@import "../globalCssVariables";
.checkbox {
display: flex;
+ .outer {
+ display: flex;
+ position: relative;
+ justify-content: center;
+ align-items: center;
+ }
+
.check-box {
z-index: 900;
position: relative;
@@ -15,13 +22,20 @@
border-width: 2px;
}
+ .check-container {
+ width: 40px;
+ height: 40px;
+ position: absolute;
+ z-index: 1000;
+ }
+
.box:hover {
background-color: $intermediate-color;
}
.checkmark {
z-index: 1000;
- position: relative;
+ position: absolute;
fill-opacity: 0;
stroke-width: 4px;
stroke: white;
@@ -31,4 +45,5 @@
.checkbox-title {
text-transform: uppercase;
+ margin-left: 10px;
} \ No newline at end of file
diff --git a/src/client/views/search/CheckBox.tsx b/src/client/views/search/CheckBox.tsx
index 8b5f7d7c1..ace479c70 100644
--- a/src/client/views/search/CheckBox.tsx
+++ b/src/client/views/search/CheckBox.tsx
@@ -2,6 +2,7 @@ import * as React from 'react';
import { observer } from 'mobx-react';
import { observable, action, runInAction } from 'mobx';
import "./CheckBox.scss";
+import * as anime from 'animejs';
interface CheckBoxProps {
originalStatus: boolean;
@@ -11,27 +12,72 @@ interface CheckBoxProps {
@observer
export class CheckBox extends React.Component<CheckBoxProps>{
+ // true = checked, false = unchecked
@observable _status: boolean;
+ @observable uncheckTimeline: anime.AnimeTimelineInstance;
+ @observable checkTimeline: anime.AnimeTimelineInstance;
+ @observable checkRef: any;
+
constructor(props: CheckBoxProps) {
super(props);
-
this._status = this.props.originalStatus;
+ this.checkRef = React.createRef();
+
+ this.checkTimeline = anime.timeline({
+ loop: false,
+ autoplay: false,
+ direction: "normal",
+ });this.uncheckTimeline = anime.timeline({
+ loop: false,
+ autoplay: false,
+ direction: "normal",
+ });
+ }
+
+ componentDidMount = () => {
+ this.uncheckTimeline.add({
+ targets: this.checkRef.current,
+ easing: "easeInOutQuad",
+ duration: 500,
+ opacity: 1 ,
+ });
+ this.checkTimeline.add({
+ targets: this.checkRef.current,
+ easing: "easeInOutQuad",
+ duration: 500,
+ strokeDashoffset: [anime.setDashoffset, 0],
+ opacity: 1
+ });
}
+ @action.bound
onClick = () => {
- this._status = !this._status;
this.props.updateStatus(this._status);
+
+ if(this._status){
+ this.uncheckTimeline.play();
+ this.uncheckTimeline.restart();
+ }
+ else{
+ this.checkTimeline.play();
+ this.checkTimeline.restart();
+
+ }
+ this._status = !this._status;
}
render() {
return (
- <div className="checkbox">
- <div className="check-box">
- <svg viewBox="10 10 20 20">
- <path className="checkmark" d="M14.1 27.2l7.1 7.2 16.7-16.8" />
+ <div className="checkbox" onClick = {this.onClick}>
+ <div className = "outer">
+ <div className="check-container">
+ <svg viewBox="0 12 40 40">
+ <path ref = {this.checkRef} className="checkmark" d="M14.1 27.2l7.1 7.2 16.7-18" />
</svg>
</div>
+ <div className="check-box"/>
+ </div>
<div className="checkbox-title">{this.props.title}</div>
</div>
)