✨ oo-connector: rename from OO (#525)
This commit is contained in:
@@ -15,6 +15,10 @@ interface RequestQuery {
|
|||||||
token: string;
|
token: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface RenameRequestBody {
|
||||||
|
name: string;
|
||||||
|
}
|
||||||
|
|
||||||
/** These expose a OnlyOffice document storage service methods, called by the OnlyOffice document editing service
|
/** These expose a OnlyOffice document storage service methods, called by the OnlyOffice document editing service
|
||||||
* to load and save files
|
* to load and save files
|
||||||
*/
|
*/
|
||||||
@@ -145,6 +149,25 @@ class OnlyOfficeController {
|
|||||||
next(error || 'error');
|
next(error || 'error');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** This route is called directly by the inline JS in the editor page, called by the client-side OO editor component */
|
||||||
|
public rename = async (req: Request<{}, {}, RenameRequestBody, RequestQuery>, res: Response, next: NextFunction): Promise<void> => {
|
||||||
|
try {
|
||||||
|
const { token } = req.query;
|
||||||
|
const officeTokenPayload = jwt.verify(token, CREDENTIALS_SECRET) as OfficeToken;
|
||||||
|
const { company_id, drive_file_id } = officeTokenPayload;
|
||||||
|
const { name } = req.body;
|
||||||
|
|
||||||
|
if (!drive_file_id) throw new Error('OO Rename request missing drive_file_id');
|
||||||
|
if (!name) throw new Error('OO Rename request missing name');
|
||||||
|
|
||||||
|
const result = await driveService.update({ company_id, drive_file_id, changes: { name } });
|
||||||
|
res.send(result);
|
||||||
|
} catch (error) {
|
||||||
|
logger.error(`OO Rename request root error`, { error });
|
||||||
|
next(error || 'error');
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export default OnlyOfficeController;
|
export default OnlyOfficeController;
|
||||||
|
|||||||
@@ -11,5 +11,6 @@ export const OnlyOfficeRoutes = {
|
|||||||
const controller = new OnlyOfficeController();
|
const controller = new OnlyOfficeController();
|
||||||
router.get(`/:mode/read`, requirementsMiddleware, controller.read.bind(controller));
|
router.get(`/:mode/read`, requirementsMiddleware, controller.read.bind(controller));
|
||||||
router.post(`/:mode/callback`, requirementsMiddleware, controller.ooCallback.bind(controller));
|
router.post(`/:mode/callback`, requirementsMiddleware, controller.ooCallback.bind(controller));
|
||||||
|
router.post(`/:mode/rename`, requirementsMiddleware, controller.rename.bind(controller));
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -36,6 +36,28 @@ class DriveService implements IDriveService {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public update = async (params: {
|
||||||
|
company_id: string;
|
||||||
|
drive_file_id: string;
|
||||||
|
changes: Partial<DriveFileType['item']>;
|
||||||
|
completeResult?: boolean;
|
||||||
|
}): Promise<(typeof params)['changes']> => {
|
||||||
|
try {
|
||||||
|
const { company_id, drive_file_id } = params;
|
||||||
|
const resource = await apiService.post<(typeof params)['changes'], ReturnType<DriveService['update']>>({
|
||||||
|
url: makeNonEditingSessionItemUrl(company_id, drive_file_id),
|
||||||
|
payload: params.changes,
|
||||||
|
});
|
||||||
|
if (params.completeResult) return resource;
|
||||||
|
const result = {};
|
||||||
|
Object.keys(params.changes).forEach(k => (result[k] = resource[k]));
|
||||||
|
return result;
|
||||||
|
} catch (error) {
|
||||||
|
logger.error('Failed to update file metadata: ', error.stack);
|
||||||
|
return Promise.reject();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
public createVersion = async (params: {
|
public createVersion = async (params: {
|
||||||
company_id: string;
|
company_id: string;
|
||||||
drive_file_id: string;
|
drive_file_id: string;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
|
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
|
||||||
<script type="text/javascript" src="<%= it.onlyoffice_server %>web-apps/apps/api/documents/api.js"></script>
|
<script type="text/javascript" src="<%= it.onlyoffice_server %>web-apps/apps/api/documents/api.js"></script>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no,shrink-to-fit=no" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no,shrink-to-fit=no" />
|
||||||
|
<title>Twake Drive</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body style="height: 100%">
|
<body style="height: 100%">
|
||||||
@@ -35,6 +36,11 @@
|
|||||||
preview: <%= it.preview %>,
|
preview: <%= it.preview %>,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
function updateTitle(title) {
|
||||||
|
const el = document.querySelector('head title');
|
||||||
|
if (el) el.innerText = title + ' — Twake Drive';
|
||||||
|
}
|
||||||
|
updateTitle(doc.title);
|
||||||
|
|
||||||
window.docEditor = new DocsAPI.DocEditor('onlyoffice_container_instance', {
|
window.docEditor = new DocsAPI.DocEditor('onlyoffice_container_instance', {
|
||||||
scrollSensitivity: window.mode === 'text' ? 100 : 40,
|
scrollSensitivity: window.mode === 'text' ? 100 : 40,
|
||||||
@@ -44,6 +50,24 @@
|
|||||||
document: doc,
|
document: doc,
|
||||||
token: "<%= it.drive_file_id %>",
|
token: "<%= it.drive_file_id %>",
|
||||||
type: screen.width < 600 ? 'mobile' : 'desktop',
|
type: screen.width < 600 ? 'mobile' : 'desktop',
|
||||||
|
events: {
|
||||||
|
onRequestRename: function (event) {
|
||||||
|
let name = event.data;
|
||||||
|
const prevExtension = /\.[^.]+$/.exec(doc.title);
|
||||||
|
if (prevExtension) name += prevExtension[0];
|
||||||
|
$.
|
||||||
|
post(`${window.baseURL}rename${callbackQueryString}`, { name }).
|
||||||
|
done((changed) => {
|
||||||
|
if (changed.name != name)
|
||||||
|
window.docEditor.showMessage(`✅ Renamed to: ${changed.name}`);
|
||||||
|
}).
|
||||||
|
fail(() => window.docEditor.showMessage('🚨 Error renaming the file'));
|
||||||
|
},
|
||||||
|
onMetaChange: function (event) {
|
||||||
|
const { title } = event.data;
|
||||||
|
if (title) updateTitle(title);
|
||||||
|
},
|
||||||
|
},
|
||||||
editorConfig: {
|
editorConfig: {
|
||||||
callbackUrl: `${window.baseURL}callback${callbackQueryString}`,
|
callbackUrl: `${window.baseURL}callback${callbackQueryString}`,
|
||||||
lang: window.user.language,
|
lang: window.user.language,
|
||||||
|
|||||||
Reference in New Issue
Block a user