mirror of
https://github.com/hashicorp/vault.git
synced 2025-08-18 04:27:02 +02:00
* Adding explicit MPL license for sub-package. This directory and its subdirectories (packages) contain files licensed with the MPLv2 `LICENSE` file in this directory and are intentionally licensed separately from the BSL `LICENSE` file at the root of this repository. * Adding explicit MPL license for sub-package. This directory and its subdirectories (packages) contain files licensed with the MPLv2 `LICENSE` file in this directory and are intentionally licensed separately from the BSL `LICENSE` file at the root of this repository. * Updating the license from MPL to Business Source License. Going forward, this project will be licensed under the Business Source License v1.1. Please see our blog post for more details at https://hashi.co/bsl-blog, FAQ at www.hashicorp.com/licensing-faq, and details of the license at www.hashicorp.com/bsl. * add missing license headers * Update copyright file headers to BUS-1.1 * Fix test that expected exact offset on hcl file --------- Co-authored-by: hashicorp-copywrite[bot] <110428419+hashicorp-copywrite[bot]@users.noreply.github.com> Co-authored-by: Sarah Thompson <sthompson@hashicorp.com> Co-authored-by: Brian Kassouf <bkassouf@hashicorp.com>
69 lines
2.0 KiB
JavaScript
69 lines
2.0 KiB
JavaScript
/**
|
|
* Copyright (c) HashiCorp, Inc.
|
|
* SPDX-License-Identifier: BUSL-1.1
|
|
*/
|
|
|
|
import Component from '@ember/component';
|
|
import filesize from 'filesize';
|
|
|
|
/**
|
|
* @module FileToArrayBuffer
|
|
* `FileToArrayBuffer` is a component that will allow you to pick a file from the local file system. Once
|
|
* loaded, this file will be emitted as a JS ArrayBuffer to the passed `onChange` callback.
|
|
*
|
|
* @example
|
|
* ```js
|
|
* <FileToArrayBuffer @onChange={{action (mut file)}} />
|
|
* ```
|
|
* @param onChange=null {Function} - The function to call when the file read is complete. This function
|
|
* receives the file as a JS ArrayBuffer
|
|
* @param [label=null {String}] - Text to use as the label for the file input
|
|
* @param [fileHelpText=null {String} - Text to use as help under the file input
|
|
*
|
|
*/
|
|
export default Component.extend({
|
|
classNames: ['box', 'is-fullwidth', 'is-marginless', 'is-shadowless'],
|
|
onChange: () => {},
|
|
label: null,
|
|
fileHelpText: null,
|
|
|
|
file: null,
|
|
filename: null,
|
|
fileSize: null,
|
|
fileLastModified: null,
|
|
|
|
readFile(file) {
|
|
const reader = new FileReader();
|
|
// raft-snapshot-restore test was failing on CI trying to send action on destroyed object
|
|
// ensure that the component has not been torn down prior to sending onChange action
|
|
if (!this.isDestroyed && !this.isDestroying) {
|
|
reader.onload = () => this.send('onChange', reader.result, file);
|
|
}
|
|
reader.readAsArrayBuffer(file);
|
|
},
|
|
|
|
actions: {
|
|
pickedFile(e) {
|
|
const { files } = e.target;
|
|
if (!files.length) {
|
|
return;
|
|
}
|
|
for (let i = 0, len = files.length; i < len; i++) {
|
|
this.readFile(files[i]);
|
|
}
|
|
},
|
|
clearFile() {
|
|
this.send('onChange');
|
|
},
|
|
onChange(fileAsBytes, fileMeta) {
|
|
const { name, size, lastModifiedDate } = fileMeta || {};
|
|
const fileSize = size ? filesize(size) : null;
|
|
this.set('file', fileAsBytes);
|
|
this.set('filename', name);
|
|
this.set('fileSize', fileSize);
|
|
this.set('fileLastModified', lastModifiedDate);
|
|
this.onChange(fileAsBytes, name);
|
|
},
|
|
},
|
|
});
|