Skip to content
Snippets Groups Projects
File.js 2.23 KiB
Newer Older
import React from 'react'
import styled from 'styled-components'
const Icon = styled.div`
  background: #ddd;
  height: 100px;
  padding: 5px;
  position: relative;
  transition: transform 0.3s ease;
  width: 70px;
`

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 Filename = styled.div`
  color: #aaa;
  font-size: 1em;
  font-style: italic;
  margin: 0.7em;
  text-align: center;
  width: 20ch;
  word-break: break-all; /* to divide into lines */
`

const Root = styled.div`
  align-items: center;
  display: inline-flex;
  flex-direction: column;
  margin-bottom: 2em;
  margin-right: 3em;
  position: relative;
  width: 20ch;

  &::before,
  &::after {
    cursor: pointer;
    transition: transform 0.3s;
  }

  &::after {
    background: var(--color-danger);
    border: 1px solid white;
    color: white;
    content: 'remove';
    cursor: pointer;
    font-size: 0.8em;
    left: 70%;
    letter-spacing: 0.5px;
    padding: 0.2em 0.4em;
    position: absolute;
    text-transform: uppercase;
    top: 4em;
    transform: scaleX(0);
    transform-origin: 0 0;
    z-index: 2;
  }

  &::before {
    background: var(--color-primary);
    border: 1px solid white;
    color: white;
    content: 'replace';
    cursor: pointer;
    font-size: 0.8em;
    left: 70%;
    letter-spacing: 0.5px;
    padding: 0.2em 0.4em;
    position: absolute;
    text-transform: uppercase;
    top: 6em;
    transform: scaleX(0);
    transform-origin: 0 0;
    z-index: 3;
  }

  &:hover {
    ${Extension} {
      background: white;
      border-right: 2px solid #ddd;
      color: var(--color-primary);
    }

    ${Icon} {
      background: var(--color-primary);
      transform: skewY(6deg) rotate(-6deg);
    }

    &::after,
    &::before {
      transform: scaleX(1);
    }
  }
`

const getFileExtension = ({ name }) => name.replace(/^.+\./, '')
const File = ({ value }) => (
  <Root>
    <Icon>
      <Extension>{getFileExtension(value)}</Extension>
    </Icon>
Yannis Barlas's avatar
Yannis Barlas committed
      <a download={value.name} href={value.url}>
        {value.name}
      </a>