notablemind / downloadbutton

A small component for downloading javascript generated files
http://notablemind.github.io/downloadbutton/
33 stars 7 forks source link

View this page rendered at notablemind.github.io/downloadbutton

screenshot

DownloadButton is a simple component for letting the user download a javascript-generated file. It was extracted from Notablemind.

The styling is due to materializecss, and does not come with the DownloadButton component. You are free to style the component however you wish.

Demo

// @demobox
function makeFile() {
  // do some calculations
  return {
    mime: 'text/plain',
    filename: 'myexportedfile.txt',
    contents: 'all of the exports',
  }
}

<DownloadButton
  // these classes come from materializecss
  className='waves-effect waves-light btn' 
  genFile={makeFile}/>

For more demos, see the demo page.

Node Start

npm install --save downloadbutton
var DownloadButton = require('downloadbutton')

// use it somewhere!

If you're not using browserify, you'll need to use the precompiled version, as the source is written using jsx and es6 syntax.

var DownloadButton = require('downloadbutton/es5')

// use it

API

Props

view demo

If you generate the file asynchronously, you need to set async to true, and use the next section.

Name Type Description
fileData fileData If passed in, genFile will be ignored, and this file will be served.
genFile fn () -> fileData Synchronously generate the file data. See below for a description of the fileData type
downloadTitle string or react element, or fn (fileData) -> string / react element The text shown on the button. If a function, it will be passed the fileData (if it has been passed in as props). Default: "Download"

You must pass in either fileData or genFile.

Props (async=true)

view demo

If fileData is passed in as a prop, the async prop is ignored, and the component will use the synchronous behavior.

Name Type Description
async bool Set to true if genFile is an async function. Default: false.
genFile fn (done: fn (fileData)) genFile is an async function that receives the callback as its only argument. The callback must be called with a fileData object.
generateTitle string or react element The text shown initially. Default: "Generate file"
loadingTitle string or react element The text shown while the file is being generated. Default: "Loading..."
downloadTitle string or react element, or fn (fileData) -> string / react element The text shown once the file has been generated. If a function, it will be passed the generated fileData. Default: "Download"

The fileData type

{
  mime: str,
  filename: str,
  content: str
}

Example:

{
  mime: "application/json",
  filename: "generated.json",
  content: '{"hello": "world"}'
}