mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-10-18 17:56:00 +08:00
Merge pull request #7997 from artoscinote/ma_SCI_11218
UI fixes for File versions modal [SCI-11218]
This commit is contained in:
commit
b6ed204aa0
4 changed files with 33 additions and 15 deletions
|
@ -404,7 +404,8 @@ class AssetsController < ApplicationController
|
||||||
render(
|
render(
|
||||||
json: ActiveModel::SerializableResource.new(
|
json: ActiveModel::SerializableResource.new(
|
||||||
blobs,
|
blobs,
|
||||||
each_serializer: ActiveStorage::BlobSerializer
|
each_serializer: ActiveStorage::BlobSerializer,
|
||||||
|
user: current_user
|
||||||
).as_json.merge(
|
).as_json.merge(
|
||||||
enabled: VersionedAttachments.enabled?,
|
enabled: VersionedAttachments.enabled?,
|
||||||
enable_url: ENV.fetch('SCINOTE_FILE_VERSIONING_ENABLE_URL', nil)
|
enable_url: ENV.fetch('SCINOTE_FILE_VERSIONING_ENABLE_URL', nil)
|
||||||
|
|
|
@ -135,6 +135,12 @@ export default {
|
||||||
data_e2e: 'e2e-BT-attachmentOptions-delete'
|
data_e2e: 'e2e-BT-attachmentOptions-delete'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
if (this.attachment.attributes.urls.versions) {
|
||||||
|
menu.push({
|
||||||
|
text: this.i18n.t('assets.context_menu.versions'),
|
||||||
|
emit: 'fileVersionsModal'
|
||||||
|
});
|
||||||
|
}
|
||||||
if (this.attachment.attributes.urls.toggle_view_mode) {
|
if (this.attachment.attributes.urls.toggle_view_mode) {
|
||||||
this.viewModeOptions.forEach((viewMode, i) => {
|
this.viewModeOptions.forEach((viewMode, i) => {
|
||||||
menu.push({
|
menu.push({
|
||||||
|
@ -147,12 +153,6 @@ export default {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (this.attachment.attributes.urls.versions) {
|
|
||||||
menu.push({
|
|
||||||
text: this.i18n.t('assets.context_menu.versions'),
|
|
||||||
emit: 'fileVersionsModal'
|
|
||||||
});
|
|
||||||
}
|
|
||||||
return menu;
|
return menu;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
|
@ -12,26 +12,33 @@
|
||||||
<div class="relative" v-if="fileVersions">
|
<div class="relative" v-if="fileVersions">
|
||||||
<div v-for="(fileVersion, index) in fileVersions" :key="fileVersion.id">
|
<div v-for="(fileVersion, index) in fileVersions" :key="fileVersion.id">
|
||||||
<div class="flex w-full border border-sn-light-grey rounded mb-1.5 p-1.5 items-center">
|
<div class="flex w-full border border-sn-light-grey rounded mb-1.5 p-1.5 items-center">
|
||||||
<div class="basis-3/4">
|
<div class="basis-full">
|
||||||
<div class="mb-1.5">
|
<div class="mb-1.5">
|
||||||
<span v-if="fileVersion.attributes.version === 1" class="bg-sn-science-blue text-sn-white me-2 px-2 py-0.5 rounded">
|
<span v-if="fileVersion.attributes.version === 1" class="bg-sn-science-blue text-sn-white me-2 px-2 py-0.5 rounded">
|
||||||
{{ i18n.t("assets.file_versions_modal.original_file") }}
|
{{ i18n.t("assets.file_versions_modal.original_file") }}
|
||||||
</span>
|
</span>
|
||||||
<span v-else class="bg-sn-grey-300 me-2 px-2 py-0.5 rounded">v{{ fileVersion.attributes.version }}</span>
|
<span v-else class="bg-sn-grey-300 me-2 px-2 py-0.5 rounded">v{{ fileVersion.attributes.version }}</span>
|
||||||
<a :href="fileVersion.attributes.url" target="_blank">{{ fileVersion.attributes.filename }}</a>
|
<a :href="fileVersion.attributes.url" target="_blank" class="align-text-bottom">
|
||||||
|
<span :class="{
|
||||||
|
'max-w-80': !fileVersion.attributes.restored_from_version && fileVersion.attributes.version !== 1,
|
||||||
|
'max-w-64': !!fileVersion.attributes.restored_from_version || fileVersion.attributes.version === 1
|
||||||
|
}"
|
||||||
|
class="text-ellipsis overflow-hidden text-nowrap inline-block align-middle"
|
||||||
|
>{{ fileVersion.attributes.basename }}.</span><span class="inline-block align-middle">{{ fileVersion.attributes.extension }}</span>
|
||||||
|
</a>
|
||||||
<small class="inline-block ml-1" v-if="fileVersion.attributes.restored_from_version">
|
<small class="inline-block ml-1" v-if="fileVersion.attributes.restored_from_version">
|
||||||
({{ i18n.t("assets.file_versions_modal.restored_from_version", { version: fileVersion.attributes.restored_from_version }) }})
|
({{ i18n.t("assets.file_versions_modal.restored_from_version", { version: fileVersion.attributes.restored_from_version }) }})
|
||||||
</small>
|
</small>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex text-xs text-sn-grey justify-start">
|
<div class="flex text-xs text-sn-grey justify-start">
|
||||||
<div class="mr-3">{{ fileVersion.attributes.created_at }}</div>
|
<div class="mr-3">{{ fileVersion.attributes.created_at }}</div>
|
||||||
<div class="mr-3">{{ fileVersion.attributes.created_by.full_name }}</div>
|
<div class="mr-3 text-nowrap text-ellipsis overflow-hidden max-w-52">{{ fileVersion.attributes.created_by.full_name }}</div>
|
||||||
<div>{{ Math.round(fileVersion.attributes.byte_size/1024) }}KB</div>
|
<div>{{ i18n.t("assets.file_versions_modal.size") }}: {{ Math.round(fileVersion.attributes.byte_size/1024) }}KB</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="basis-1/4 flex justify-end">
|
<div class="basis-1/4 flex justify-end">
|
||||||
<a class="btn btn-icon p-0 mr-3"đ
|
<a class="btn btn-icon p-0 px-2 hover:bg-sn-light-grey"
|
||||||
v-if="enabled || index === 0"
|
v-if="enabled || index === 0"
|
||||||
:href="fileVersion.attributes.url"
|
:href="fileVersion.attributes.url"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
|
@ -44,7 +51,7 @@
|
||||||
@click="restoreVersion(fileVersion.attributes.version)"
|
@click="restoreVersion(fileVersion.attributes.version)"
|
||||||
data-render-tooltip="true"
|
data-render-tooltip="true"
|
||||||
:title="i18n.t('assets.file_versions_modal.restore')"
|
:title="i18n.t('assets.file_versions_modal.restore')"
|
||||||
class="btn btn-icon p-0 mr-3"
|
class="btn btn-icon p-0 px-2 hover:bg-sn-light-grey"
|
||||||
>
|
>
|
||||||
<i class="sn-icon sn-icon-restore"></i>
|
<i class="sn-icon sn-icon-restore"></i>
|
||||||
</a>
|
</a>
|
||||||
|
|
|
@ -4,7 +4,15 @@ module ActiveStorage
|
||||||
class BlobSerializer < ActiveModel::Serializer
|
class BlobSerializer < ActiveModel::Serializer
|
||||||
include Rails.application.routes.url_helpers
|
include Rails.application.routes.url_helpers
|
||||||
|
|
||||||
attributes :filename, :url, :created_at, :byte_size, :version, :restored_from_version, :created_by
|
attributes :filename, :extension, :basename, :url, :created_at, :byte_size, :version, :restored_from_version, :created_by
|
||||||
|
|
||||||
|
def basename
|
||||||
|
object.filename.base
|
||||||
|
end
|
||||||
|
|
||||||
|
def extension
|
||||||
|
object.filename.extension_without_delimiter
|
||||||
|
end
|
||||||
|
|
||||||
def version
|
def version
|
||||||
object.metadata['version'] || 1
|
object.metadata['version'] || 1
|
||||||
|
@ -15,7 +23,9 @@ module ActiveStorage
|
||||||
end
|
end
|
||||||
|
|
||||||
def created_at
|
def created_at
|
||||||
object.created_at.strftime('%B %d, %Y at %H:%M')
|
return object.created_at unless @instance_options[:user]
|
||||||
|
|
||||||
|
object.created_at.strftime("#{@instance_options[:user].date_format}, %H:%M")
|
||||||
end
|
end
|
||||||
|
|
||||||
def created_by
|
def created_by
|
||||||
|
|
Loading…
Add table
Reference in a new issue