diff --git a/frontend/config/webpack.entry.js b/frontend/config/webpack.entry.js
index 7d20199442..4c6b301a20 100644
--- a/frontend/config/webpack.entry.js
+++ b/frontend/config/webpack.entry.js
@@ -30,8 +30,9 @@ const entryFiles = {
viewFileText: '/view-file-text.js',
viewFileSdoc: '/view-file-sdoc.js',
viewFileDocument: '/view-file-document.js',
- viewFileOnlyoffice: '/view-file-onlyoffice.js',
viewFileSpreadsheet: '/view-file-spreadsheet.js',
+ viewFileOnlyoffice: '/view-file-onlyoffice.js',
+ viewFileCollaboraOnline: '/view-file-collabora-online.js',
settings: '/settings.js',
repoHistory: '/repo-history.js',
repoSnapshot: '/repo-snapshot.js',
diff --git a/frontend/src/view-file-collabora-online.js b/frontend/src/view-file-collabora-online.js
new file mode 100644
index 0000000000..2297b0ceb7
--- /dev/null
+++ b/frontend/src/view-file-collabora-online.js
@@ -0,0 +1,48 @@
+import React from 'react';
+import ReactDom from 'react-dom';
+import FileView from './components/file-view/file-view';
+import FileViewTip from './components/file-view/file-view-tip';
+
+const {
+ err,
+ fileName,
+ actionURL,
+ accessToken,
+ accessTokenTtl,
+} = window.app.pageOptions;
+
+class ViewFileCollaboraOnline extends React.Component {
+ render() {
+ return (
+ } isOnlyofficeFile={true} />
+ );
+ }
+}
+
+class FileContent extends React.Component {
+
+ componentDidMount() {
+ if (!err) {
+ document.getElementById('office-form').submit();
+ document.getElementById('office-frame').className = 'd-block w-100 h-100 border-0';
+ }
+ }
+
+ render() {
+ if (err) {
+ return ;
+ }
+
+ return (
+
+
+
+
+ );
+ }
+}
+
+ReactDom.render(, document.getElementById('wrapper'));
diff --git a/seahub/templates/wopi_file_view_react.html b/seahub/templates/wopi_file_view_react.html
new file mode 100644
index 0000000000..fac4e9eedc
--- /dev/null
+++ b/seahub/templates/wopi_file_view_react.html
@@ -0,0 +1,17 @@
+{% extends 'file_view_react.html' %}
+{% load render_bundle from webpack_loader %}
+{% load seahub_tags avatar_tags i18n static %}
+
+{% block extra_style %}
+{% render_bundle 'viewFileCollaboraOnline' 'css' %}
+{% endblock %}
+
+{% block extra_data %}
+actionURL: '{{action_url}}',
+accessToken: '{{access_token}}',
+accessTokenTtl: '{{access_token_ttl}}',
+{% endblock %}
+
+{% block render_bundle %}
+{% render_bundle 'viewFileCollaboraOnline' 'js' %}
+{% endblock %}
diff --git a/seahub/views/file.py b/seahub/views/file.py
index 78dbf24549..9e398943ed 100644
--- a/seahub/views/file.py
+++ b/seahub/views/file.py
@@ -835,7 +835,7 @@ def view_lib_file(request, repo_id, path):
if wopi_dict:
send_file_access_msg(request, repo, path, 'web')
- return render(request, 'view_file_wopi.html', wopi_dict)
+ return render(request, 'wopi_file_view_react.html', {**return_dict, **wopi_dict})
else:
return_dict['err'] = _('Error when prepare Office Online file preview page.')