Sha256: 457414f4c8c1769c647652a9caaf9a8f2b377ac9a1d5082c7bd3fb4247b4be45

Contents?: true

Size: 1.73 KB

Versions: 33

Compression:

Stored size: 1.73 KB

Contents

import { CocoComponent } from "@js/coco";

export default CocoComponent("imageUploader", ({ click, drop }) => {
  return {
    file: null,
    errors: [],
    active: false,
    clickable: click,
    droppable: drop,
    input: null,

    get fileName() {
      return this.file && this.file.name;
    },

    get fileType() {
      return this.file && this.file.type;
    },

    get fileSize() {
      return this.file && this.file.size;
    },

    get fileData() {
      return this.file && this.file.data;
    },

    init() {
      this.input = this.$refs.input;

      this.$watch("file", (file) => {
        const dataTransfer = new DataTransfer();
        if (file && file.file instanceof File) {
          dataTransfer.items.add(file.file);
        }
        this.input.files = dataTransfer.files;
      });
    },

    setFile(file) {
      this.file = file;
    },

    openPicker() {
      this.input.click();
    },

    clear() {
      this.file = null;
      this.$dispatch("image-uploader:clear");
    },

    handleDrop(event) {
      const files = event.detail.files || event.dataTransfer.files;
      this.handleFiles(files);
    },

    handleFiles(files) {
      Array.from(files).forEach((file) => this.readFile(file));
    },

    readFile(file) {
      const reader = new FileReader();

      reader.addEventListener("load", () => {
        this.file = {
          name: file.name,
          size: file.size,
          type: file.type,
          file: file,
          data: reader.result,
        };

        this.$dispatch("image-uploader:load", { file: this.file });
      });

      reader.addEventListener("error", () => {
        this.errors.push(`Error reading file: ${file.name}`);
      });

      reader.readAsDataURL(file);
    },
  };
});

Version data entries

33 entries across 33 versions & 1 rubygems

Version Path
coveragebook_components-0.8.4 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.8.3 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.8.2 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.8.1 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.8.0 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.8.0.beta.3 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.8.0.beta.2 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.8.0.beta.1 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.7.10 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.7.9 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.7.8 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.7.7 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.7.6 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.7.5 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.7.4 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.7.3 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.7.2 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.7.1 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.7.0 app/components/coco/base/image_uploader/image_uploader.js
coveragebook_components-0.6.5 app/components/coco/base/image_uploader/image_uploader.js