dromo-uploader-react 1.2.28 → 1.2.29

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
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { IColumnHookInput, IColumnHookOutput, IColumnHook, IDeveloperField, IValidatorField, IDeveloperSettings, IRowHookInput, IRowHookOutput, IRowHook, IDeveloperStyleOverrides, IUser, IResultMetadata, EStepHook, IStepHook, IRowDeleteHook } from './interfaces';
2
+ import { IColumnHookInput, IColumnHookOutput, IColumnHook, IDeveloperField, IValidatorField, IDeveloperSettings, IRowHookInput, IRowHookOutput, IRowHook, IDeveloperStyleOverrides, IUser, IResultMetadata, EStepHook, IStepHook, IRowDeleteHook, IBulkRowHook, IBeforeFinishCallback } from './interfaces';
3
3
  interface Props {
4
4
  style?: React.CSSProperties;
5
5
  className?: string;
@@ -8,9 +8,11 @@ interface Props {
8
8
  fields: IDeveloperField[];
9
9
  settings: IDeveloperSettings;
10
10
  rowHooks?: IRowHook[];
11
+ bulkRowHooks?: IBulkRowHook[];
11
12
  rowDeleteHooks?: IRowDeleteHook[];
12
13
  columnHooks?: IColumnHook[];
13
14
  stepHooks?: IStepHook[];
15
+ beforeFinish?: IBeforeFinishCallback;
14
16
  onResults?: (data: any, metadata: IResultMetadata) => void;
15
17
  onCancel?: () => void;
16
18
  children: React.ReactNode;
package/dist/index.js CHANGED
@@ -24,7 +24,7 @@ var EBackendSyncMode;
24
24
 
25
25
  (function (EBackendSyncMode) {
26
26
  EBackendSyncMode["DISABLED"] = "DISABLED";
27
- EBackendSyncMode["COLUMNS_ONLY"] = "COLUMNS_ONLY";
27
+ EBackendSyncMode["MAPPINGS_ONLY"] = "MAPPINGS_ONLY";
28
28
  EBackendSyncMode["FULL_DATA"] = "FULL_DATA";
29
29
  })(EBackendSyncMode || (EBackendSyncMode = {}));
30
30
 
@@ -48,6 +48,12 @@ var DromoReactUploader = /*#__PURE__*/function (_React$Component) {
48
48
  });
49
49
  }
50
50
 
51
+ if (_this.props.bulkRowHooks) {
52
+ _this.props.bulkRowHooks.forEach(function (hook) {
53
+ return _this.dromo.registerBulkRowHook(hook);
54
+ });
55
+ }
56
+
51
57
  if (_this.props.columnHooks) {
52
58
  _this.props.columnHooks.forEach(function (hook) {
53
59
  _this.dromo.registerColumnHook(hook.fieldName, hook.callback);
@@ -60,6 +66,10 @@ var DromoReactUploader = /*#__PURE__*/function (_React$Component) {
60
66
  });
61
67
  }
62
68
 
69
+ if (_this.props.beforeFinish) {
70
+ _this.dromo.beforeFinish(_this.props.beforeFinish);
71
+ }
72
+
63
73
  if (_this.props.onResults) {
64
74
  _this.dromo.onResults(_this.props.onResults);
65
75
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/interfaces.ts","../src/index.tsx"],"sourcesContent":["export 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}\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 };\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}\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 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: (\n values: IColumnHookInput[]\n ) => IColumnHookOutput[] | Promise<IColumnHookOutput[]>;\n}\n\nexport interface IRowHook {\n (data: IRowHookInput, mode: \"init\" | \"update\"):\n | IRowHookOutput\n | Promise<IRowHookOutput>;\n}\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: any,\n data: IUploadStepData | IReviewStepData | IReviewStepPostHooksData\n ) => void | Promise<void>;\n}\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 COLUMNS_ONLY = \"COLUMNS_ONLY\",\n FULL_DATA = \"FULL_DATA\",\n}\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} 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 rowDeleteHooks?: IRowDeleteHook[]\n columnHooks?: IColumnHook[]\n stepHooks?: IStepHook[]\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.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.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","columnHooks","registerColumnHook","fieldName","callback","rowDeleteHooks","registerRowDeleteHook","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 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 };\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 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: any,\n data: IUploadStepData | IReviewStepData | IReviewStepPostHooksData\n ) => MaybeAsync<void>;\n}\n\nexport type IBeforeFinishCallback = (\n data: Record<string, any>[],\n metadata: IResultMetadata,\n instance: any\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","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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"}
@@ -26,7 +26,7 @@ var EBackendSyncMode;
26
26
 
27
27
  (function (EBackendSyncMode) {
28
28
  EBackendSyncMode["DISABLED"] = "DISABLED";
29
- EBackendSyncMode["COLUMNS_ONLY"] = "COLUMNS_ONLY";
29
+ EBackendSyncMode["MAPPINGS_ONLY"] = "MAPPINGS_ONLY";
30
30
  EBackendSyncMode["FULL_DATA"] = "FULL_DATA";
31
31
  })(EBackendSyncMode || (EBackendSyncMode = {}));
32
32
 
@@ -50,6 +50,12 @@ var DromoReactUploader = /*#__PURE__*/function (_React$Component) {
50
50
  });
51
51
  }
52
52
 
53
+ if (_this.props.bulkRowHooks) {
54
+ _this.props.bulkRowHooks.forEach(function (hook) {
55
+ return _this.dromo.registerBulkRowHook(hook);
56
+ });
57
+ }
58
+
53
59
  if (_this.props.columnHooks) {
54
60
  _this.props.columnHooks.forEach(function (hook) {
55
61
  _this.dromo.registerColumnHook(hook.fieldName, hook.callback);
@@ -62,6 +68,10 @@ var DromoReactUploader = /*#__PURE__*/function (_React$Component) {
62
68
  });
63
69
  }
64
70
 
71
+ if (_this.props.beforeFinish) {
72
+ _this.dromo.beforeFinish(_this.props.beforeFinish);
73
+ }
74
+
65
75
  if (_this.props.onResults) {
66
76
  _this.dromo.onResults(_this.props.onResults);
67
77
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.modern.js","sources":["../src/interfaces.ts","../src/index.tsx"],"sourcesContent":["export 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}\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 };\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}\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 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: (\n values: IColumnHookInput[]\n ) => IColumnHookOutput[] | Promise<IColumnHookOutput[]>;\n}\n\nexport interface IRowHook {\n (data: IRowHookInput, mode: \"init\" | \"update\"):\n | IRowHookOutput\n | Promise<IRowHookOutput>;\n}\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: any,\n data: IUploadStepData | IReviewStepData | IReviewStepPostHooksData\n ) => void | Promise<void>;\n}\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 COLUMNS_ONLY = \"COLUMNS_ONLY\",\n FULL_DATA = \"FULL_DATA\",\n}\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} 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 rowDeleteHooks?: IRowDeleteHook[]\n columnHooks?: IColumnHook[]\n stepHooks?: IStepHook[]\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.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.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","columnHooks","registerColumnHook","fieldName","callback","rowDeleteHooks","registerRowDeleteHook","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 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 };\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 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: any,\n data: IUploadStepData | IReviewStepData | IReviewStepPostHooksData\n ) => MaybeAsync<void>;\n}\n\nexport type IBeforeFinishCallback = (\n data: Record<string, any>[],\n metadata: IResultMetadata,\n instance: any\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","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,3 +1,4 @@
1
+ declare type MaybeAsync<T> = T | Promise<T>;
1
2
  export declare type IDeveloperFieldType = "string" | "checkbox" | "select" | "number" | "date" | "datetime" | "time" | "email";
2
3
  export interface IDeveloperField {
3
4
  label: string;
@@ -11,6 +12,7 @@ export interface IDeveloperField {
11
12
  value: string;
12
13
  }[];
13
14
  invalidValueMessage?: string;
15
+ readOnly?: boolean;
14
16
  }
15
17
  interface IAbstractValidator<ValidateKey> {
16
18
  validate: ValidateKey;
@@ -79,6 +81,7 @@ export interface IDeveloperSettings {
79
81
  } | null;
80
82
  locale?: TLocaleShorthand;
81
83
  templateDownloadFilename?: string;
84
+ browserExcelParsing?: boolean;
82
85
  }
83
86
  export interface IDeveloperStyleOverrides {
84
87
  global?: {
@@ -151,11 +154,12 @@ export interface IMessagesForCell extends ICellRef {
151
154
  }
152
155
  export interface IColumnHook {
153
156
  fieldName: string;
154
- callback: (values: IColumnHookInput[]) => IColumnHookOutput[] | Promise<IColumnHookOutput[]>;
157
+ callback: (values: IColumnHookInput[]) => MaybeAsync<IColumnHookOutput[]>;
155
158
  }
156
159
  export interface IRowHook {
157
- (data: IRowHookInput, mode: "init" | "update"): IRowHookOutput | Promise<IRowHookOutput>;
160
+ (data: IRowHookInput, mode: "init" | "update"): MaybeAsync<IRowHookOutput>;
158
161
  }
162
+ export declare type IBulkRowHook = (data: IRowHookInput[], mode: "init" | "update") => IRowHookOutputInternal[] | Promise<IRowHookOutputInternal[]>;
159
163
  export interface IRowDeleteHook {
160
164
  (data: IRowHookInput): void;
161
165
  }
@@ -229,8 +233,13 @@ export interface IReviewStepPostHooksData {
229
233
  }
230
234
  export interface IStepHook {
231
235
  type: keyof typeof EStepHook;
232
- callback: (uploader: any, data: IUploadStepData | IReviewStepData | IReviewStepPostHooksData) => void | Promise<void>;
236
+ callback: (uploader: any, data: IUploadStepData | IReviewStepData | IReviewStepPostHooksData) => MaybeAsync<void>;
233
237
  }
238
+ export declare type IBeforeFinishCallback = (data: Record<string, any>[], metadata: IResultMetadata, instance: any) => MaybeAsync<IBeforeFinishOutput>;
239
+ export declare type IBeforeFinishOutput = void | {
240
+ cancel: true;
241
+ message: string;
242
+ };
234
243
  export declare enum EInvalidDataBehavior {
235
244
  BLOCK_SUBMIT = "BLOCK_SUBMIT",
236
245
  REMOVE_INVALID_ROWS = "REMOVE_INVALID_ROWS",
@@ -238,7 +247,7 @@ export declare enum EInvalidDataBehavior {
238
247
  }
239
248
  export declare enum EBackendSyncMode {
240
249
  DISABLED = "DISABLED",
241
- COLUMNS_ONLY = "COLUMNS_ONLY",
250
+ MAPPINGS_ONLY = "MAPPINGS_ONLY",
242
251
  FULL_DATA = "FULL_DATA"
243
252
  }
244
253
  export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dromo-uploader-react",
3
- "version": "1.2.28",
3
+ "version": "1.2.29",
4
4
  "description": "Easy to use data (CSV, TSV, Excel) importer",
5
5
  "author": "ankitgoyal100",
6
6
  "license": "MIT",