From 9bc81f7e8c45d319417a7799643b6454890c5dc8 Mon Sep 17 00:00:00 2001
From: Samuel Galson <samgalson@gmail.com>
Date: Wed, 31 Jan 2018 10:42:53 +0000
Subject: [PATCH] feat(ui): convert UploadingFile to a styled component

---
 packages/ui/src/atoms/UploadingFile.js        | 136 +++++++++++++++---
 .../ui/src/atoms/UploadingFile.local.scss     | 113 ---------------
 2 files changed, 119 insertions(+), 130 deletions(-)
 delete mode 100644 packages/ui/src/atoms/UploadingFile.local.scss

diff --git a/packages/ui/src/atoms/UploadingFile.js b/packages/ui/src/atoms/UploadingFile.js
index b5f6b6ad6..8274a3c67 100644
--- a/packages/ui/src/atoms/UploadingFile.js
+++ b/packages/ui/src/atoms/UploadingFile.js
@@ -1,27 +1,129 @@
 import React from 'react'
-import classes from './UploadingFile.local.scss'
+import styled from 'styled-components'
 
 // TODO: cancel button
 
+const Root = styled.div`
+  align-items: center;
+  display: inline-flex;
+  flex-direction: column;
+  margin-bottom: 2em;
+  margin-right: 3em;
+  position: relative;
+  width: 20ch;
+`
+
+const ErrorWrapper = styled.div`
+  background: var(--color-danger);
+  border: 2px solid white;
+  color: white;
+  font-size: 0.8em;
+  letter-spacing: 0.01em;
+  opacity: 1;
+  padding: 0.3em 0.5em;
+  position: absolute;
+  top: 25%;
+  z-index: 4;
+`
+
+const Icon = styled.div`
+  background: #ddd;
+  height: 100px;
+  margin: 5px;
+  opacity: 0.5;
+  position: relative;
+  width: 70px;
+`
+
+const Progress = styled.div`
+  background-image:
+    linear-gradient(
+      var(--color-primary-light) 50%,
+      var(--color-primary) 75%,
+      to top
+    );
+  bottom: 0;
+  content: '';
+  display: block;
+  left: 0;
+  opacity: 1;
+  position: absolute;
+  right: 0;
+  transform-origin: 0 0;
+
+  &::after {
+    /* we can use a data attribute for the numbering below */
+    bottom: 2px;
+    color: white;
+    content: '${props => props.percent}%';
+    display: block;
+    position: absolute;
+    right: 2px;
+  }
+`
+
+const Filename = styled.div`
+  color: gray;
+  font-size: 90%;
+  font-style: italic;
+  margin: 5px;
+  max-width: 20ch;
+`
+const Extension = styled.div`
+  background: #888;
+  color: white;
+  font-size: 12px;
+  left: 20px;
+  padding: 2px;
+  position: absolute;
+  right: 0;
+  text-align: center;
+  text-transform: uppercase;
+  top: 20px;
+`
 const extension = ({ name }) => name.replace(/^.+\./, '')
 
 const UploadingFile = ({ file, error, progress }) => (
-  <div className={classes.root}>
-    {!!error && <div className={classes.error}>{error}</div>}
-
-    <div className={classes.icon}>
-      {!!progress && (
-        <div
-          className={classes.progress}
-          style={{ top: `${progress * 100}%` }}
-        />
-      )}
-
-      <div className={classes.extension}>{extension(file)}</div>
-    </div>
-
-    <div className={classes.name}>{file.name}</div>
-  </div>
+  <Root>
+    {!!error && <ErrorWrapper>{error}</ErrorWrapper>}
+    <Icon>
+      {!!progress && <Progress percent={progress * 100} />}
+      <Extension>{extension(file)}</Extension>
+    </Icon>
+    <Filename>{file.name}</Filename>
+  </Root>
 )
 
 export default UploadingFile
+
+// clock experiment, on hold.
+// const Progress = styled.div`
+//    opacity: 1;
+//    background: var(--color-primary);
+//    position: absolute;
+//    bottom: 10%;
+//    right: 10%;
+//    content: '';
+//    width: 3px;
+//    height: 1em;
+//    display: block;
+//    // margin-left: 30%;
+//    transform-origin: 0 0;
+//    animation: rotate 1s infinite ease-in-out ;
+//    background-image:
+//    &:after {
+//      content: "uploading";
+//      display: block;
+//      position: absolute;
+//      width: 1em;
+//      height:  1em;
+//    }
+//
+//  @keyframes rotate {
+//    0% {
+//      transform: rotate(0)
+//    }
+//    100% {
+//      transform: rotate(360deg);
+//    }
+// `
diff --git a/packages/ui/src/atoms/UploadingFile.local.scss b/packages/ui/src/atoms/UploadingFile.local.scss
deleted file mode 100644
index 895148f99..000000000
--- a/packages/ui/src/atoms/UploadingFile.local.scss
+++ /dev/null
@@ -1,113 +0,0 @@
-.root {
-  align-items: center;
-  display: inline-flex;
-  flex-direction: column;
-  margin-bottom: 2em;
-  margin-right: 3em;
-  position: relative;
-  width: 20ch;
-}
-
-.icon {
-  background: #ddd;
-  height: 100px;
-  margin: 5px;
-  opacity: 0.5;
-  position: relative;
-  width: 70px;
-}
-
-.progress {
-  background-image:
-    linear-gradient(
-      var(--color-primary-light) 50%,
-      var(--color-primary) 75%,
-      to top
-    );
-  bottom: 0;
-  content: '';
-  display: block;
-  left: 0;
-  opacity: 1;
-  position: absolute;
-  right: 0;
-  transform-origin: 0 0;
-
-  &::after {
-    /* we can use a data attribute for the numbering below */
-    bottom: 2px;
-    color: white;
-    content: "00%";
-    display: block;
-    position: absolute;
-    right: 2px;
-  }
-}
-
-.error {
-  background: var(--color-danger);
-  border: 2px solid white;
-  color: white;
-  font-size: 0.8em;
-  letter-spacing: 0.01em;
-  opacity: 1;
-  padding: 0.3em 0.5em;
-  position: absolute;
-  top: 25%;
-  z-index: 4;
-}
-
-.extension {
-  background: #888;
-  color: white;
-  font-size: 12px;
-  left: 20px;
-  padding: 2px;
-  position: absolute;
-  right: 0;
-  text-align: center;
-  text-transform: uppercase;
-  top: 20px;
-}
-
-.name {
-  color: gray;
-  font-size: 90%;
-  font-style: italic;
-  margin: 5px;
-  max-width: 20ch;
-}
-
-// clock experiment, on hold.
-//.progress {
-//    opacity: 1;
-//    background: var(--color-primary);
-//    position: absolute;
-//    bottom: 10%;
-//    right: 10%;
-//    content: '';
-//    width: 3px;
-//    height: 1em;
-//    display: block;
-//    // margin-left: 30%;
-//    transform-origin: 0 0;
-//    animation: rotate 1s infinite ease-in-out ;
-//    background-image:
-//    &:after {
-//      content: "uploading";
-//      display: block;
-//      position: absolute;
-//      width: 1em;
-//      height:  1em;
-//    }
-//}
-//
-//
-//@keyframes rotate {
-//  0% {
-//    transform: rotate(0)
-//  }
-//  100% {
-//    transform: rotate(360deg);
-//  }
-//}
-- 
GitLab