npm:dromo-uploader-react | Skypack
Usage no npm install needed!
<script type="module">
import dromoUploaderReact from 'https://cdn.skypack.dev/dromo-uploader-react';
</script>
README
dromo

You can view a live demo here
Install
To get add Dromo to your own project:
npm install --save dromo-uploader-react
To get the example running locally:
- Clone this repo
npm install
to install all req'd dependencies
npm run build
to build the package
cd example
to enter into the example folder
npm install
(again) to install all req'd dependencies
npm start
to start the example
Usage
Check out our developer documentation here
import React, { useState } from "react";
import { isoCountries } from "./DemoData";
import "./styles.css";
import DromoUploader from "dromo-uploader-react";
import { IColumnHookInput, IColumnHookOutput, IDeveloperField, IDeveloperSettings, IRowHookInput, IRowHookOutput } from "../../dist/interfaces";
export default function App() {
const [results, setResults] = useState("");
const fields: IDeveloperField[] = [
// required field
{
label: "Geography",
key: "geography",
alternateMatches: ["region"],
description: "Region of the sale",
validators: [{ validate: "required" }]
},
{
label: "Country",
key: "country"
},
// unique
{
label: "Order Number",
key: "orderNumber",
validators: [{ validate: "unique" }]
},
{
label: "Priority",
key: "priority"
},
// boolean
{
label: "Sold Offline?",
key: "soldOffline",
type: "checkbox",
validators: [
{
validate: "regex_match",
regex: "^$|^(1|0|yes|no|true|false|on|off)
quot;,
regexOptions: { ignoreCase: true }
}
]
},
// options
{
label: "Type",
key: "type",
type: "select",
selectOptions: [
{ label: "Food", value: "food" },
{ label: "Clothing", value: "clothing" },
{ label: "Household Items", value: "household_items" },
{ label: "Produce", value: "produce" }
],
validators: [{ validate: "required" }]
},
// simple regex
{
label: "Amount Sold",
key: "amountSold",
validators: [{ validate: "regex_match", regex: "^[0-9]*quot; }]
},
{
label: "Profit",
key: "profit"
}
];
const settings: IDeveloperSettings = {
importIdentifier: "Sales",
displayEncoding: true,
allowInvalidSubmit: true,
backendSync: false,
manualInputDisabled: false,
manualInputOnly: false,
allowCustomFields: true,
maxRecords: null,
developmentMode: true
};
const user = {
id: "1",
name: "Jane Doe",
email: "jane@dromo.io",
companyId: "Dromo",
companyName: "12345"
};
const rowHooks = [(record: IRowHookInput) => {
const newRecord: IRowHookOutput = record;
if (record.index < 10) {
if (newRecord.row.geography) {
newRecord.row.geography.info = [{
message: "Prepend 0 to value",
level: "error"
}];
newRecord.row.geography.value = "0" + newRecord.row.geography.value;
}
}
return newRecord;
}];
const columnHooks = [{
fieldName: "country",
callback: (values: Array<IColumnHookInput>) => {
const newValues = new Array<IColumnHookOutput>();
values.forEach((row) => {
// Update row if ISO country code exists for the
// existing country name
if (isoCountries[row.value]) {
const newRow: IColumnHookOutput = {
index: row.index,
value: isoCountries[row.value],
info: [{
message: "Update to use ISO country code",
level: "info"
}]
};
newValues.push(newRow);
}
});
return newValues;
}
}];
return (
<div>
<div>
<DromoUploader
licenseKey="TEST_KEY"
style={{ padding: 15, border: 0 }}
settings={settings}
fields={fields}
user={user}
rowHooks={rowHooks}
columnHooks={columnHooks}
onResults={(data: any, metadata: IResultMetadata) => setResults(JSON.stringify(data, null, 2))}
>
Launch Dromo
</DromoUploader>
</div>
<textarea readOnly id="response" value={results} />
</div>
);
}