dromo-uploader-react 1.2.32 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -20,8 +20,6 @@ interface Props {
20
20
  export default class DromoReactUploader extends React.Component<Props> {
21
21
  dromo: any;
22
22
  componentDidMount(): void;
23
- componentWillUnmount(): void;
24
- scriptLoaded: () => void;
25
23
  open: () => void;
26
24
  render(): JSX.Element;
27
25
  }
package/dist/index.js CHANGED
@@ -39,54 +39,54 @@ var DromoReactUploader = /*#__PURE__*/function (_React$Component) {
39
39
 
40
40
  _this = _React$Component.apply(this, arguments) || this;
41
41
 
42
- _this.scriptLoaded = function () {
43
- _this.dromo = new DromoUploader(_this.props.licenseKey, _this.props.fields, _this.props.settings, _this.props.user);
44
-
45
- if (_this.props.rowHooks) {
46
- _this.props.rowHooks.forEach(function (hook) {
47
- return _this.dromo.registerRowHook(hook);
48
- });
49
- }
50
-
51
- if (_this.props.bulkRowHooks) {
52
- _this.props.bulkRowHooks.forEach(function (hook) {
53
- return _this.dromo.registerBulkRowHook(hook);
54
- });
55
- }
56
-
57
- if (_this.props.columnHooks) {
58
- _this.props.columnHooks.forEach(function (hook) {
59
- _this.dromo.registerColumnHook(hook.fieldName, hook.callback);
60
- });
61
- }
62
-
63
- if (_this.props.rowDeleteHooks) {
64
- _this.props.rowDeleteHooks.forEach(function (hook) {
65
- return _this.dromo.registerRowDeleteHook(hook);
66
- });
67
- }
68
-
69
- if (_this.props.beforeFinish) {
70
- _this.dromo.beforeFinish(_this.props.beforeFinish);
71
- }
72
-
73
- if (_this.props.onResults) {
74
- _this.dromo.onResults(_this.props.onResults);
75
- }
76
-
77
- if (_this.props.onCancel) {
78
- _this.dromo.onCancel(_this.props.onCancel);
79
- }
80
-
81
- if (_this.props.stepHooks) {
82
- _this.props.stepHooks.forEach(function (hook) {
83
- _this.dromo.registerStepHook(hook.type, hook.callback);
84
- });
85
- }
86
- };
87
-
88
42
  _this.open = function () {
89
- if (_this.dromo) _this.dromo.open();
43
+ if ('DromoUploader' in window) {
44
+ _this.dromo = new DromoUploader(_this.props.licenseKey, _this.props.fields, _this.props.settings, _this.props.user);
45
+
46
+ if (_this.props.rowHooks) {
47
+ _this.props.rowHooks.forEach(function (hook) {
48
+ return _this.dromo.registerRowHook(hook);
49
+ });
50
+ }
51
+
52
+ if (_this.props.bulkRowHooks) {
53
+ _this.props.bulkRowHooks.forEach(function (hook) {
54
+ return _this.dromo.registerBulkRowHook(hook);
55
+ });
56
+ }
57
+
58
+ if (_this.props.columnHooks) {
59
+ _this.props.columnHooks.forEach(function (hook) {
60
+ _this.dromo.registerColumnHook(hook.fieldName, hook.callback);
61
+ });
62
+ }
63
+
64
+ if (_this.props.rowDeleteHooks) {
65
+ _this.props.rowDeleteHooks.forEach(function (hook) {
66
+ return _this.dromo.registerRowDeleteHook(hook);
67
+ });
68
+ }
69
+
70
+ if (_this.props.beforeFinish) {
71
+ _this.dromo.beforeFinish(_this.props.beforeFinish);
72
+ }
73
+
74
+ if (_this.props.onResults) {
75
+ _this.dromo.onResults(_this.props.onResults);
76
+ }
77
+
78
+ if (_this.props.onCancel) {
79
+ _this.dromo.onCancel(_this.props.onCancel);
80
+ }
81
+
82
+ if (_this.props.stepHooks) {
83
+ _this.props.stepHooks.forEach(function (hook) {
84
+ _this.dromo.registerStepHook(hook.type, hook.callback);
85
+ });
86
+ }
87
+
88
+ _this.dromo.open();
89
+ }
90
90
  };
91
91
 
92
92
  return _this;
@@ -95,7 +95,6 @@ var DromoReactUploader = /*#__PURE__*/function (_React$Component) {
95
95
  var _proto = DromoReactUploader.prototype;
96
96
 
97
97
  _proto.componentDidMount = function componentDidMount() {
98
- window.addEventListener(SCRIPT_LOADED_EVENT, this.scriptLoaded.bind(this));
99
98
  var loadingScript = Array.from(document.getElementsByTagName('script')).find(function (s) {
100
99
  return s.src === SCRIPT_SRC;
101
100
  });
@@ -124,10 +123,6 @@ var DromoReactUploader = /*#__PURE__*/function (_React$Component) {
124
123
  }
125
124
  };
126
125
 
127
- _proto.componentWillUnmount = function componentWillUnmount() {
128
- window.removeEventListener(SCRIPT_LOADED_EVENT, this.scriptLoaded.bind(this));
129
- };
130
-
131
126
  _proto.render = function render() {
132
127
  return React.createElement("button", {
133
128
  style: this.props.style,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/interfaces.ts","../src/index.tsx"],"sourcesContent":["type MaybeAsync<T> = T | Promise<T>;\n\nexport interface IConnectionMethods {\n init: (\n licenseKey: string,\n fields: IDeveloperField[],\n settings: IDeveloperSettings,\n user: IUser,\n appHost?: string\n ) => void;\n setNumRegisteredColHooks: (numColHooks: number) => void;\n setNumRegisteredRowHooks: (numRowHooks: number) => void;\n setNumRegisteredRowDeleteHooks: (numRowDeleteHooks: number) => void;\n addField: (field: IDeveloperField, position?: IPositionSpec) => void;\n updateInfoMessages: (messages: IMessagesForCell[]) => void;\n}\n\nexport type IPublicConnectionMethods = Pick<\n IConnectionMethods,\n \"addField\" | \"updateInfoMessages\"\n>;\n\nexport type IDeveloperFieldType =\n | \"string\"\n | \"checkbox\"\n | \"select\"\n | \"number\"\n | \"date\"\n | \"datetime\"\n | \"time\"\n | \"email\";\n\nexport interface IDeveloperField {\n label: string;\n key: string;\n type?: IDeveloperFieldType | [IDeveloperFieldType, any];\n description?: string;\n alternateMatches?: string[];\n validators?: IValidatorField[];\n selectOptions?: {\n label: string;\n value: string;\n }[];\n invalidValueMessage?: string;\n readOnly?: boolean;\n}\n\ninterface IAbstractValidator<ValidateKey> {\n validate: ValidateKey;\n errorMessage?: string;\n level?: \"info\" | \"warning\" | \"error\";\n}\n\nexport type IRequiredValidator = IAbstractValidator<\"required\">;\n\nexport type IUniqueValidator = IAbstractValidator<\n \"unique\" | \"unique_case_insensitive\"\n>;\n\nexport interface IUniqueWithValidator\n extends IAbstractValidator<\"unique_with\"> {\n uniqueKey: string;\n}\n\nexport interface IRegexValidator\n extends IAbstractValidator<\"regex_match\" | \"regex_exclude\"> {\n regex: string;\n regexOptions?: {\n ignoreCase?: boolean;\n dotAll?: boolean;\n multiline?: boolean;\n unicode?: boolean;\n };\n}\n\nexport interface IRequireWithValidator\n extends IAbstractValidator<\n | \"require_with\"\n | \"require_without\"\n | \"require_with_all\"\n | \"require_without_all\"\n > {\n fields: string[];\n}\n\nexport interface IRequireWithValuesValidator\n extends IAbstractValidator<\n | \"require_with_values\"\n | \"require_without_values\"\n | \"require_with_all_values\"\n | \"require_without_all_values\"\n > {\n fieldValues: { [key: string]: string };\n}\n\nexport type IValidatorField =\n | IRequiredValidator\n | IUniqueValidator\n | IUniqueWithValidator\n | IRegexValidator\n | IRequireWithValidator\n | IRequireWithValuesValidator;\n\nexport interface IDeveloperSettings {\n importIdentifier: string;\n title?: string;\n allowInvalidSubmit?: boolean;\n invalidDataBehavior?: keyof typeof EInvalidDataBehavior;\n backendSync?: boolean;\n backendSyncMode?: keyof typeof EBackendSyncMode;\n manualInputDisabled?: boolean;\n manualInputOnly?: boolean;\n allowCustomFields?: boolean;\n maxRecords?: number | null;\n developmentMode?: boolean;\n displayEncoding?: boolean;\n styleOverrides?: IDeveloperStyleOverrides;\n webhookUrl?: string;\n initialData?: { [key: string]: string }[] | any[][] | null;\n uploadStep?: {\n helpText?: string;\n };\n matchingStep?: {\n helpText?: string;\n headerRowOverride?: number | null;\n fuzzyMatchHeaders?: boolean;\n alwaysMatchSelectFields?: boolean;\n };\n reviewStep?: {\n helpText?: string;\n processingText?: string;\n saveForLater?: boolean;\n };\n autoMapHeaders?: boolean;\n delimiter?: string;\n backendOverride?: {\n url: string;\n type: \"AWS\" | \"AZURE\";\n } | null;\n locale?: TLocaleShorthand;\n templateDownloadFilename?: string;\n browserExcelParsing?: boolean;\n}\n\n// If you update this, also update IDeveloperStylesOverridesStrict\n// in interfaces.tsx\nexport interface IDeveloperStyleOverrides {\n global?: {\n textColor?: string;\n primaryTextColor?: string;\n secondaryTextColor?: string;\n successColor?: string;\n warningColor?: string;\n customFontURL?: string | null;\n customFontFamily?: string | null;\n };\n primaryButton?: {\n borderRadius?: string;\n backgroundColor?: string;\n textColor?: string;\n border?: string;\n hoverBackgroundColor?: string;\n hoverTextColor?: string;\n hoverBorder?: string;\n };\n secondaryButton?: {\n borderRadius?: string;\n backgroundColor?: string;\n textColor?: string;\n border?: string;\n hoverBackgroundColor?: string;\n hoverTextColor?: string;\n hoverBorder?: string;\n };\n tertiaryButton?: {\n borderRadius?: string;\n backgroundColor?: string;\n textColor?: string;\n border?: string;\n hoverBackgroundColor?: string;\n hoverTextColor?: string;\n hoverBorder?: string;\n };\n dropzone?: {\n borderWidth?: number;\n borderRadius?: number;\n borderColor?: string;\n borderStyle?: string;\n color?: string;\n outline?: string;\n };\n helpText?: {\n textColor?: string;\n backgroundColor?: string;\n };\n stepperBar?: {\n completeColor?: string;\n incompleteColor?: string;\n currentColor?: string;\n };\n}\n\nexport interface IUser {\n id: string;\n name?: string;\n email?: string;\n companyId?: string;\n companyName?: string;\n}\n\nexport interface ICellRef {\n rowIndex: number;\n fieldKey: string;\n}\n\nexport interface ITableMessage {\n message: string;\n level: \"info\" | \"warning\" | \"error\";\n}\n\nexport interface IMessagesForCell extends ICellRef {\n messages: ITableMessage[];\n}\n\nexport interface IColumnHook {\n fieldName: string;\n callback: (values: IColumnHookInput[]) => MaybeAsync<IColumnHookOutput[]>;\n}\n\nexport interface IRowHook {\n (data: IRowHookInput, mode: \"init\" | \"update\"): MaybeAsync<IRowHookOutput>;\n}\n\nexport type IBulkRowHook = (\n data: IRowHookInput[],\n mode: \"init\" | \"update\"\n) => IRowHookOutputInternal[] | Promise<IRowHookOutputInternal[]>;\n\nexport interface IRowDeleteHook {\n (data: IRowHookInput): void;\n}\n\nexport interface IColumnHookInput {\n index: number;\n value: any;\n}\n\nexport interface IColumnHookOutput {\n index: number;\n value?: any;\n info?: ITableMessage[];\n}\n\nexport interface IRowHookInput {\n row: {\n [key: string]: {\n value: any;\n resultValue: any;\n info?: ITableMessage[];\n };\n };\n index: number;\n}\n\nexport interface IRowHookOutput {\n row: {\n [key: string]: {\n value?: any;\n info?: ITableMessage[];\n };\n };\n}\n\nexport interface IRowHookOutputInternal extends IRowHookOutput {\n index: number;\n}\n\nexport type IFieldMetadata = Record<\n string,\n {\n fileHeader: string | null;\n fileHeaderIndex: number | null;\n isCustom: boolean;\n }\n>;\n\nexport interface IResultMetadata {\n id: string | null;\n filename: string | null;\n importIdentifier: string;\n user: IUser;\n rowsWithError: number[];\n rawHeaders: string[] | null;\n fields: IFieldMetadata;\n saveForLater?: boolean;\n}\n\nexport type TLocaleShorthand = \"en\" | \"de\" | \"fr\";\n\nexport enum EStepHook {\n UPLOAD_STEP = \"UPLOAD_STEP\",\n REVIEW_STEP = \"REVIEW_STEP\",\n REVIEW_STEP_POST_HOOKS = \"REVIEW_STEP_POST_HOOKS\",\n}\n\nexport interface IUploadStepData {\n filename: string | null;\n dataPreview: any[][];\n}\n\nexport interface IReviewStepData {\n rawHeaders: string[] | null;\n headerMapping: { [header: string]: string | undefined };\n fields: IFieldMetadata;\n}\n\nexport interface IReviewStepPostHooksData {\n headerMapping: { [header: string]: string | undefined };\n fields: IFieldMetadata;\n}\n\nexport interface IStepHook {\n type: keyof typeof EStepHook;\n callback: (\n uploader: IPublicConnectionMethods,\n data: IUploadStepData | IReviewStepData | IReviewStepPostHooksData\n ) => MaybeAsync<void>;\n}\n\nexport type IBeforeFinishCallback = (\n data: Record<string, any>[],\n metadata: IResultMetadata,\n instance: IPublicConnectionMethods\n) => MaybeAsync<IBeforeFinishOutput>;\n\nexport type IBeforeFinishOutput = void | { cancel: true; message: string };\n\nexport enum EInvalidDataBehavior {\n BLOCK_SUBMIT = \"BLOCK_SUBMIT\",\n REMOVE_INVALID_ROWS = \"REMOVE_INVALID_ROWS\",\n INCLUDE_INVALID_ROWS = \"INCLUDE_INVALID_ROWS\",\n}\n\nexport enum EBackendSyncMode {\n DISABLED = \"DISABLED\",\n MAPPINGS_ONLY = \"MAPPINGS_ONLY\",\n FULL_DATA = \"FULL_DATA\",\n}\n\nexport type IPositionSpec = { before: string } | { after: string };\n","import * as React from 'react'\nimport {\n IColumnHookInput,\n IColumnHookOutput,\n IColumnHook,\n IDeveloperField,\n IValidatorField,\n IDeveloperSettings,\n IRowHookInput,\n IRowHookOutput,\n IRowHook,\n IDeveloperStyleOverrides,\n IUser,\n IResultMetadata,\n EStepHook,\n IStepHook,\n IRowDeleteHook,\n IBulkRowHook,\n IBeforeFinishCallback\n} from './interfaces'\n\ninterface Props {\n style?: React.CSSProperties\n className?: string\n licenseKey: string\n user: IUser\n fields: IDeveloperField[]\n settings: IDeveloperSettings\n rowHooks?: IRowHook[]\n bulkRowHooks?: IBulkRowHook[]\n rowDeleteHooks?: IRowDeleteHook[]\n columnHooks?: IColumnHook[]\n stepHooks?: IStepHook[]\n beforeFinish?: IBeforeFinishCallback\n onResults?: (data: any, metadata: IResultMetadata) => void\n onCancel?: () => void\n children: React.ReactNode\n}\n\ndeclare var DromoUploader: any\n\nconst SCRIPT_SRC = 'https://unpkg.com/dromo-uploader-js/dist/DromoUploader.js'\nconst SCRIPT_LOADED_EVENT = 'DROMO_SCRIPT_LOADED'\n\nexport default class DromoReactUploader extends React.Component<Props> {\n dromo: any\n\n componentDidMount() {\n // Add event listener post load to set up Dromo\n window.addEventListener(SCRIPT_LOADED_EVENT, this.scriptLoaded.bind(this))\n\n const loadingScript = Array.from(\n document.getElementsByTagName('script')\n ).find((s) => s.src === SCRIPT_SRC)\n\n // If there is no script tag added to HTML then we add. Prevents multiple\n // adds if there are multiple components\n if (!loadingScript) {\n const script = document.createElement('script')\n script.src = SCRIPT_SRC\n script.async = true\n script.onload = () => {\n const event = new Event(SCRIPT_LOADED_EVENT)\n window.dispatchEvent(event)\n }\n document.body.appendChild(script)\n } else {\n if ('DromoUploader' in window) {\n // If the script has been injected and has been loaded we can call\n // scriptLoaded\n const event = new Event(SCRIPT_LOADED_EVENT)\n window.dispatchEvent(event)\n } else {\n // If the script has been injected but hasn't been loaded, we wait\n // for load\n loadingScript.onload = () => {\n const event = new Event(SCRIPT_LOADED_EVENT)\n window.dispatchEvent(event)\n }\n }\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener(\n SCRIPT_LOADED_EVENT,\n this.scriptLoaded.bind(this)\n )\n }\n\n scriptLoaded = () => {\n this.dromo = new DromoUploader(\n this.props.licenseKey,\n this.props.fields,\n this.props.settings,\n this.props.user\n )\n\n if (this.props.rowHooks) {\n this.props.rowHooks.forEach((hook) => this.dromo.registerRowHook(hook))\n }\n\n if (this.props.bulkRowHooks) {\n this.props.bulkRowHooks.forEach((hook) =>\n this.dromo.registerBulkRowHook(hook)\n )\n }\n\n if (this.props.columnHooks) {\n this.props.columnHooks.forEach((hook) => {\n this.dromo.registerColumnHook(hook.fieldName, hook.callback)\n })\n }\n\n if (this.props.rowDeleteHooks) {\n this.props.rowDeleteHooks.forEach((hook) => {\n return this.dromo.registerRowDeleteHook(hook)\n })\n }\n\n if (this.props.beforeFinish) {\n this.dromo.beforeFinish(this.props.beforeFinish)\n }\n\n if (this.props.onResults) {\n this.dromo.onResults(this.props.onResults)\n }\n\n if (this.props.onCancel) {\n this.dromo.onCancel(this.props.onCancel)\n }\n\n if (this.props.stepHooks) {\n this.props.stepHooks.forEach((hook) => {\n this.dromo.registerStepHook(hook.type, hook.callback)\n })\n }\n }\n\n open = () => {\n if (this.dromo) this.dromo.open()\n }\n\n render() {\n return (\n <button\n style={this.props.style}\n className={this.props.className}\n onClick={this.open}\n >\n {this.props.children}\n </button>\n )\n }\n}\n\nexport {\n IDeveloperField,\n IDeveloperSettings,\n IUser,\n IColumnHookInput,\n IColumnHookOutput,\n IColumnHook,\n IRowHookInput,\n IRowHookOutput,\n IRowHook,\n IValidatorField,\n IDeveloperStyleOverrides,\n IResultMetadata,\n EStepHook,\n IStepHook,\n IRowDeleteHook\n}\n"],"names":["EStepHook","EInvalidDataBehavior","EBackendSyncMode","SCRIPT_SRC","SCRIPT_LOADED_EVENT","DromoReactUploader","dromo","DromoUploader","props","licenseKey","fields","settings","user","rowHooks","forEach","hook","registerRowHook","bulkRowHooks","registerBulkRowHook","columnHooks","registerColumnHook","fieldName","callback","rowDeleteHooks","registerRowDeleteHook","beforeFinish","onResults","onCancel","stepHooks","registerStepHook","type","open","componentDidMount","window","addEventListener","scriptLoaded","bind","loadingScript","Array","from","document","getElementsByTagName","find","s","src","script","createElement","async","onload","event","Event","dispatchEvent","body","appendChild","componentWillUnmount","removeEventListener","render","React","style","className","onClick","children"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/interfaces.ts","../src/index.tsx"],"sourcesContent":["type MaybeAsync<T> = T | Promise<T>;\n\nexport interface IConnectionMethods {\n init: (\n licenseKey: string,\n fields: IDeveloperField[],\n settings: IDeveloperSettings,\n user: IUser,\n appHost?: string\n ) => void;\n initFromSavedSchema: (\n licenseKey: string,\n schemaName: string,\n appHost: string\n ) => void;\n setHeaderRowOverride: (headerRowOverride: number | null) => void;\n setNumRegisteredColHooks: (numColHooks: number) => void;\n setNumRegisteredRowHooks: (numRowHooks: number) => void;\n setNumRegisteredRowDeleteHooks: (numRowDeleteHooks: number) => void;\n setUser: (user: IUser) => void;\n addField: (field: IDeveloperField, position?: IPositionSpec) => void;\n updateInfoMessages: (messages: IMessagesForCell[]) => void;\n}\n\nexport type IPublicConnectionMethods = Pick<\n IConnectionMethods,\n \"addField\" | \"updateInfoMessages\" | \"setHeaderRowOverride\" | \"setUser\"\n>;\n\nexport type IDeveloperFieldType =\n | \"string\"\n | \"checkbox\"\n | \"select\"\n | \"number\"\n | \"date\"\n | \"datetime\"\n | \"time\"\n | \"email\";\n\nexport interface IAbstractDeveloperFieldUntyped {\n label: string;\n key: string;\n type?: never;\n description?: string;\n alternateMatches?: string[];\n validators?: IValidatorField[];\n invalidValueMessage?: string;\n readOnly?: boolean;\n hidden?: boolean;\n}\n\nexport interface IAbstractDeveloperField<\n FieldType extends IDeveloperFieldType,\n FieldOpts = Record<string, never>\n> extends Omit<IAbstractDeveloperFieldUntyped, \"type\"> {\n type: FieldType | [FieldType, FieldOpts];\n}\n\ntype IStringField =\n | IAbstractDeveloperFieldUntyped\n | IAbstractDeveloperField<\"string\">;\n\ntype ICheckboxField = IAbstractDeveloperField<\"checkbox\">;\n\nexport interface ISelectField extends IAbstractDeveloperField<\"select\"> {\n selectOptions: {\n label: string;\n value: string;\n }[];\n}\n\ntype INumberPreset =\n | \"default\"\n | \"percent\"\n | \"percent_0\"\n | \"percent_1\"\n | \"percent_2\"\n | \"percent_3\"\n | \"percent_4\"\n | \"decimal_0\"\n | \"decimal_1\"\n | \"decimal_2\"\n | \"decimal_3\"\n | \"decimal_4\"\n | \"integer\"\n | \"plain\"\n | \"usd\"\n | \"usd_accounting\"\n | \"eur\"\n | \"gbp\";\n\n// copy-pasta'd from numbro.Format\ninterface INumbroFormat {\n output?: \"currency\" | \"percent\" | \"byte\" | \"time\" | \"ordinal\" | \"number\";\n base?: \"decimal\" | \"binary\" | \"general\";\n characteristic?: number;\n prefix?: string;\n postfix?: string;\n forceAverage?: \"trillion\" | \"billion\" | \"million\" | \"thousand\";\n average?: boolean;\n currencyPosition?: \"prefix\" | \"infix\" | \"postfix\";\n currencySymbol?: string;\n totalLength?: number;\n mantissa?: number;\n optionalMantissa?: boolean;\n trimMantissa?: boolean;\n optionalCharacteristic?: boolean;\n thousandSeparated?: boolean;\n abbreviations?: {\n thousand?: string;\n million?: string;\n billion?: string;\n trillion?: string;\n };\n negative?: \"sign\" | \"parenthesis\";\n forceSign?: boolean;\n spaceSeparated?: boolean;\n spaceSeparatedCurrency?: boolean;\n spaceSeparatedAbbreviation?: boolean;\n exponential?: boolean;\n prefixSymbol?: boolean;\n lowPrecision?: boolean;\n roundingFunction?: (num: number) => number;\n}\n\ninterface INumberOpts {\n preset?: INumberPreset;\n round?: number;\n displayFormat?: INumbroFormat;\n outputFormat?: INumbroFormat;\n}\n\ntype INumberField = IAbstractDeveloperField<\n \"number\",\n INumberPreset | INumberOpts\n>;\n\ninterface IDateTimeOpts {\n displayFormat?: string;\n outputFormat?: string;\n locale?: string;\n withSeconds?: boolean;\n}\n\ntype IDateTimeField = IAbstractDeveloperField<\n \"date\" | \"time\" | \"datetime\",\n IDateTimeOpts\n>;\n\ntype IEmailField = IAbstractDeveloperField<\"email\">;\n\nexport type IDeveloperField =\n | IStringField\n | ICheckboxField\n | ISelectField\n | INumberField\n | IDateTimeField\n | IEmailField;\n\ninterface IAbstractValidator<ValidateKey> {\n validate: ValidateKey;\n errorMessage?: string;\n level?: \"info\" | \"warning\" | \"error\";\n}\n\nexport type IRequiredValidator = IAbstractValidator<\"required\">;\n\nexport type IUniqueValidator = IAbstractValidator<\n \"unique\" | \"unique_case_insensitive\"\n>;\n\nexport interface IUniqueWithValidator\n extends IAbstractValidator<\"unique_with\"> {\n uniqueKey: string;\n}\n\nexport interface IRegexValidator\n extends IAbstractValidator<\"regex_match\" | \"regex_exclude\"> {\n regex: string;\n regexOptions?: {\n ignoreCase?: boolean;\n dotAll?: boolean;\n multiline?: boolean;\n unicode?: boolean;\n };\n}\n\nexport interface IRequireWithValidator\n extends IAbstractValidator<\n | \"require_with\"\n | \"require_without\"\n | \"require_with_all\"\n | \"require_without_all\"\n > {\n fields: string[];\n}\n\nexport interface IRequireWithValuesValidator\n extends IAbstractValidator<\n | \"require_with_values\"\n | \"require_without_values\"\n | \"require_with_all_values\"\n | \"require_without_all_values\"\n > {\n fieldValues: { [key: string]: string };\n}\n\nexport type IValidatorField =\n | IRequiredValidator\n | IUniqueValidator\n | IUniqueWithValidator\n | IRegexValidator\n | IRequireWithValidator\n | IRequireWithValuesValidator;\n\nexport interface IDeveloperSettings {\n importIdentifier: string;\n title?: string;\n allowInvalidSubmit?: boolean;\n invalidDataBehavior?: keyof typeof EInvalidDataBehavior;\n backendSync?: boolean;\n backendSyncMode?: keyof typeof EBackendSyncMode;\n manualInputDisabled?: boolean;\n manualInputOnly?: boolean;\n allowCustomFields?: boolean;\n maxRecords?: number | null;\n developmentMode?: boolean;\n displayEncoding?: boolean;\n styleOverrides?: IDeveloperStyleOverrides;\n webhookUrl?: string;\n initialData?: { [key: string]: string }[] | any[][] | null;\n uploadStep?: {\n helpText?: string;\n };\n matchingStep?: {\n helpText?: string;\n headerRowOverride?: number | null;\n fuzzyMatchHeaders?: boolean;\n alwaysMatchSelectFields?: boolean;\n };\n reviewStep?: {\n helpText?: string;\n processingText?: string;\n saveForLater?: boolean;\n };\n autoMapHeaders?: boolean;\n delimiter?: string;\n backendOverride?: {\n url: string;\n type: \"AWS\" | \"AZURE\";\n } | null;\n locale?: TLocaleShorthand;\n templateDownloadFilename?: string;\n browserExcelParsing?: boolean;\n}\n\n// If you update this, also update IDeveloperStylesOverridesStrict\n// in interfaces.tsx\nexport interface IDeveloperStyleOverrides {\n global?: {\n textColor?: string;\n primaryTextColor?: string;\n secondaryTextColor?: string;\n successColor?: string;\n warningColor?: string;\n customFontURL?: string | null;\n customFontFamily?: string | null;\n };\n primaryButton?: {\n borderRadius?: string;\n backgroundColor?: string;\n textColor?: string;\n border?: string;\n hoverBackgroundColor?: string;\n hoverTextColor?: string;\n hoverBorder?: string;\n };\n secondaryButton?: {\n borderRadius?: string;\n backgroundColor?: string;\n textColor?: string;\n border?: string;\n hoverBackgroundColor?: string;\n hoverTextColor?: string;\n hoverBorder?: string;\n };\n tertiaryButton?: {\n borderRadius?: string;\n backgroundColor?: string;\n textColor?: string;\n border?: string;\n hoverBackgroundColor?: string;\n hoverTextColor?: string;\n hoverBorder?: string;\n };\n dropzone?: {\n borderWidth?: number;\n borderRadius?: number;\n borderColor?: string;\n borderStyle?: string;\n color?: string;\n outline?: string;\n };\n helpText?: {\n textColor?: string;\n backgroundColor?: string;\n };\n stepperBar?: {\n completeColor?: string;\n incompleteColor?: string;\n currentColor?: string;\n };\n}\n\nexport interface IUser {\n id: string;\n name?: string;\n email?: string;\n companyId?: string;\n companyName?: string;\n}\n\nexport interface ICellRef {\n rowIndex: number;\n fieldKey: string;\n}\n\nexport interface ITableMessage {\n message: string;\n level: \"info\" | \"warning\" | \"error\";\n}\n\nexport interface IMessagesForCell extends ICellRef {\n messages: ITableMessage[];\n}\n\nexport interface IColumnHook {\n fieldName: string;\n callback: (values: IColumnHookInput[]) => MaybeAsync<IColumnHookOutput[]>;\n}\n\nexport interface IRowHook {\n (data: IRowHookInput, mode: \"init\" | \"update\"): MaybeAsync<IRowHookOutput>;\n}\n\nexport type IBulkRowHook = (\n data: IRowHookInput[],\n mode: \"init\" | \"update\"\n) => IRowHookOutputInternal[] | Promise<IRowHookOutputInternal[]>;\n\nexport interface IRowDeleteHook {\n (data: IRowHookInput): void;\n}\n\nexport interface IColumnHookInput {\n index: number;\n value: any;\n}\n\nexport interface IColumnHookOutput {\n index: number;\n value?: any;\n info?: ITableMessage[];\n}\n\nexport interface IRowHookInput {\n row: {\n [key: string]: {\n value: any;\n resultValue: any;\n info?: ITableMessage[];\n };\n };\n index: number;\n}\n\nexport interface IRowHookOutput {\n row: {\n [key: string]: {\n value?: any;\n info?: ITableMessage[];\n };\n };\n}\n\nexport interface IRowHookOutputInternal extends IRowHookOutput {\n index: number;\n}\n\nexport type IFieldMetadata = Record<\n string,\n {\n fileHeader: string | null;\n fileHeaderIndex: number | null;\n isCustom: boolean;\n }\n>;\n\nexport interface IResultMetadata {\n id: string | null;\n filename: string | null;\n importIdentifier: string;\n user: IUser;\n rowsWithError: number[];\n rawHeaders: string[] | null;\n fields: IFieldMetadata;\n saveForLater?: boolean;\n}\n\nexport type TLocaleShorthand = \"en\" | \"de\" | \"fr\";\n\nexport enum EStepHook {\n UPLOAD_STEP = \"UPLOAD_STEP\",\n REVIEW_STEP = \"REVIEW_STEP\",\n REVIEW_STEP_POST_HOOKS = \"REVIEW_STEP_POST_HOOKS\",\n}\n\nexport interface IUploadStepData {\n filename: string | null;\n dataPreview: any[][];\n}\n\nexport interface IReviewStepData {\n rawHeaders: string[] | null;\n headerMapping: { [header: string]: string | undefined };\n fields: IFieldMetadata;\n}\n\nexport interface IReviewStepPostHooksData {\n headerMapping: { [header: string]: string | undefined };\n fields: IFieldMetadata;\n}\n\nexport interface IStepHook {\n type: keyof typeof EStepHook;\n callback: (\n uploader: IPublicConnectionMethods,\n data: IUploadStepData | IReviewStepData | IReviewStepPostHooksData\n ) => MaybeAsync<void>;\n}\n\nexport type IBeforeFinishCallback = (\n data: Record<string, any>[],\n metadata: IResultMetadata,\n instance: IPublicConnectionMethods\n) => MaybeAsync<IBeforeFinishOutput>;\n\nexport type IBeforeFinishOutput = void | { cancel: true; message: string };\n\nexport enum EInvalidDataBehavior {\n BLOCK_SUBMIT = \"BLOCK_SUBMIT\",\n REMOVE_INVALID_ROWS = \"REMOVE_INVALID_ROWS\",\n INCLUDE_INVALID_ROWS = \"INCLUDE_INVALID_ROWS\",\n}\n\nexport enum EBackendSyncMode {\n DISABLED = \"DISABLED\",\n MAPPINGS_ONLY = \"MAPPINGS_ONLY\",\n FULL_DATA = \"FULL_DATA\",\n}\n\nexport type IPositionSpec = { before: string } | { after: string };\n","import * as React from 'react'\nimport {\n IColumnHookInput,\n IColumnHookOutput,\n IColumnHook,\n IDeveloperField,\n IValidatorField,\n IDeveloperSettings,\n IRowHookInput,\n IRowHookOutput,\n IRowHook,\n IDeveloperStyleOverrides,\n IUser,\n IResultMetadata,\n EStepHook,\n IStepHook,\n IRowDeleteHook,\n IBulkRowHook,\n IBeforeFinishCallback\n} from './interfaces'\n\ninterface Props {\n style?: React.CSSProperties\n className?: string\n licenseKey: string\n user: IUser\n fields: IDeveloperField[]\n settings: IDeveloperSettings\n rowHooks?: IRowHook[]\n bulkRowHooks?: IBulkRowHook[]\n rowDeleteHooks?: IRowDeleteHook[]\n columnHooks?: IColumnHook[]\n stepHooks?: IStepHook[]\n beforeFinish?: IBeforeFinishCallback\n onResults?: (data: any, metadata: IResultMetadata) => void\n onCancel?: () => void\n children: React.ReactNode\n}\n\ndeclare var DromoUploader: any\n\nconst SCRIPT_SRC = 'https://unpkg.com/dromo-uploader-js/dist/DromoUploader.js'\nconst SCRIPT_LOADED_EVENT = 'DROMO_SCRIPT_LOADED'\n\nexport default class DromoReactUploader extends React.Component<Props> {\n dromo: any\n\n componentDidMount() {\n const loadingScript = Array.from(\n document.getElementsByTagName('script')\n ).find((s) => s.src === SCRIPT_SRC)\n\n // If there is no script tag added to HTML then we add. Prevents multiple\n // adds if there are multiple components\n if (!loadingScript) {\n const script = document.createElement('script')\n script.src = SCRIPT_SRC\n script.async = true\n script.onload = () => {\n const event = new Event(SCRIPT_LOADED_EVENT)\n window.dispatchEvent(event)\n }\n document.body.appendChild(script)\n } else {\n if ('DromoUploader' in window) {\n // If the script has been injected and has been loaded we can call\n // scriptLoaded\n const event = new Event(SCRIPT_LOADED_EVENT)\n window.dispatchEvent(event)\n } else {\n // If the script has been injected but hasn't been loaded, we wait\n // for load\n loadingScript.onload = () => {\n const event = new Event(SCRIPT_LOADED_EVENT)\n window.dispatchEvent(event)\n }\n }\n }\n }\n\n open = () => {\n if ('DromoUploader' in window) {\n this.dromo = new DromoUploader(\n this.props.licenseKey,\n this.props.fields,\n this.props.settings,\n this.props.user\n )\n\n if (this.props.rowHooks) {\n this.props.rowHooks.forEach((hook) => this.dromo.registerRowHook(hook))\n }\n\n if (this.props.bulkRowHooks) {\n this.props.bulkRowHooks.forEach((hook) =>\n this.dromo.registerBulkRowHook(hook)\n )\n }\n\n if (this.props.columnHooks) {\n this.props.columnHooks.forEach((hook) => {\n this.dromo.registerColumnHook(hook.fieldName, hook.callback)\n })\n }\n\n if (this.props.rowDeleteHooks) {\n this.props.rowDeleteHooks.forEach((hook) => {\n return this.dromo.registerRowDeleteHook(hook)\n })\n }\n\n if (this.props.beforeFinish) {\n this.dromo.beforeFinish(this.props.beforeFinish)\n }\n\n if (this.props.onResults) {\n this.dromo.onResults(this.props.onResults)\n }\n\n if (this.props.onCancel) {\n this.dromo.onCancel(this.props.onCancel)\n }\n\n if (this.props.stepHooks) {\n this.props.stepHooks.forEach((hook) => {\n this.dromo.registerStepHook(hook.type, hook.callback)\n })\n }\n\n this.dromo.open()\n }\n }\n\n render() {\n return (\n <button\n style={this.props.style}\n className={this.props.className}\n onClick={this.open}\n >\n {this.props.children}\n </button>\n )\n }\n}\n\nexport {\n IDeveloperField,\n IDeveloperSettings,\n IUser,\n IColumnHookInput,\n IColumnHookOutput,\n IColumnHook,\n IRowHookInput,\n IRowHookOutput,\n IRowHook,\n IValidatorField,\n IDeveloperStyleOverrides,\n IResultMetadata,\n EStepHook,\n IStepHook,\n IRowDeleteHook\n}\n"],"names":["EStepHook","EInvalidDataBehavior","EBackendSyncMode","SCRIPT_SRC","SCRIPT_LOADED_EVENT","DromoReactUploader","window","dromo","DromoUploader","props","licenseKey","fields","settings","user","rowHooks","forEach","hook","registerRowHook","bulkRowHooks","registerBulkRowHook","columnHooks","registerColumnHook","fieldName","callback","rowDeleteHooks","registerRowDeleteHook","beforeFinish","onResults","onCancel","stepHooks","registerStepHook","type","open","componentDidMount","loadingScript","Array","from","document","getElementsByTagName","find","s","src","script","createElement","async","onload","event","Event","dispatchEvent","body","appendChild","render","React","style","className","onClick","children"],"mappings":"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"}
@@ -41,54 +41,54 @@ var DromoReactUploader = /*#__PURE__*/function (_React$Component) {
41
41
 
42
42
  _this = _React$Component.apply(this, arguments) || this;
43
43
 
44
- _this.scriptLoaded = function () {
45
- _this.dromo = new DromoUploader(_this.props.licenseKey, _this.props.fields, _this.props.settings, _this.props.user);
46
-
47
- if (_this.props.rowHooks) {
48
- _this.props.rowHooks.forEach(function (hook) {
49
- return _this.dromo.registerRowHook(hook);
50
- });
51
- }
52
-
53
- if (_this.props.bulkRowHooks) {
54
- _this.props.bulkRowHooks.forEach(function (hook) {
55
- return _this.dromo.registerBulkRowHook(hook);
56
- });
57
- }
58
-
59
- if (_this.props.columnHooks) {
60
- _this.props.columnHooks.forEach(function (hook) {
61
- _this.dromo.registerColumnHook(hook.fieldName, hook.callback);
62
- });
63
- }
64
-
65
- if (_this.props.rowDeleteHooks) {
66
- _this.props.rowDeleteHooks.forEach(function (hook) {
67
- return _this.dromo.registerRowDeleteHook(hook);
68
- });
69
- }
70
-
71
- if (_this.props.beforeFinish) {
72
- _this.dromo.beforeFinish(_this.props.beforeFinish);
73
- }
74
-
75
- if (_this.props.onResults) {
76
- _this.dromo.onResults(_this.props.onResults);
77
- }
78
-
79
- if (_this.props.onCancel) {
80
- _this.dromo.onCancel(_this.props.onCancel);
81
- }
82
-
83
- if (_this.props.stepHooks) {
84
- _this.props.stepHooks.forEach(function (hook) {
85
- _this.dromo.registerStepHook(hook.type, hook.callback);
86
- });
87
- }
88
- };
89
-
90
44
  _this.open = function () {
91
- if (_this.dromo) _this.dromo.open();
45
+ if ('DromoUploader' in window) {
46
+ _this.dromo = new DromoUploader(_this.props.licenseKey, _this.props.fields, _this.props.settings, _this.props.user);
47
+
48
+ if (_this.props.rowHooks) {
49
+ _this.props.rowHooks.forEach(function (hook) {
50
+ return _this.dromo.registerRowHook(hook);
51
+ });
52
+ }
53
+
54
+ if (_this.props.bulkRowHooks) {
55
+ _this.props.bulkRowHooks.forEach(function (hook) {
56
+ return _this.dromo.registerBulkRowHook(hook);
57
+ });
58
+ }
59
+
60
+ if (_this.props.columnHooks) {
61
+ _this.props.columnHooks.forEach(function (hook) {
62
+ _this.dromo.registerColumnHook(hook.fieldName, hook.callback);
63
+ });
64
+ }
65
+
66
+ if (_this.props.rowDeleteHooks) {
67
+ _this.props.rowDeleteHooks.forEach(function (hook) {
68
+ return _this.dromo.registerRowDeleteHook(hook);
69
+ });
70
+ }
71
+
72
+ if (_this.props.beforeFinish) {
73
+ _this.dromo.beforeFinish(_this.props.beforeFinish);
74
+ }
75
+
76
+ if (_this.props.onResults) {
77
+ _this.dromo.onResults(_this.props.onResults);
78
+ }
79
+
80
+ if (_this.props.onCancel) {
81
+ _this.dromo.onCancel(_this.props.onCancel);
82
+ }
83
+
84
+ if (_this.props.stepHooks) {
85
+ _this.props.stepHooks.forEach(function (hook) {
86
+ _this.dromo.registerStepHook(hook.type, hook.callback);
87
+ });
88
+ }
89
+
90
+ _this.dromo.open();
91
+ }
92
92
  };
93
93
 
94
94
  return _this;
@@ -97,7 +97,6 @@ var DromoReactUploader = /*#__PURE__*/function (_React$Component) {
97
97
  var _proto = DromoReactUploader.prototype;
98
98
 
99
99
  _proto.componentDidMount = function componentDidMount() {
100
- window.addEventListener(SCRIPT_LOADED_EVENT, this.scriptLoaded.bind(this));
101
100
  var loadingScript = Array.from(document.getElementsByTagName('script')).find(function (s) {
102
101
  return s.src === SCRIPT_SRC;
103
102
  });
@@ -126,10 +125,6 @@ var DromoReactUploader = /*#__PURE__*/function (_React$Component) {
126
125
  }
127
126
  };
128
127
 
129
- _proto.componentWillUnmount = function componentWillUnmount() {
130
- window.removeEventListener(SCRIPT_LOADED_EVENT, this.scriptLoaded.bind(this));
131
- };
132
-
133
128
  _proto.render = function render() {
134
129
  return createElement("button", {
135
130
  style: this.props.style,
@@ -1 +1 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/interfaces.ts","../src/index.tsx"],"sourcesContent":["type MaybeAsync<T> = T | Promise<T>;\n\nexport interface IConnectionMethods {\n init: (\n licenseKey: string,\n fields: IDeveloperField[],\n settings: IDeveloperSettings,\n user: IUser,\n appHost?: string\n ) => void;\n setNumRegisteredColHooks: (numColHooks: number) => void;\n setNumRegisteredRowHooks: (numRowHooks: number) => void;\n setNumRegisteredRowDeleteHooks: (numRowDeleteHooks: number) => void;\n addField: (field: IDeveloperField, position?: IPositionSpec) => void;\n updateInfoMessages: (messages: IMessagesForCell[]) => void;\n}\n\nexport type IPublicConnectionMethods = Pick<\n IConnectionMethods,\n \"addField\" | \"updateInfoMessages\"\n>;\n\nexport type IDeveloperFieldType =\n | \"string\"\n | \"checkbox\"\n | \"select\"\n | \"number\"\n | \"date\"\n | \"datetime\"\n | \"time\"\n | \"email\";\n\nexport interface IDeveloperField {\n label: string;\n key: string;\n type?: IDeveloperFieldType | [IDeveloperFieldType, any];\n description?: string;\n alternateMatches?: string[];\n validators?: IValidatorField[];\n selectOptions?: {\n label: string;\n value: string;\n }[];\n invalidValueMessage?: string;\n readOnly?: boolean;\n}\n\ninterface IAbstractValidator<ValidateKey> {\n validate: ValidateKey;\n errorMessage?: string;\n level?: \"info\" | \"warning\" | \"error\";\n}\n\nexport type IRequiredValidator = IAbstractValidator<\"required\">;\n\nexport type IUniqueValidator = IAbstractValidator<\n \"unique\" | \"unique_case_insensitive\"\n>;\n\nexport interface IUniqueWithValidator\n extends IAbstractValidator<\"unique_with\"> {\n uniqueKey: string;\n}\n\nexport interface IRegexValidator\n extends IAbstractValidator<\"regex_match\" | \"regex_exclude\"> {\n regex: string;\n regexOptions?: {\n ignoreCase?: boolean;\n dotAll?: boolean;\n multiline?: boolean;\n unicode?: boolean;\n };\n}\n\nexport interface IRequireWithValidator\n extends IAbstractValidator<\n | \"require_with\"\n | \"require_without\"\n | \"require_with_all\"\n | \"require_without_all\"\n > {\n fields: string[];\n}\n\nexport interface IRequireWithValuesValidator\n extends IAbstractValidator<\n | \"require_with_values\"\n | \"require_without_values\"\n | \"require_with_all_values\"\n | \"require_without_all_values\"\n > {\n fieldValues: { [key: string]: string };\n}\n\nexport type IValidatorField =\n | IRequiredValidator\n | IUniqueValidator\n | IUniqueWithValidator\n | IRegexValidator\n | IRequireWithValidator\n | IRequireWithValuesValidator;\n\nexport interface IDeveloperSettings {\n importIdentifier: string;\n title?: string;\n allowInvalidSubmit?: boolean;\n invalidDataBehavior?: keyof typeof EInvalidDataBehavior;\n backendSync?: boolean;\n backendSyncMode?: keyof typeof EBackendSyncMode;\n manualInputDisabled?: boolean;\n manualInputOnly?: boolean;\n allowCustomFields?: boolean;\n maxRecords?: number | null;\n developmentMode?: boolean;\n displayEncoding?: boolean;\n styleOverrides?: IDeveloperStyleOverrides;\n webhookUrl?: string;\n initialData?: { [key: string]: string }[] | any[][] | null;\n uploadStep?: {\n helpText?: string;\n };\n matchingStep?: {\n helpText?: string;\n headerRowOverride?: number | null;\n fuzzyMatchHeaders?: boolean;\n alwaysMatchSelectFields?: boolean;\n };\n reviewStep?: {\n helpText?: string;\n processingText?: string;\n saveForLater?: boolean;\n };\n autoMapHeaders?: boolean;\n delimiter?: string;\n backendOverride?: {\n url: string;\n type: \"AWS\" | \"AZURE\";\n } | null;\n locale?: TLocaleShorthand;\n templateDownloadFilename?: string;\n browserExcelParsing?: boolean;\n}\n\n// If you update this, also update IDeveloperStylesOverridesStrict\n// in interfaces.tsx\nexport interface IDeveloperStyleOverrides {\n global?: {\n textColor?: string;\n primaryTextColor?: string;\n secondaryTextColor?: string;\n successColor?: string;\n warningColor?: string;\n customFontURL?: string | null;\n customFontFamily?: string | null;\n };\n primaryButton?: {\n borderRadius?: string;\n backgroundColor?: string;\n textColor?: string;\n border?: string;\n hoverBackgroundColor?: string;\n hoverTextColor?: string;\n hoverBorder?: string;\n };\n secondaryButton?: {\n borderRadius?: string;\n backgroundColor?: string;\n textColor?: string;\n border?: string;\n hoverBackgroundColor?: string;\n hoverTextColor?: string;\n hoverBorder?: string;\n };\n tertiaryButton?: {\n borderRadius?: string;\n backgroundColor?: string;\n textColor?: string;\n border?: string;\n hoverBackgroundColor?: string;\n hoverTextColor?: string;\n hoverBorder?: string;\n };\n dropzone?: {\n borderWidth?: number;\n borderRadius?: number;\n borderColor?: string;\n borderStyle?: string;\n color?: string;\n outline?: string;\n };\n helpText?: {\n textColor?: string;\n backgroundColor?: string;\n };\n stepperBar?: {\n completeColor?: string;\n incompleteColor?: string;\n currentColor?: string;\n };\n}\n\nexport interface IUser {\n id: string;\n name?: string;\n email?: string;\n companyId?: string;\n companyName?: string;\n}\n\nexport interface ICellRef {\n rowIndex: number;\n fieldKey: string;\n}\n\nexport interface ITableMessage {\n message: string;\n level: \"info\" | \"warning\" | \"error\";\n}\n\nexport interface IMessagesForCell extends ICellRef {\n messages: ITableMessage[];\n}\n\nexport interface IColumnHook {\n fieldName: string;\n callback: (values: IColumnHookInput[]) => MaybeAsync<IColumnHookOutput[]>;\n}\n\nexport interface IRowHook {\n (data: IRowHookInput, mode: \"init\" | \"update\"): MaybeAsync<IRowHookOutput>;\n}\n\nexport type IBulkRowHook = (\n data: IRowHookInput[],\n mode: \"init\" | \"update\"\n) => IRowHookOutputInternal[] | Promise<IRowHookOutputInternal[]>;\n\nexport interface IRowDeleteHook {\n (data: IRowHookInput): void;\n}\n\nexport interface IColumnHookInput {\n index: number;\n value: any;\n}\n\nexport interface IColumnHookOutput {\n index: number;\n value?: any;\n info?: ITableMessage[];\n}\n\nexport interface IRowHookInput {\n row: {\n [key: string]: {\n value: any;\n resultValue: any;\n info?: ITableMessage[];\n };\n };\n index: number;\n}\n\nexport interface IRowHookOutput {\n row: {\n [key: string]: {\n value?: any;\n info?: ITableMessage[];\n };\n };\n}\n\nexport interface IRowHookOutputInternal extends IRowHookOutput {\n index: number;\n}\n\nexport type IFieldMetadata = Record<\n string,\n {\n fileHeader: string | null;\n fileHeaderIndex: number | null;\n isCustom: boolean;\n }\n>;\n\nexport interface IResultMetadata {\n id: string | null;\n filename: string | null;\n importIdentifier: string;\n user: IUser;\n rowsWithError: number[];\n rawHeaders: string[] | null;\n fields: IFieldMetadata;\n saveForLater?: boolean;\n}\n\nexport type TLocaleShorthand = \"en\" | \"de\" | \"fr\";\n\nexport enum EStepHook {\n UPLOAD_STEP = \"UPLOAD_STEP\",\n REVIEW_STEP = \"REVIEW_STEP\",\n REVIEW_STEP_POST_HOOKS = \"REVIEW_STEP_POST_HOOKS\",\n}\n\nexport interface IUploadStepData {\n filename: string | null;\n dataPreview: any[][];\n}\n\nexport interface IReviewStepData {\n rawHeaders: string[] | null;\n headerMapping: { [header: string]: string | undefined };\n fields: IFieldMetadata;\n}\n\nexport interface IReviewStepPostHooksData {\n headerMapping: { [header: string]: string | undefined };\n fields: IFieldMetadata;\n}\n\nexport interface IStepHook {\n type: keyof typeof EStepHook;\n callback: (\n uploader: IPublicConnectionMethods,\n data: IUploadStepData | IReviewStepData | IReviewStepPostHooksData\n ) => MaybeAsync<void>;\n}\n\nexport type IBeforeFinishCallback = (\n data: Record<string, any>[],\n metadata: IResultMetadata,\n instance: IPublicConnectionMethods\n) => MaybeAsync<IBeforeFinishOutput>;\n\nexport type IBeforeFinishOutput = void | { cancel: true; message: string };\n\nexport enum EInvalidDataBehavior {\n BLOCK_SUBMIT = \"BLOCK_SUBMIT\",\n REMOVE_INVALID_ROWS = \"REMOVE_INVALID_ROWS\",\n INCLUDE_INVALID_ROWS = \"INCLUDE_INVALID_ROWS\",\n}\n\nexport enum EBackendSyncMode {\n DISABLED = \"DISABLED\",\n MAPPINGS_ONLY = \"MAPPINGS_ONLY\",\n FULL_DATA = \"FULL_DATA\",\n}\n\nexport type IPositionSpec = { before: string } | { after: string };\n","import * as React from 'react'\nimport {\n IColumnHookInput,\n IColumnHookOutput,\n IColumnHook,\n IDeveloperField,\n IValidatorField,\n IDeveloperSettings,\n IRowHookInput,\n IRowHookOutput,\n IRowHook,\n IDeveloperStyleOverrides,\n IUser,\n IResultMetadata,\n EStepHook,\n IStepHook,\n IRowDeleteHook,\n IBulkRowHook,\n IBeforeFinishCallback\n} from './interfaces'\n\ninterface Props {\n style?: React.CSSProperties\n className?: string\n licenseKey: string\n user: IUser\n fields: IDeveloperField[]\n settings: IDeveloperSettings\n rowHooks?: IRowHook[]\n bulkRowHooks?: IBulkRowHook[]\n rowDeleteHooks?: IRowDeleteHook[]\n columnHooks?: IColumnHook[]\n stepHooks?: IStepHook[]\n beforeFinish?: IBeforeFinishCallback\n onResults?: (data: any, metadata: IResultMetadata) => void\n onCancel?: () => void\n children: React.ReactNode\n}\n\ndeclare var DromoUploader: any\n\nconst SCRIPT_SRC = 'https://unpkg.com/dromo-uploader-js/dist/DromoUploader.js'\nconst SCRIPT_LOADED_EVENT = 'DROMO_SCRIPT_LOADED'\n\nexport default class DromoReactUploader extends React.Component<Props> {\n dromo: any\n\n componentDidMount() {\n // Add event listener post load to set up Dromo\n window.addEventListener(SCRIPT_LOADED_EVENT, this.scriptLoaded.bind(this))\n\n const loadingScript = Array.from(\n document.getElementsByTagName('script')\n ).find((s) => s.src === SCRIPT_SRC)\n\n // If there is no script tag added to HTML then we add. Prevents multiple\n // adds if there are multiple components\n if (!loadingScript) {\n const script = document.createElement('script')\n script.src = SCRIPT_SRC\n script.async = true\n script.onload = () => {\n const event = new Event(SCRIPT_LOADED_EVENT)\n window.dispatchEvent(event)\n }\n document.body.appendChild(script)\n } else {\n if ('DromoUploader' in window) {\n // If the script has been injected and has been loaded we can call\n // scriptLoaded\n const event = new Event(SCRIPT_LOADED_EVENT)\n window.dispatchEvent(event)\n } else {\n // If the script has been injected but hasn't been loaded, we wait\n // for load\n loadingScript.onload = () => {\n const event = new Event(SCRIPT_LOADED_EVENT)\n window.dispatchEvent(event)\n }\n }\n }\n }\n\n componentWillUnmount() {\n window.removeEventListener(\n SCRIPT_LOADED_EVENT,\n this.scriptLoaded.bind(this)\n )\n }\n\n scriptLoaded = () => {\n this.dromo = new DromoUploader(\n this.props.licenseKey,\n this.props.fields,\n this.props.settings,\n this.props.user\n )\n\n if (this.props.rowHooks) {\n this.props.rowHooks.forEach((hook) => this.dromo.registerRowHook(hook))\n }\n\n if (this.props.bulkRowHooks) {\n this.props.bulkRowHooks.forEach((hook) =>\n this.dromo.registerBulkRowHook(hook)\n )\n }\n\n if (this.props.columnHooks) {\n this.props.columnHooks.forEach((hook) => {\n this.dromo.registerColumnHook(hook.fieldName, hook.callback)\n })\n }\n\n if (this.props.rowDeleteHooks) {\n this.props.rowDeleteHooks.forEach((hook) => {\n return this.dromo.registerRowDeleteHook(hook)\n })\n }\n\n if (this.props.beforeFinish) {\n this.dromo.beforeFinish(this.props.beforeFinish)\n }\n\n if (this.props.onResults) {\n this.dromo.onResults(this.props.onResults)\n }\n\n if (this.props.onCancel) {\n this.dromo.onCancel(this.props.onCancel)\n }\n\n if (this.props.stepHooks) {\n this.props.stepHooks.forEach((hook) => {\n this.dromo.registerStepHook(hook.type, hook.callback)\n })\n }\n }\n\n open = () => {\n if (this.dromo) this.dromo.open()\n }\n\n render() {\n return (\n <button\n style={this.props.style}\n className={this.props.className}\n onClick={this.open}\n >\n {this.props.children}\n </button>\n )\n }\n}\n\nexport {\n IDeveloperField,\n IDeveloperSettings,\n IUser,\n IColumnHookInput,\n IColumnHookOutput,\n IColumnHook,\n IRowHookInput,\n IRowHookOutput,\n IRowHook,\n IValidatorField,\n IDeveloperStyleOverrides,\n IResultMetadata,\n EStepHook,\n IStepHook,\n IRowDeleteHook\n}\n"],"names":["EStepHook","EInvalidDataBehavior","EBackendSyncMode","SCRIPT_SRC","SCRIPT_LOADED_EVENT","DromoReactUploader","dromo","DromoUploader","props","licenseKey","fields","settings","user","rowHooks","forEach","hook","registerRowHook","bulkRowHooks","registerBulkRowHook","columnHooks","registerColumnHook","fieldName","callback","rowDeleteHooks","registerRowDeleteHook","beforeFinish","onResults","onCancel","stepHooks","registerStepHook","type","open","componentDidMount","window","addEventListener","scriptLoaded","bind","loadingScript","Array","from","document","getElementsByTagName","find","s","src","script","createElement","async","onload","event","Event","dispatchEvent","body","appendChild","componentWillUnmount","removeEventListener","render","React","style","className","onClick","children"],"mappings":"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"}
1
+ {"version":3,"file":"index.modern.js","sources":["../src/interfaces.ts","../src/index.tsx"],"sourcesContent":["type MaybeAsync<T> = T | Promise<T>;\n\nexport interface IConnectionMethods {\n init: (\n licenseKey: string,\n fields: IDeveloperField[],\n settings: IDeveloperSettings,\n user: IUser,\n appHost?: string\n ) => void;\n initFromSavedSchema: (\n licenseKey: string,\n schemaName: string,\n appHost: string\n ) => void;\n setHeaderRowOverride: (headerRowOverride: number | null) => void;\n setNumRegisteredColHooks: (numColHooks: number) => void;\n setNumRegisteredRowHooks: (numRowHooks: number) => void;\n setNumRegisteredRowDeleteHooks: (numRowDeleteHooks: number) => void;\n setUser: (user: IUser) => void;\n addField: (field: IDeveloperField, position?: IPositionSpec) => void;\n updateInfoMessages: (messages: IMessagesForCell[]) => void;\n}\n\nexport type IPublicConnectionMethods = Pick<\n IConnectionMethods,\n \"addField\" | \"updateInfoMessages\" | \"setHeaderRowOverride\" | \"setUser\"\n>;\n\nexport type IDeveloperFieldType =\n | \"string\"\n | \"checkbox\"\n | \"select\"\n | \"number\"\n | \"date\"\n | \"datetime\"\n | \"time\"\n | \"email\";\n\nexport interface IAbstractDeveloperFieldUntyped {\n label: string;\n key: string;\n type?: never;\n description?: string;\n alternateMatches?: string[];\n validators?: IValidatorField[];\n invalidValueMessage?: string;\n readOnly?: boolean;\n hidden?: boolean;\n}\n\nexport interface IAbstractDeveloperField<\n FieldType extends IDeveloperFieldType,\n FieldOpts = Record<string, never>\n> extends Omit<IAbstractDeveloperFieldUntyped, \"type\"> {\n type: FieldType | [FieldType, FieldOpts];\n}\n\ntype IStringField =\n | IAbstractDeveloperFieldUntyped\n | IAbstractDeveloperField<\"string\">;\n\ntype ICheckboxField = IAbstractDeveloperField<\"checkbox\">;\n\nexport interface ISelectField extends IAbstractDeveloperField<\"select\"> {\n selectOptions: {\n label: string;\n value: string;\n }[];\n}\n\ntype INumberPreset =\n | \"default\"\n | \"percent\"\n | \"percent_0\"\n | \"percent_1\"\n | \"percent_2\"\n | \"percent_3\"\n | \"percent_4\"\n | \"decimal_0\"\n | \"decimal_1\"\n | \"decimal_2\"\n | \"decimal_3\"\n | \"decimal_4\"\n | \"integer\"\n | \"plain\"\n | \"usd\"\n | \"usd_accounting\"\n | \"eur\"\n | \"gbp\";\n\n// copy-pasta'd from numbro.Format\ninterface INumbroFormat {\n output?: \"currency\" | \"percent\" | \"byte\" | \"time\" | \"ordinal\" | \"number\";\n base?: \"decimal\" | \"binary\" | \"general\";\n characteristic?: number;\n prefix?: string;\n postfix?: string;\n forceAverage?: \"trillion\" | \"billion\" | \"million\" | \"thousand\";\n average?: boolean;\n currencyPosition?: \"prefix\" | \"infix\" | \"postfix\";\n currencySymbol?: string;\n totalLength?: number;\n mantissa?: number;\n optionalMantissa?: boolean;\n trimMantissa?: boolean;\n optionalCharacteristic?: boolean;\n thousandSeparated?: boolean;\n abbreviations?: {\n thousand?: string;\n million?: string;\n billion?: string;\n trillion?: string;\n };\n negative?: \"sign\" | \"parenthesis\";\n forceSign?: boolean;\n spaceSeparated?: boolean;\n spaceSeparatedCurrency?: boolean;\n spaceSeparatedAbbreviation?: boolean;\n exponential?: boolean;\n prefixSymbol?: boolean;\n lowPrecision?: boolean;\n roundingFunction?: (num: number) => number;\n}\n\ninterface INumberOpts {\n preset?: INumberPreset;\n round?: number;\n displayFormat?: INumbroFormat;\n outputFormat?: INumbroFormat;\n}\n\ntype INumberField = IAbstractDeveloperField<\n \"number\",\n INumberPreset | INumberOpts\n>;\n\ninterface IDateTimeOpts {\n displayFormat?: string;\n outputFormat?: string;\n locale?: string;\n withSeconds?: boolean;\n}\n\ntype IDateTimeField = IAbstractDeveloperField<\n \"date\" | \"time\" | \"datetime\",\n IDateTimeOpts\n>;\n\ntype IEmailField = IAbstractDeveloperField<\"email\">;\n\nexport type IDeveloperField =\n | IStringField\n | ICheckboxField\n | ISelectField\n | INumberField\n | IDateTimeField\n | IEmailField;\n\ninterface IAbstractValidator<ValidateKey> {\n validate: ValidateKey;\n errorMessage?: string;\n level?: \"info\" | \"warning\" | \"error\";\n}\n\nexport type IRequiredValidator = IAbstractValidator<\"required\">;\n\nexport type IUniqueValidator = IAbstractValidator<\n \"unique\" | \"unique_case_insensitive\"\n>;\n\nexport interface IUniqueWithValidator\n extends IAbstractValidator<\"unique_with\"> {\n uniqueKey: string;\n}\n\nexport interface IRegexValidator\n extends IAbstractValidator<\"regex_match\" | \"regex_exclude\"> {\n regex: string;\n regexOptions?: {\n ignoreCase?: boolean;\n dotAll?: boolean;\n multiline?: boolean;\n unicode?: boolean;\n };\n}\n\nexport interface IRequireWithValidator\n extends IAbstractValidator<\n | \"require_with\"\n | \"require_without\"\n | \"require_with_all\"\n | \"require_without_all\"\n > {\n fields: string[];\n}\n\nexport interface IRequireWithValuesValidator\n extends IAbstractValidator<\n | \"require_with_values\"\n | \"require_without_values\"\n | \"require_with_all_values\"\n | \"require_without_all_values\"\n > {\n fieldValues: { [key: string]: string };\n}\n\nexport type IValidatorField =\n | IRequiredValidator\n | IUniqueValidator\n | IUniqueWithValidator\n | IRegexValidator\n | IRequireWithValidator\n | IRequireWithValuesValidator;\n\nexport interface IDeveloperSettings {\n importIdentifier: string;\n title?: string;\n allowInvalidSubmit?: boolean;\n invalidDataBehavior?: keyof typeof EInvalidDataBehavior;\n backendSync?: boolean;\n backendSyncMode?: keyof typeof EBackendSyncMode;\n manualInputDisabled?: boolean;\n manualInputOnly?: boolean;\n allowCustomFields?: boolean;\n maxRecords?: number | null;\n developmentMode?: boolean;\n displayEncoding?: boolean;\n styleOverrides?: IDeveloperStyleOverrides;\n webhookUrl?: string;\n initialData?: { [key: string]: string }[] | any[][] | null;\n uploadStep?: {\n helpText?: string;\n };\n matchingStep?: {\n helpText?: string;\n headerRowOverride?: number | null;\n fuzzyMatchHeaders?: boolean;\n alwaysMatchSelectFields?: boolean;\n };\n reviewStep?: {\n helpText?: string;\n processingText?: string;\n saveForLater?: boolean;\n };\n autoMapHeaders?: boolean;\n delimiter?: string;\n backendOverride?: {\n url: string;\n type: \"AWS\" | \"AZURE\";\n } | null;\n locale?: TLocaleShorthand;\n templateDownloadFilename?: string;\n browserExcelParsing?: boolean;\n}\n\n// If you update this, also update IDeveloperStylesOverridesStrict\n// in interfaces.tsx\nexport interface IDeveloperStyleOverrides {\n global?: {\n textColor?: string;\n primaryTextColor?: string;\n secondaryTextColor?: string;\n successColor?: string;\n warningColor?: string;\n customFontURL?: string | null;\n customFontFamily?: string | null;\n };\n primaryButton?: {\n borderRadius?: string;\n backgroundColor?: string;\n textColor?: string;\n border?: string;\n hoverBackgroundColor?: string;\n hoverTextColor?: string;\n hoverBorder?: string;\n };\n secondaryButton?: {\n borderRadius?: string;\n backgroundColor?: string;\n textColor?: string;\n border?: string;\n hoverBackgroundColor?: string;\n hoverTextColor?: string;\n hoverBorder?: string;\n };\n tertiaryButton?: {\n borderRadius?: string;\n backgroundColor?: string;\n textColor?: string;\n border?: string;\n hoverBackgroundColor?: string;\n hoverTextColor?: string;\n hoverBorder?: string;\n };\n dropzone?: {\n borderWidth?: number;\n borderRadius?: number;\n borderColor?: string;\n borderStyle?: string;\n color?: string;\n outline?: string;\n };\n helpText?: {\n textColor?: string;\n backgroundColor?: string;\n };\n stepperBar?: {\n completeColor?: string;\n incompleteColor?: string;\n currentColor?: string;\n };\n}\n\nexport interface IUser {\n id: string;\n name?: string;\n email?: string;\n companyId?: string;\n companyName?: string;\n}\n\nexport interface ICellRef {\n rowIndex: number;\n fieldKey: string;\n}\n\nexport interface ITableMessage {\n message: string;\n level: \"info\" | \"warning\" | \"error\";\n}\n\nexport interface IMessagesForCell extends ICellRef {\n messages: ITableMessage[];\n}\n\nexport interface IColumnHook {\n fieldName: string;\n callback: (values: IColumnHookInput[]) => MaybeAsync<IColumnHookOutput[]>;\n}\n\nexport interface IRowHook {\n (data: IRowHookInput, mode: \"init\" | \"update\"): MaybeAsync<IRowHookOutput>;\n}\n\nexport type IBulkRowHook = (\n data: IRowHookInput[],\n mode: \"init\" | \"update\"\n) => IRowHookOutputInternal[] | Promise<IRowHookOutputInternal[]>;\n\nexport interface IRowDeleteHook {\n (data: IRowHookInput): void;\n}\n\nexport interface IColumnHookInput {\n index: number;\n value: any;\n}\n\nexport interface IColumnHookOutput {\n index: number;\n value?: any;\n info?: ITableMessage[];\n}\n\nexport interface IRowHookInput {\n row: {\n [key: string]: {\n value: any;\n resultValue: any;\n info?: ITableMessage[];\n };\n };\n index: number;\n}\n\nexport interface IRowHookOutput {\n row: {\n [key: string]: {\n value?: any;\n info?: ITableMessage[];\n };\n };\n}\n\nexport interface IRowHookOutputInternal extends IRowHookOutput {\n index: number;\n}\n\nexport type IFieldMetadata = Record<\n string,\n {\n fileHeader: string | null;\n fileHeaderIndex: number | null;\n isCustom: boolean;\n }\n>;\n\nexport interface IResultMetadata {\n id: string | null;\n filename: string | null;\n importIdentifier: string;\n user: IUser;\n rowsWithError: number[];\n rawHeaders: string[] | null;\n fields: IFieldMetadata;\n saveForLater?: boolean;\n}\n\nexport type TLocaleShorthand = \"en\" | \"de\" | \"fr\";\n\nexport enum EStepHook {\n UPLOAD_STEP = \"UPLOAD_STEP\",\n REVIEW_STEP = \"REVIEW_STEP\",\n REVIEW_STEP_POST_HOOKS = \"REVIEW_STEP_POST_HOOKS\",\n}\n\nexport interface IUploadStepData {\n filename: string | null;\n dataPreview: any[][];\n}\n\nexport interface IReviewStepData {\n rawHeaders: string[] | null;\n headerMapping: { [header: string]: string | undefined };\n fields: IFieldMetadata;\n}\n\nexport interface IReviewStepPostHooksData {\n headerMapping: { [header: string]: string | undefined };\n fields: IFieldMetadata;\n}\n\nexport interface IStepHook {\n type: keyof typeof EStepHook;\n callback: (\n uploader: IPublicConnectionMethods,\n data: IUploadStepData | IReviewStepData | IReviewStepPostHooksData\n ) => MaybeAsync<void>;\n}\n\nexport type IBeforeFinishCallback = (\n data: Record<string, any>[],\n metadata: IResultMetadata,\n instance: IPublicConnectionMethods\n) => MaybeAsync<IBeforeFinishOutput>;\n\nexport type IBeforeFinishOutput = void | { cancel: true; message: string };\n\nexport enum EInvalidDataBehavior {\n BLOCK_SUBMIT = \"BLOCK_SUBMIT\",\n REMOVE_INVALID_ROWS = \"REMOVE_INVALID_ROWS\",\n INCLUDE_INVALID_ROWS = \"INCLUDE_INVALID_ROWS\",\n}\n\nexport enum EBackendSyncMode {\n DISABLED = \"DISABLED\",\n MAPPINGS_ONLY = \"MAPPINGS_ONLY\",\n FULL_DATA = \"FULL_DATA\",\n}\n\nexport type IPositionSpec = { before: string } | { after: string };\n","import * as React from 'react'\nimport {\n IColumnHookInput,\n IColumnHookOutput,\n IColumnHook,\n IDeveloperField,\n IValidatorField,\n IDeveloperSettings,\n IRowHookInput,\n IRowHookOutput,\n IRowHook,\n IDeveloperStyleOverrides,\n IUser,\n IResultMetadata,\n EStepHook,\n IStepHook,\n IRowDeleteHook,\n IBulkRowHook,\n IBeforeFinishCallback\n} from './interfaces'\n\ninterface Props {\n style?: React.CSSProperties\n className?: string\n licenseKey: string\n user: IUser\n fields: IDeveloperField[]\n settings: IDeveloperSettings\n rowHooks?: IRowHook[]\n bulkRowHooks?: IBulkRowHook[]\n rowDeleteHooks?: IRowDeleteHook[]\n columnHooks?: IColumnHook[]\n stepHooks?: IStepHook[]\n beforeFinish?: IBeforeFinishCallback\n onResults?: (data: any, metadata: IResultMetadata) => void\n onCancel?: () => void\n children: React.ReactNode\n}\n\ndeclare var DromoUploader: any\n\nconst SCRIPT_SRC = 'https://unpkg.com/dromo-uploader-js/dist/DromoUploader.js'\nconst SCRIPT_LOADED_EVENT = 'DROMO_SCRIPT_LOADED'\n\nexport default class DromoReactUploader extends React.Component<Props> {\n dromo: any\n\n componentDidMount() {\n const loadingScript = Array.from(\n document.getElementsByTagName('script')\n ).find((s) => s.src === SCRIPT_SRC)\n\n // If there is no script tag added to HTML then we add. Prevents multiple\n // adds if there are multiple components\n if (!loadingScript) {\n const script = document.createElement('script')\n script.src = SCRIPT_SRC\n script.async = true\n script.onload = () => {\n const event = new Event(SCRIPT_LOADED_EVENT)\n window.dispatchEvent(event)\n }\n document.body.appendChild(script)\n } else {\n if ('DromoUploader' in window) {\n // If the script has been injected and has been loaded we can call\n // scriptLoaded\n const event = new Event(SCRIPT_LOADED_EVENT)\n window.dispatchEvent(event)\n } else {\n // If the script has been injected but hasn't been loaded, we wait\n // for load\n loadingScript.onload = () => {\n const event = new Event(SCRIPT_LOADED_EVENT)\n window.dispatchEvent(event)\n }\n }\n }\n }\n\n open = () => {\n if ('DromoUploader' in window) {\n this.dromo = new DromoUploader(\n this.props.licenseKey,\n this.props.fields,\n this.props.settings,\n this.props.user\n )\n\n if (this.props.rowHooks) {\n this.props.rowHooks.forEach((hook) => this.dromo.registerRowHook(hook))\n }\n\n if (this.props.bulkRowHooks) {\n this.props.bulkRowHooks.forEach((hook) =>\n this.dromo.registerBulkRowHook(hook)\n )\n }\n\n if (this.props.columnHooks) {\n this.props.columnHooks.forEach((hook) => {\n this.dromo.registerColumnHook(hook.fieldName, hook.callback)\n })\n }\n\n if (this.props.rowDeleteHooks) {\n this.props.rowDeleteHooks.forEach((hook) => {\n return this.dromo.registerRowDeleteHook(hook)\n })\n }\n\n if (this.props.beforeFinish) {\n this.dromo.beforeFinish(this.props.beforeFinish)\n }\n\n if (this.props.onResults) {\n this.dromo.onResults(this.props.onResults)\n }\n\n if (this.props.onCancel) {\n this.dromo.onCancel(this.props.onCancel)\n }\n\n if (this.props.stepHooks) {\n this.props.stepHooks.forEach((hook) => {\n this.dromo.registerStepHook(hook.type, hook.callback)\n })\n }\n\n this.dromo.open()\n }\n }\n\n render() {\n return (\n <button\n style={this.props.style}\n className={this.props.className}\n onClick={this.open}\n >\n {this.props.children}\n </button>\n )\n }\n}\n\nexport {\n IDeveloperField,\n IDeveloperSettings,\n IUser,\n IColumnHookInput,\n IColumnHookOutput,\n IColumnHook,\n IRowHookInput,\n IRowHookOutput,\n IRowHook,\n IValidatorField,\n IDeveloperStyleOverrides,\n IResultMetadata,\n EStepHook,\n IStepHook,\n IRowDeleteHook\n}\n"],"names":["EStepHook","EInvalidDataBehavior","EBackendSyncMode","SCRIPT_SRC","SCRIPT_LOADED_EVENT","DromoReactUploader","window","dromo","DromoUploader","props","licenseKey","fields","settings","user","rowHooks","forEach","hook","registerRowHook","bulkRowHooks","registerBulkRowHook","columnHooks","registerColumnHook","fieldName","callback","rowDeleteHooks","registerRowDeleteHook","beforeFinish","onResults","onCancel","stepHooks","registerStepHook","type","open","componentDidMount","loadingScript","Array","from","document","getElementsByTagName","find","s","src","script","createElement","async","onload","event","Event","dispatchEvent","body","appendChild","render","React","style","className","onClick","children"],"mappings":"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"}
@@ -1,28 +1,88 @@
1
1
  declare type MaybeAsync<T> = T | Promise<T>;
2
2
  export interface IConnectionMethods {
3
3
  init: (licenseKey: string, fields: IDeveloperField[], settings: IDeveloperSettings, user: IUser, appHost?: string) => void;
4
+ initFromSavedSchema: (licenseKey: string, schemaName: string, appHost: string) => void;
5
+ setHeaderRowOverride: (headerRowOverride: number | null) => void;
4
6
  setNumRegisteredColHooks: (numColHooks: number) => void;
5
7
  setNumRegisteredRowHooks: (numRowHooks: number) => void;
6
8
  setNumRegisteredRowDeleteHooks: (numRowDeleteHooks: number) => void;
9
+ setUser: (user: IUser) => void;
7
10
  addField: (field: IDeveloperField, position?: IPositionSpec) => void;
8
11
  updateInfoMessages: (messages: IMessagesForCell[]) => void;
9
12
  }
10
- export declare type IPublicConnectionMethods = Pick<IConnectionMethods, "addField" | "updateInfoMessages">;
13
+ export declare type IPublicConnectionMethods = Pick<IConnectionMethods, "addField" | "updateInfoMessages" | "setHeaderRowOverride" | "setUser">;
11
14
  export declare type IDeveloperFieldType = "string" | "checkbox" | "select" | "number" | "date" | "datetime" | "time" | "email";
12
- export interface IDeveloperField {
15
+ export interface IAbstractDeveloperFieldUntyped {
13
16
  label: string;
14
17
  key: string;
15
- type?: IDeveloperFieldType | [IDeveloperFieldType, any];
18
+ type?: never;
16
19
  description?: string;
17
20
  alternateMatches?: string[];
18
21
  validators?: IValidatorField[];
19
- selectOptions?: {
22
+ invalidValueMessage?: string;
23
+ readOnly?: boolean;
24
+ hidden?: boolean;
25
+ }
26
+ export interface IAbstractDeveloperField<FieldType extends IDeveloperFieldType, FieldOpts = Record<string, never>> extends Omit<IAbstractDeveloperFieldUntyped, "type"> {
27
+ type: FieldType | [FieldType, FieldOpts];
28
+ }
29
+ declare type IStringField = IAbstractDeveloperFieldUntyped | IAbstractDeveloperField<"string">;
30
+ declare type ICheckboxField = IAbstractDeveloperField<"checkbox">;
31
+ export interface ISelectField extends IAbstractDeveloperField<"select"> {
32
+ selectOptions: {
20
33
  label: string;
21
34
  value: string;
22
35
  }[];
23
- invalidValueMessage?: string;
24
- readOnly?: boolean;
25
36
  }
37
+ declare type INumberPreset = "default" | "percent" | "percent_0" | "percent_1" | "percent_2" | "percent_3" | "percent_4" | "decimal_0" | "decimal_1" | "decimal_2" | "decimal_3" | "decimal_4" | "integer" | "plain" | "usd" | "usd_accounting" | "eur" | "gbp";
38
+ interface INumbroFormat {
39
+ output?: "currency" | "percent" | "byte" | "time" | "ordinal" | "number";
40
+ base?: "decimal" | "binary" | "general";
41
+ characteristic?: number;
42
+ prefix?: string;
43
+ postfix?: string;
44
+ forceAverage?: "trillion" | "billion" | "million" | "thousand";
45
+ average?: boolean;
46
+ currencyPosition?: "prefix" | "infix" | "postfix";
47
+ currencySymbol?: string;
48
+ totalLength?: number;
49
+ mantissa?: number;
50
+ optionalMantissa?: boolean;
51
+ trimMantissa?: boolean;
52
+ optionalCharacteristic?: boolean;
53
+ thousandSeparated?: boolean;
54
+ abbreviations?: {
55
+ thousand?: string;
56
+ million?: string;
57
+ billion?: string;
58
+ trillion?: string;
59
+ };
60
+ negative?: "sign" | "parenthesis";
61
+ forceSign?: boolean;
62
+ spaceSeparated?: boolean;
63
+ spaceSeparatedCurrency?: boolean;
64
+ spaceSeparatedAbbreviation?: boolean;
65
+ exponential?: boolean;
66
+ prefixSymbol?: boolean;
67
+ lowPrecision?: boolean;
68
+ roundingFunction?: (num: number) => number;
69
+ }
70
+ interface INumberOpts {
71
+ preset?: INumberPreset;
72
+ round?: number;
73
+ displayFormat?: INumbroFormat;
74
+ outputFormat?: INumbroFormat;
75
+ }
76
+ declare type INumberField = IAbstractDeveloperField<"number", INumberPreset | INumberOpts>;
77
+ interface IDateTimeOpts {
78
+ displayFormat?: string;
79
+ outputFormat?: string;
80
+ locale?: string;
81
+ withSeconds?: boolean;
82
+ }
83
+ declare type IDateTimeField = IAbstractDeveloperField<"date" | "time" | "datetime", IDateTimeOpts>;
84
+ declare type IEmailField = IAbstractDeveloperField<"email">;
85
+ export declare type IDeveloperField = IStringField | ICheckboxField | ISelectField | INumberField | IDateTimeField | IEmailField;
26
86
  interface IAbstractValidator<ValidateKey> {
27
87
  validate: ValidateKey;
28
88
  errorMessage?: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dromo-uploader-react",
3
- "version": "1.2.32",
3
+ "version": "1.3.0",
4
4
  "description": "Easy to use data (CSV, TSV, Excel) importer",
5
5
  "author": "ankitgoyal100",
6
6
  "license": "MIT",