@sumit_yewale/angular 1.1.18 → 1.1.20

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.
@@ -1 +1 @@
1
- {"version":3,"file":"sumit_yewale-angular.js","sources":["ng://@sumit_yewale/angular/utlis/insertCSS.ts","ng://@sumit_yewale/angular/lib/csvbox-button.component.ts","ng://@sumit_yewale/angular/lib/csvbox-angular.module.ts","ng://@sumit_yewale/angular/lib/interfaces/interface.ts"],"sourcesContent":["let styleElement: HTMLStyleElement\n\nconst GLOBAL_CSS = `\n.csvbox-holder {\n z-index: 2147483647;\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: none;\n}\n.csvbox-holder iframe {\n height: 100%;\n width: 100%;\n position: absolute;\n top: 0px;\n left: 0px;\n}\n`\n\nexport const insertCSS = (): void => {\n if (styleElement) {\n return\n }\n\n styleElement = document.createElement('style')\n styleElement.setAttribute('type', 'text/css')\n const head = document.querySelector('head');\n if (head) {\n head.appendChild(styleElement);\n }\n\n styleElement.textContent = GLOBAL_CSS\n}\n","import {\n Component,\n OnInit,\n ViewChild,\n Input,\n OnChanges,\n SimpleChanges,\n SecurityContext,\n AfterContentInit\n} from '@angular/core';\n\nimport { DomSanitizer, SafeUrl } from '@angular/platform-browser';\nimport { insertCSS } from '../utlis/insertCSS';\nimport { buildImportUrl, generateUuid, buildInitPayload, classifyStructuredMessage } from '@sumit_yewale/adapter-core';\n\nconst appVersion = '1.1.16';\n\n@Component({\n selector: 'csvbox-button',\n template: `\n <div>\n <button [disabled]=\"disabled\" #initiator (click)=\"openModal()\" [attr.data-csvbox-token]=\"uuid\">\n <ng-content></ng-content>\n </button>\n </div>\n `\n})\n\nexport class CSVBoxButtonComponent implements OnInit, OnChanges, AfterContentInit {\n\n isModalShown = false;\n\n @ViewChild('initiator', {static: false}) initiator: any;\n @Input() onImport?: Function;\n @Input() onReady?: Function;\n @Input() onClose?: Function;\n @Input() onSubmit?: Function;\n\n @Input() isImported?: Function;\n @Input() isReady?: Function;\n @Input() isClosed?: Function;\n @Input() isSubmitted?: Function;\n\n @Input() importerReady?: Function;\n @Input() closed?: Function;\n @Input() submitted?: Function;\n @Input() imported?: Function;\n @Input() loadStarted?: Function;\n\n @Input() user?: object;\n @Input() dynamicColumns?: object;\n @Input() licenseKey: string | null = null;\n @Input() options?: object;\n @Input() uuid: string | null = null;\n @Input() customDomain: string | null = null;\n @Input() dataLocation: string | null = null;\n @Input() language: string | null = null;\n @Input() environment?: object;\n\n @Input() theme: string | null = null;\n\n @Input() isIframeLoaded: boolean = false;\n @Input() openModalOnIframeLoad: boolean = false;\n\n @Input() lazy: boolean = false;\n\n safeUrl: any;\n\n iframe: HTMLIFrameElement | null = null;\n\n @Input() disabled: boolean = true;\n\n constructor(public sanitizer:DomSanitizer) {}\n\n holder: any;\n\n ngOnInit(): void {\n this.uuid = generateUuid();\n let iframeUrl = buildImportUrl(\n {\n licenseKey: this.licenseKey,\n customDomain: this.customDomain,\n dataLocation: this.dataLocation,\n language: this.language,\n theme: this.theme,\n environment: this.environment\n },\n \"angular\",\n appVersion\n );\n this.safeUrl = this.sanitizer.sanitize(SecurityContext.RESOURCE_URL, this.sanitizer.bypassSecurityTrustResourceUrl(iframeUrl));\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if(changes[\"user\"] && changes['user'].currentValue != changes['user'].previousValue) {\n this.updateUserVariabe(changes['user'].currentValue);\n }\n }\n\n updateUserVariabe(data: any): void {\n this.user = data;\n if (this.iframe && this.iframe.contentWindow) {\n this.iframe.contentWindow.postMessage({\n \"customer\" : data\n }, \"*\");\n }\n }\n\n ngAfterContentInit(): void {\n window.addEventListener(\"message\", (event) => {\n let message = classifyStructuredMessage(event.data, this.uuid!);\n if (!message) {\n return;\n }\n\n if (message.type === \"data-on-submit\") {\n if (this.onSubmit) this.onSubmit(message.metadata);\n if (this.isSubmitted) this.isSubmitted(message.metadata);\n if (this.submitted) this.submitted(message.metadata);\n } else if (message.type === \"data-push-status\") {\n if (!message.success) {\n delete message.metadata[\"unique_token\"];\n }\n if (this.onImport) this.onImport(message.success, message.metadata);\n if (this.isImported) this.isImported(message.success, message.metadata);\n if (this.imported) this.imported(message.success, message.metadata);\n } else if (message.type === \"csvbox-modal-hidden\") {\n this.handleModalClosed();\n } else if (message.type === \"csvbox-upload-successful\") {\n if (this.onImport) this.onImport(true);\n if (this.isImported) this.isImported(true);\n if (this.imported) this.imported(true);\n } else if (message.type === \"csvbox-upload-failed\") {\n if (this.onImport) this.onImport(false);\n if (this.isImported) this.isImported(false);\n if (this.imported) this.imported(false);\n }\n }, false);\n\n if(this.lazy) {\n this.disabled = false;\n } else {\n this.disabled = true;\n this.initImporter();\n }\n }\n\n handleModalClosed(): void {\n if (this.holder) this.holder.style.display = 'none';\n this.isModalShown = false;\n this.isIframeLoaded = false;\n this.openModalOnIframeLoad = false;\n if (this.holder) this.holder.remove();\n this.holder = null;\n this.iframe = null;\n if (this.onClose) this.onClose();\n if (this.isClosed) this.isClosed();\n if (this.closed) this.closed();\n }\n\n initImporter() {\n if (this.loadStarted) this.loadStarted();\n\n this.uuid = generateUuid();\n\n insertCSS();\n\n let iframe = document.createElement(\"iframe\");\n this.iframe = iframe;\n iframe.setAttribute(\"src\", this.safeUrl);\n iframe.frameBorder = \"0\";\n\n let self = this;\n iframe.onload = function () {\n if (self.onReady) self.onReady();\n if (self.isReady) self.isReady();\n if (self.importerReady) self.importerReady();\n\n self.disabled = false;\n self.isIframeLoaded = true;\n if (self.iframe && self.iframe.contentWindow) {\n self.iframe.contentWindow.postMessage(buildInitPayload(self.user, self.dynamicColumns, self.options, self.uuid!), \"*\");\n }\n if(self.openModalOnIframeLoad) {\n self.openModal();\n }\n }\n\n this.holder = document.createElement('div');\n this.holder.classList.add('csvbox-holder');\n this.holder.setAttribute('id', `csvbox-embed-${this.uuid}`);\n this.holder.appendChild(iframe);\n\n document.body.insertAdjacentElement(\n 'beforeend', this.holder\n );\n }\n\n openModal(): void {\n if(!this.iframe) {\n this.openModalOnIframeLoad = true;\n this.initImporter();\n return;\n }\n if(!this.isModalShown) {\n if(this.isIframeLoaded) {\n this.isModalShown = true;\n if(this.holder) this.holder.style.display = 'block';\n if(this.iframe && this.iframe.contentWindow) {\n this.iframe.contentWindow.postMessage('openModal', '*');\n }\n } else {\n this.openModalOnIframeLoad = true;\n }\n }\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CSVBoxButtonComponent } from './csvbox-button.component';\n\n\n\n@NgModule({\n declarations: [\n CSVBoxButtonComponent\n ],\n imports: [\n ],\n exports: [\n CSVBoxButtonComponent\n ]\n})\nexport class CSVBoxAngularModule { }\n","export interface CSVBoxMethods {\n onData?: (result:boolean, data:any) => void;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sumit_yewale-angular.js","sources":["ng://@sumit_yewale/angular/utlis/insertCSS.ts","ng://@sumit_yewale/angular/lib/csvbox-button.component.ts","ng://@sumit_yewale/angular/lib/csvbox-angular.module.ts","ng://@sumit_yewale/angular/lib/interfaces/interface.ts"],"sourcesContent":["let styleElement: HTMLStyleElement\n\nconst GLOBAL_CSS = `\n.csvbox-holder {\n z-index: 2147483647;\n position: fixed;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n display: none;\n}\n.csvbox-holder iframe {\n height: 100%;\n width: 100%;\n position: absolute;\n top: 0px;\n left: 0px;\n}\n`\n\nexport const insertCSS = (): void => {\n if (styleElement) {\n return\n }\n\n styleElement = document.createElement('style')\n styleElement.setAttribute('type', 'text/css')\n const head = document.querySelector('head');\n if (head) {\n head.appendChild(styleElement);\n }\n\n styleElement.textContent = GLOBAL_CSS\n}\n","import {\n Component,\n OnInit,\n Input,\n OnChanges,\n SimpleChanges,\n SecurityContext,\n AfterContentInit,\n OnDestroy,\n ChangeDetectorRef,\n NgZone\n} from '@angular/core';\n\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { insertCSS } from '../utlis/insertCSS';\nimport { buildImportUrl, generateUuid, buildInitPayload, createFileSender, classifyStructuredMessage, classifyLegacyMessage } from '@sumit_yewale/adapter-core';\n\n// How long we wait for the importer to confirm a file it was sent before giving up on it.\nconst FILE_ACK_TIMEOUT_MS = 8000;\n\n// Page-wide record of the importers that are open or opening, shared by every CSVBox adapter\n// on the page (it lives on window so separate copies of an adapter see the same list). It does\n// two things: the newest importer is stacked on top (every holder is fixed, full screen and\n// z-index 2147483647, so equal z-indexes would leave the one that comes first in the DOM on\n// top), and the other instances learn that an importer is open so they can disable their button.\ninterface OpenImporterEntry { getHolder: () => HTMLElement | null; }\ninterface OpenImporters { open: OpenImporterEntry[]; listeners: Array<() => void>; }\nconst OPEN_IMPORTERS_KEY = '__csvboxOpenImporters';\nconst TOP_Z_INDEX = 2147483647;\n\nfunction openImporters(): OpenImporters {\n const w = window as any;\n if (!w[OPEN_IMPORTERS_KEY]) w[OPEN_IMPORTERS_KEY] = { open: [], listeners: [] };\n return w[OPEN_IMPORTERS_KEY];\n}\n\nfunction restackOpenImporters(reg: OpenImporters): void {\n reg.open.forEach((entry, i) => {\n const holder = entry.getHolder();\n if (holder) holder.style.zIndex = String(TOP_Z_INDEX - (reg.open.length - 1 - i));\n });\n}\n\nfunction registerOpenImporter(entry: OpenImporterEntry): void {\n const reg = openImporters();\n if (reg.open.indexOf(entry) >= 0) return;\n reg.open.push(entry);\n restackOpenImporters(reg);\n reg.listeners.slice().forEach(fn => fn());\n}\n\nfunction unregisterOpenImporter(entry: OpenImporterEntry): void {\n const reg = openImporters();\n const i = reg.open.indexOf(entry);\n if (i < 0) return;\n reg.open.splice(i, 1);\n restackOpenImporters(reg);\n reg.listeners.slice().forEach(fn => fn());\n}\n\nfunction isBlockedByOpenImporter(entry: OpenImporterEntry): boolean {\n const reg = openImporters();\n return reg.open.length > 0 && reg.open.indexOf(entry) < 0;\n}\n\nfunction subscribeOpenImporters(fn: () => void): () => void {\n const reg = openImporters();\n reg.listeners.push(fn);\n return () => {\n const i = reg.listeners.indexOf(fn);\n if (i >= 0) reg.listeners.splice(i, 1);\n };\n}\n\nconst appVersion = '1.1.20';\n\n@Component({\n selector: 'csvbox-button',\n template: `\n <div>\n <button [disabled]=\"disabled || blockedByOther\" (click)=\"openModal()\" [attr.data-csvbox-token]=\"uuid\">\n <ng-content></ng-content>\n </button>\n </div>\n `\n})\n\nexport class CSVBoxButtonComponent implements OnInit, OnChanges, AfterContentInit, OnDestroy {\n\n isModalShown = false;\n\n @Input() onImport?: Function;\n @Input() onReady?: Function;\n @Input() onClose?: Function;\n @Input() onSubmit?: Function;\n\n @Input() isImported?: Function;\n @Input() isReady?: Function;\n @Input() isClosed?: Function;\n @Input() isSubmitted?: Function;\n\n @Input() importerReady?: Function;\n @Input() closed?: Function;\n @Input() submitted?: Function;\n @Input() imported?: Function;\n @Input() loadStarted?: Function;\n\n @Input() user?: object;\n @Input() dynamicColumns?: object;\n @Input() licenseKey: string | null = null;\n @Input() options?: object;\n @Input() uuid: string | null = null;\n @Input() customDomain: string | null = null;\n @Input() dataLocation: string | null = null;\n @Input() language: string | null = null;\n @Input() environment?: object;\n\n @Input() theme: string | null = null;\n\n @Input() isIframeLoaded: boolean = false;\n @Input() openModalOnIframeLoad: boolean = false;\n\n @Input() lazy: boolean = false;\n\n safeUrl: any;\n\n iframe: HTMLIFrameElement | null = null;\n\n @Input() disabled: boolean = true;\n\n constructor(public sanitizer:DomSanitizer, private cdr: ChangeDetectorRef, private zone: NgZone) {}\n\n // True while a different importer on the page is open: the button stays disabled.\n blockedByOther: boolean = false;\n\n private registryEntry: OpenImporterEntry = { getHolder: () => this.holder };\n\n private fileSender = createFileSender({\n getIframe: () => this.iframe,\n getToken: () => this.uuid as string,\n getTargetOrigin: () => this.targetOrigin as string,\n getBaseDomain: () => this.baseDomain,\n takeFile: () => {\n const file = this.pendingFile;\n this.pendingFile = null;\n return file;\n },\n onSent: () => this.startFileAckTimer()\n });\n\n private unsubscribeOpenImporters: (() => void) | null = null;\n\n holder: any;\n\n pendingFile: File | null = null;\n\n targetOrigin: string | undefined;\n\n // Data-location sheets redirect to another host, so the iframe origin can differ from\n // targetOrigin. baseDomain is used to check the real origin before trusting it.\n baseDomain: string = \"app.csvbox.io\";\n\n private fileAckTimer: any = null;\n\n ngOnInit(): void {\n this.uuid = generateUuid();\n let iframeUrl = buildImportUrl(\n {\n licenseKey: this.licenseKey,\n customDomain: this.customDomain,\n dataLocation: this.dataLocation,\n language: this.language,\n theme: this.theme,\n environment: this.environment\n },\n \"angular\",\n appVersion\n );\n // Default place to send the file. A file is only ever sent to a named origin, never \"*\".\n this.targetOrigin = new URL(iframeUrl).origin;\n this.baseDomain = this.customDomain || \"app.csvbox.io\";\n this.safeUrl = this.sanitizer.sanitize(SecurityContext.RESOURCE_URL, this.sanitizer.bypassSecurityTrustResourceUrl(iframeUrl));\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if(changes[\"user\"] && changes['user'].currentValue != changes['user'].previousValue) {\n this.updateUserVariabe(changes['user'].currentValue);\n }\n }\n\n updateUserVariabe(data: any): void {\n this.user = data;\n if (this.iframe && this.iframe.contentWindow) {\n this.iframe.contentWindow.postMessage({\n \"customer\" : data\n }, \"*\");\n }\n }\n\n private messageListener = (event: MessageEvent) => {\n // Older importers send these as bare strings, without a token.\n const legacy = classifyLegacyMessage(event.data);\n if (legacy) {\n // Legacy messages carry no token, so the only way to tell which importer sent one is its\n // window. Ignore those that came from another instance's iframe (or anywhere else).\n if (!this.iframe || event.source !== this.iframe.contentWindow) {\n return;\n }\n if (legacy.type === \"mainModalHidden\") {\n this.handleModalClosed();\n } else if (legacy.type === \"uploadSuccessful\") {\n if (this.onImport) this.onImport(true);\n if (this.isImported) this.isImported(true);\n if (this.imported) this.imported(true);\n } else if (legacy.type === \"uploadFailed\") {\n if (this.onImport) this.onImport(false);\n if (this.isImported) this.isImported(false);\n if (this.imported) this.imported(false);\n }\n return;\n }\n\n // Set-file handshake messages. The shared core does not classify these, so they are\n // read here, behind the same unique_token check the core applies.\n const raw = event.data;\n if (raw && typeof raw === \"object\" && raw.data && raw.data.unique_token == this.uuid) {\n this.fileSender.learnOrigin(event);\n\n if (raw.type === \"csvbox-set-file-rejected\" && raw.data.reason === \"not-a-file\") {\n // Reply to our probe (it has no file). It only tells us the origin, so do nothing.\n return;\n }\n if (raw.type === \"csvbox-modal-shown\") {\n this.clearFileAckTimer();\n registerOpenImporter(this.registryEntry);\n // What the file path in openModal() is waiting for. display as well as\n // pointer-events: a second file declined while the first was still opening the\n // modal has put the holder away in the meantime.\n this.isModalShown = true;\n if (this.holder) {\n this.holder.style.display = 'block';\n this.holder.style.pointerEvents = 'auto';\n }\n return;\n }\n if (raw.type === \"csvbox-set-file-rejected\") {\n this.clearFileAckTimer();\n // The importer has the file and will not take it. Put the holder away only if the\n // modal was never confirmed up: a file declined while it is open leaves that modal\n // where it is, and its own 'csvbox-modal-hidden' will put the holder away.\n if (!this.isModalShown && this.holder) {\n this.holder.style.display = 'none';\n this.holder.style.pointerEvents = 'auto';\n unregisterOpenImporter(this.registryEntry);\n }\n console.warn(\"[csvbox] importer declined the supplied file: \" + raw.data.reason);\n return;\n }\n }\n\n let message = classifyStructuredMessage(event.data, this.uuid!);\n if (!message) {\n return;\n }\n\n if (message.type === \"data-on-submit\") {\n if (this.onSubmit) this.onSubmit(message.metadata);\n if (this.isSubmitted) this.isSubmitted(message.metadata);\n if (this.submitted) this.submitted(message.metadata);\n } else if (message.type === \"data-push-status\") {\n if (!message.success) {\n delete message.metadata[\"unique_token\"];\n }\n if (this.onImport) this.onImport(message.success, message.metadata);\n if (this.isImported) this.isImported(message.success, message.metadata);\n if (this.imported) this.imported(message.success, message.metadata);\n } else if (message.type === \"csvbox-modal-hidden\") {\n this.handleModalClosed();\n } else if (message.type === \"csvbox-upload-successful\") {\n if (this.onImport) this.onImport(true);\n if (this.isImported) this.isImported(true);\n if (this.imported) this.imported(true);\n } else if (message.type === \"csvbox-upload-failed\") {\n if (this.onImport) this.onImport(false);\n if (this.isImported) this.isImported(false);\n if (this.imported) this.imported(false);\n }\n };\n\n ngAfterContentInit(): void {\n window.addEventListener(\"message\", this.messageListener, false);\n this.syncBlocked();\n this.unsubscribeOpenImporters = subscribeOpenImporters(() => this.syncBlocked());\n\n if(this.lazy) {\n this.disabled = false;\n } else {\n this.disabled = true;\n this.initImporter();\n }\n }\n\n handleModalClosed(): void {\n if (this.holder) {\n this.holder.style.display = 'none';\n this.holder.style.pointerEvents = 'auto';\n }\n this.isModalShown = false;\n this.isIframeLoaded = false;\n this.openModalOnIframeLoad = false;\n if (this.holder) this.holder.remove();\n this.holder = null;\n this.iframe = null;\n // A new iframe is built on the next open, so the origin is learned again.\n this.clearProbeTimer();\n unregisterOpenImporter(this.registryEntry);\n if (this.onClose) this.onClose();\n if (this.isClosed) this.isClosed();\n if (this.closed) this.closed();\n }\n\n initImporter() {\n if (this.loadStarted) this.loadStarted();\n\n this.uuid = generateUuid();\n\n insertCSS();\n\n let iframe = document.createElement(\"iframe\");\n this.iframe = iframe;\n iframe.setAttribute(\"src\", this.safeUrl);\n iframe.setAttribute(\"allow\", \"clipboard-read; clipboard-write *\");\n iframe.frameBorder = \"0\";\n\n let self = this;\n iframe.onload = function () {\n if (self.onReady) self.onReady();\n if (self.isReady) self.isReady();\n if (self.importerReady) self.importerReady();\n\n self.disabled = false;\n self.isIframeLoaded = true;\n if (self.iframe && self.iframe.contentWindow) {\n self.iframe.contentWindow.postMessage(buildInitPayload(self.user, self.dynamicColumns, self.options, self.uuid!), \"*\");\n }\n if(self.openModalOnIframeLoad) {\n self.openModal();\n }\n }\n\n this.holder = document.createElement('div');\n this.holder.classList.add('csvbox-holder');\n this.holder.setAttribute('id', `csvbox-embed-${this.uuid}`);\n this.holder.appendChild(iframe);\n\n document.body.insertAdjacentElement(\n 'beforeend', this.holder\n );\n // The holder did not exist yet if openModal() asked for the importer before it was built.\n restackOpenImporters(openImporters());\n }\n\n openModal(): void {\n // Counts as open from the moment it is requested, so the other buttons are disabled while\n // this importer is still loading, and so it is stacked above any importer opened earlier.\n registerOpenImporter(this.registryEntry);\n if(!this.iframe) {\n this.openModalOnIframeLoad = true;\n this.initImporter();\n return;\n }\n if(!this.isModalShown) {\n if(this.isIframeLoaded) {\n if(this.pendingFile) {\n // The importer opens its own modal once it has the file, so that it can inject on\n // 'shown.bs.modal'. Sending 'openModal' as well would race that.\n //\n // It can also decline: wrong step, an import file URL configured on the sheet, or\n // an importer too old to know the message at all. So the holder goes up\n // click-through and stays that way until 'csvbox-modal-shown' confirms the modal\n // is really up. It covers the viewport at z-index 2147483647 and the importer\n // renders transparent with its modal closed, so arming it on an unanswered message\n // leaves an invisible sheet over the host page eating every click.\n //\n // display:block regardless, so the iframe lays out and animates normally; only\n // pointer-events is held back. isModalShown likewise waits for the confirmation,\n // or a declined file would latch the importer shut for good.\n if(this.holder) {\n this.holder.style.pointerEvents = 'none';\n this.holder.style.display = 'block';\n }\n this.fileSender.send();\n } else {\n this.isModalShown = true;\n if(this.holder) {\n // Explicit: a previously declined file leaves the holder click-through.\n this.holder.style.pointerEvents = 'auto';\n this.holder.style.display = 'block';\n }\n if(this.iframe && this.iframe.contentWindow) {\n this.iframe.contentWindow.postMessage('openModal', '*');\n }\n }\n } else {\n this.openModalOnIframeLoad = true;\n }\n }\n }\n\n /**\n * Open the importer on a File the host page already has, instead of the file picker.\n *\n * Reachable through a template reference (`#importer` then `importer.openModalWithFile(file)`)\n * or `@ViewChild(CSVBoxButtonComponent)`.\n *\n * The File crosses to the iframe by structured clone, so the importer receives the real\n * object and applies its own extension, worksheet and size rules to it -- this does not\n * bypass any of them. Pass a File; a Blob has no name for the importer to read an\n * extension from.\n */\n openModalWithFile(file: File): void {\n if(typeof File === 'undefined' || !(file instanceof File)) {\n return;\n }\n\n this.pendingFile = file;\n\n // Already open: hand it over now rather than holding it for the next open. The importer\n // takes it only while it is still on the upload step, and ignores it once the user has a\n // dataset and a mapping in progress.\n if(this.isModalShown && this.iframe && this.isIframeLoaded) {\n this.fileSender.send();\n return;\n }\n\n this.openModal();\n }\n\n clearProbeTimer(): void {\n this.clearFileAckTimer();\n this.fileSender.reset();\n }\n\n startFileAckTimer(): void {\n this.clearFileAckTimer();\n this.fileAckTimer = setTimeout(() => {\n this.fileAckTimer = null;\n this.giveUpOnFile();\n }, FILE_ACK_TIMEOUT_MS);\n }\n\n clearFileAckTimer(): void {\n if (this.fileAckTimer) {\n clearTimeout(this.fileAckTimer);\n this.fileAckTimer = null;\n }\n }\n\n // The importer never confirmed the file it was sent (an origin we do not trust, or an importer too\n // old to know the message). Without this the holder would stay up, invisible and click-through,\n // and the other instances' buttons would stay disabled for good.\n giveUpOnFile(): void {\n if (this.isModalShown) {\n return;\n }\n const holder = this.holder;\n if (holder) {\n holder.style.display = 'none';\n holder.style.pointerEvents = 'auto';\n }\n unregisterOpenImporter(this.registryEntry);\n console.warn(\"[csvbox] the importer did not respond to the supplied file\");\n }\n\n private syncBlocked(): void {\n const blocked = isBlockedByOpenImporter(this.registryEntry);\n if (blocked !== this.blockedByOther) {\n // The registry can call back from outside Angular's zone (another instance, another app).\n this.zone.run(() => {\n this.blockedByOther = blocked;\n this.cdr.markForCheck();\n });\n }\n }\n\n ngOnDestroy(): void {\n this.clearProbeTimer();\n window.removeEventListener(\"message\", this.messageListener);\n unregisterOpenImporter(this.registryEntry);\n if (this.unsubscribeOpenImporters) {\n this.unsubscribeOpenImporters();\n this.unsubscribeOpenImporters = null;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CSVBoxButtonComponent } from './csvbox-button.component';\n\n\n\n@NgModule({\n declarations: [\n CSVBoxButtonComponent\n ],\n imports: [\n ],\n exports: [\n CSVBoxButtonComponent\n ]\n})\nexport class CSVBoxAngularModule { }\n","export interface CSVBoxMethods {\n onData?: (result:boolean, data:any) => void;\n}\n"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
- import { OnInit, OnChanges, SimpleChanges, AfterContentInit } from '@angular/core';
1
+ import { OnInit, OnChanges, SimpleChanges, AfterContentInit, OnDestroy, ChangeDetectorRef, NgZone } from '@angular/core';
2
2
  import { DomSanitizer } from '@angular/platform-browser';
3
- export declare class CSVBoxButtonComponent implements OnInit, OnChanges, AfterContentInit {
3
+ export declare class CSVBoxButtonComponent implements OnInit, OnChanges, AfterContentInit, OnDestroy {
4
4
  sanitizer: DomSanitizer;
5
+ private cdr;
6
+ private zone;
5
7
  isModalShown: boolean;
6
- initiator: any;
7
8
  onImport?: Function;
8
9
  onReady?: Function;
9
10
  onClose?: Function;
@@ -33,13 +34,40 @@ export declare class CSVBoxButtonComponent implements OnInit, OnChanges, AfterCo
33
34
  safeUrl: any;
34
35
  iframe: HTMLIFrameElement | null;
35
36
  disabled: boolean;
36
- constructor(sanitizer: DomSanitizer);
37
+ constructor(sanitizer: DomSanitizer, cdr: ChangeDetectorRef, zone: NgZone);
38
+ blockedByOther: boolean;
39
+ private registryEntry;
40
+ private fileSender;
41
+ private unsubscribeOpenImporters;
37
42
  holder: any;
43
+ pendingFile: File | null;
44
+ targetOrigin: string | undefined;
45
+ baseDomain: string;
46
+ private fileAckTimer;
38
47
  ngOnInit(): void;
39
48
  ngOnChanges(changes: SimpleChanges): void;
40
49
  updateUserVariabe(data: any): void;
50
+ private messageListener;
41
51
  ngAfterContentInit(): void;
42
52
  handleModalClosed(): void;
43
53
  initImporter(): void;
44
54
  openModal(): void;
55
+ /**
56
+ * Open the importer on a File the host page already has, instead of the file picker.
57
+ *
58
+ * Reachable through a template reference (`#importer` then `importer.openModalWithFile(file)`)
59
+ * or `@ViewChild(CSVBoxButtonComponent)`.
60
+ *
61
+ * The File crosses to the iframe by structured clone, so the importer receives the real
62
+ * object and applies its own extension, worksheet and size rules to it -- this does not
63
+ * bypass any of them. Pass a File; a Blob has no name for the importer to read an
64
+ * extension from.
65
+ */
66
+ openModalWithFile(file: File): void;
67
+ clearProbeTimer(): void;
68
+ startFileAckTimer(): void;
69
+ clearFileAckTimer(): void;
70
+ giveUpOnFile(): void;
71
+ private syncBlocked;
72
+ ngOnDestroy(): void;
45
73
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sumit_yewale/angular",
3
- "version": "1.1.18",
3
+ "version": "1.1.20",
4
4
  "description": "Angular adapter for csvbox.io",
5
5
  "author": "csvbox-io",
6
6
  "license": "MIT",
@@ -8,16 +8,13 @@
8
8
  "type": "git",
9
9
  "url": "git+https://github.com/csvbox-io/angular-adapter.git"
10
10
  },
11
- "publishConfig": {
12
- "access": "public"
13
- },
14
11
  "peerDependencies": {
15
12
  "@angular/core": ">=8.0.0 <14.0.0",
16
13
  "@angular/common": ">=8.0.0 <14.0.0"
17
14
  },
18
15
  "dependencies": {
19
16
  "tslib": "^2.0.0",
20
- "@sumit_yewale/adapter-core": "^0.0.1"
17
+ "@sumit_yewale/adapter-core": "^0.1.0"
21
18
  },
22
19
  "keywords": [
23
20
  "csv",
@@ -39,9 +36,6 @@
39
36
  "url": "https://github.com/csvbox-io/angular-adapter/issues"
40
37
  },
41
38
  "homepage": "https://github.com/csvbox-io/angular-adapter#readme",
42
- "directories": {
43
- "example": "example"
44
- },
45
39
  "main": "bundles/sumit_yewale-angular.umd.js",
46
40
  "module": "fesm5/sumit_yewale-angular.js",
47
41
  "es2015": "fesm2015/sumit_yewale-angular.js",
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"metadata":{"CSVBoxButtonComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":17,"character":1},"arguments":[{"selector":"csvbox-button","template":"\n <div>\n <button [disabled]=\"disabled\" #initiator (click)=\"openModal()\" [attr.data-csvbox-token]=\"uuid\">\n <ng-content></ng-content>\n </button>\n </div>\n "}]}],"members":{"initiator":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":32,"character":3},"arguments":["initiator",{"static":false}]}]}],"onImport":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":33,"character":3}}]}],"onReady":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":34,"character":3}}]}],"onClose":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":35,"character":3}}]}],"onSubmit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":36,"character":3}}]}],"isImported":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":38,"character":3}}]}],"isReady":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":39,"character":3}}]}],"isClosed":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":40,"character":3}}]}],"isSubmitted":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":41,"character":3}}]}],"importerReady":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":43,"character":3}}]}],"closed":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":44,"character":3}}]}],"submitted":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":45,"character":3}}]}],"imported":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":46,"character":3}}]}],"loadStarted":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":47,"character":3}}]}],"user":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":49,"character":3}}]}],"dynamicColumns":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}}]}],"licenseKey":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":51,"character":3}}]}],"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":52,"character":3}}]}],"uuid":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":53,"character":3}}]}],"customDomain":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":54,"character":3}}]}],"dataLocation":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":55,"character":3}}]}],"language":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":56,"character":3}}]}],"environment":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":57,"character":3}}]}],"theme":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":59,"character":3}}]}],"isIframeLoaded":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":61,"character":3}}]}],"openModalOnIframeLoad":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":62,"character":3}}]}],"lazy":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":64,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":70,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/platform-browser","name":"DomSanitizer","line":72,"character":31}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"updateUserVariabe":[{"__symbolic":"method"}],"ngAfterContentInit":[{"__symbolic":"method"}],"handleModalClosed":[{"__symbolic":"method"}],"initImporter":[{"__symbolic":"method"}],"openModal":[{"__symbolic":"method"}]}},"CSVBoxAngularModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"CSVBoxButtonComponent"}],"imports":[],"exports":[{"__symbolic":"reference","name":"CSVBoxButtonComponent"}]}]}],"members":{}},"CSVBoxMethods":{"__symbolic":"interface"}},"origins":{"CSVBoxButtonComponent":"./lib/csvbox-button.component","CSVBoxAngularModule":"./lib/csvbox-angular.module","CSVBoxMethods":"./lib/interfaces/interface"},"importAs":"@sumit_yewale/angular"}
1
+ {"__symbolic":"module","version":4,"metadata":{"CSVBoxButtonComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":76,"character":1},"arguments":[{"selector":"csvbox-button","template":"\n <div>\n <button [disabled]=\"disabled || blockedByOther\" (click)=\"openModal()\" [attr.data-csvbox-token]=\"uuid\">\n <ng-content></ng-content>\n </button>\n </div>\n "}]}],"members":{"onImport":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":91,"character":3}}]}],"onReady":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":3}}]}],"onClose":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":93,"character":3}}]}],"onSubmit":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":94,"character":3}}]}],"isImported":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":96,"character":3}}]}],"isReady":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":97,"character":3}}]}],"isClosed":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":98,"character":3}}]}],"isSubmitted":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":99,"character":3}}]}],"importerReady":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":101,"character":3}}]}],"closed":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":102,"character":3}}]}],"submitted":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":103,"character":3}}]}],"imported":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":104,"character":3}}]}],"loadStarted":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":105,"character":3}}]}],"user":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":107,"character":3}}]}],"dynamicColumns":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":108,"character":3}}]}],"licenseKey":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":109,"character":3}}]}],"options":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":110,"character":3}}]}],"uuid":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":111,"character":3}}]}],"customDomain":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":112,"character":3}}]}],"dataLocation":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":113,"character":3}}]}],"language":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":114,"character":3}}]}],"environment":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":115,"character":3}}]}],"theme":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":117,"character":3}}]}],"isIframeLoaded":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":119,"character":3}}]}],"openModalOnIframeLoad":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":120,"character":3}}]}],"lazy":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":122,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":128,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/platform-browser","name":"DomSanitizer","line":130,"character":31},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":130,"character":58},{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":130,"character":91}]}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"updateUserVariabe":[{"__symbolic":"method"}],"ngAfterContentInit":[{"__symbolic":"method"}],"handleModalClosed":[{"__symbolic":"method"}],"initImporter":[{"__symbolic":"method"}],"openModal":[{"__symbolic":"method"}],"openModalWithFile":[{"__symbolic":"method"}],"clearProbeTimer":[{"__symbolic":"method"}],"startFileAckTimer":[{"__symbolic":"method"}],"clearFileAckTimer":[{"__symbolic":"method"}],"giveUpOnFile":[{"__symbolic":"method"}],"syncBlocked":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"CSVBoxAngularModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":5,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"CSVBoxButtonComponent"}],"imports":[],"exports":[{"__symbolic":"reference","name":"CSVBoxButtonComponent"}]}]}],"members":{}},"CSVBoxMethods":{"__symbolic":"interface"}},"origins":{"CSVBoxButtonComponent":"./lib/csvbox-button.component","CSVBoxAngularModule":"./lib/csvbox-angular.module","CSVBoxMethods":"./lib/interfaces/interface"},"importAs":"@sumit_yewale/angular"}