Add initial ActiveStorage integration

This commit is contained in:
Javan Makhmali 2018-02-12 15:50:42 -05:00
parent 2f13b3c9fe
commit 986d6a6da4
6 changed files with 91 additions and 2 deletions

View File

@ -1 +1,33 @@
import * as Trix from "trix"
import { DirectUpload } from "activestorage"
// FIXME: Hard coded routes
const directUploadsURL = "/rails/active_storage/direct_uploads"
const blobsURL = "/rails/active_storage/blobs"
addEventListener("trix-attachment-add", event => {
const { attachment } = event
if (!attachment.file) return
const delegate = {
directUploadWillStoreFileWithXHR: (xhr) => {
xhr.upload.addEventListener("progress", event => {
const progress = event.loaded / event.total * 100
attachment.setUploadProgress(progress)
})
}
}
const directUpload = new DirectUpload(attachment.file, directUploadsURL, delegate)
directUpload.create((error, attributes) => {
if (error) {
console.warn("Failed to store file for attachment", attachment, error)
} else {
console.log("Created blob for attachment", attributes, attachment)
const { signed_id } = attributes
const url = `${blobsURL}/${signed_id}/${encodeURIComponent(attachment.file.name)}`
attachment.setAttributes({ url, signed_id })
}
})
})

View File

@ -14,7 +14,8 @@
],
"license": "MIT",
"dependencies": {
"trix": "^0.11.1"
"trix": "^0.11.1",
"activestorage": ">= 5.2.0-rc1"
},
"private": true
}

View File

@ -0,0 +1,26 @@
# This migration comes from active_storage (originally 20170806125915)
class CreateActiveStorageTables < ActiveRecord::Migration[5.2]
def change
create_table :active_storage_blobs do |t|
t.string :key, null: false
t.string :filename, null: false
t.string :content_type
t.text :metadata
t.bigint :byte_size, null: false
t.string :checksum, null: false
t.datetime :created_at, null: false
t.index [ :key ], unique: true
end
create_table :active_storage_attachments do |t|
t.string :name, null: false
t.references :record, null: false, polymorphic: true, index: false
t.references :blob, null: false
t.datetime :created_at, null: false
t.index [ :record_type, :record_id, :name, :blob_id ], name: "index_active_storage_attachments_uniqueness", unique: true
end
end
end

View File

@ -10,7 +10,28 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2018_02_08_205311) do
ActiveRecord::Schema.define(version: 2018_02_12_164506) do
create_table "active_storage_attachments", force: :cascade do |t|
t.string "name", null: false
t.string "record_type", null: false
t.integer "record_id", null: false
t.integer "blob_id", null: false
t.datetime "created_at", null: false
t.index ["blob_id"], name: "index_active_storage_attachments_on_blob_id"
t.index ["record_type", "record_id", "name", "blob_id"], name: "index_active_storage_attachments_uniqueness", unique: true
end
create_table "active_storage_blobs", force: :cascade do |t|
t.string "key", null: false
t.string "filename", null: false
t.string "content_type"
t.text "metadata"
t.bigint "byte_size", null: false
t.string "checksum", null: false
t.datetime "created_at", null: false
t.index ["key"], name: "index_active_storage_blobs_on_key", unique: true
end
create_table "messages", force: :cascade do |t|
t.string "subject"

View File

@ -56,9 +56,14 @@ acorn@^5.0.0:
version "5.4.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.4.1.tgz#fdc58d9d17f4a4e98d102ded826a9b9759125102"
"activestorage@>= 5.2.0-rc1":
version "5.2.0-rc1"
resolved "https://registry.yarnpkg.com/activestorage/-/activestorage-5.2.0-rc1.tgz#79898996eceb0f13575eff41fb109051fbfa49b0"
"activetext@file:../..":
version "0.1"
dependencies:
activestorage ">= 5.2.0-rc1"
trix "^0.11.1"
ajv-keywords@^2.1.0:

View File

@ -2,6 +2,10 @@
# yarn lockfile v1
"activestorage@>= 5.2.0-rc1":
version "5.2.0-rc1"
resolved "https://registry.yarnpkg.com/activestorage/-/activestorage-5.2.0-rc1.tgz#79898996eceb0f13575eff41fb109051fbfa49b0"
trix@^0.11.1:
version "0.11.1"
resolved "https://registry.yarnpkg.com/trix/-/trix-0.11.1.tgz#ffe54f2757c2c2385b8424fd5c5d2ab712a09acc"