✨ oo-connector: rename from OO (#525)
This commit is contained in:
@@ -15,6 +15,10 @@ interface RequestQuery {
|
||||
token: string;
|
||||
}
|
||||
|
||||
interface RenameRequestBody {
|
||||
name: string;
|
||||
}
|
||||
|
||||
/** These expose a OnlyOffice document storage service methods, called by the OnlyOffice document editing service
|
||||
* to load and save files
|
||||
*/
|
||||
@@ -145,6 +149,25 @@ class OnlyOfficeController {
|
||||
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;
|
||||
|
||||
@@ -11,5 +11,6 @@ export const OnlyOfficeRoutes = {
|
||||
const controller = new OnlyOfficeController();
|
||||
router.get(`/:mode/read`, requirementsMiddleware, controller.read.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: {
|
||||
company_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="<%= 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" />
|
||||
<title>Twake Drive</title>
|
||||
</head>
|
||||
|
||||
<body style="height: 100%">
|
||||
@@ -35,6 +36,11 @@
|
||||
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', {
|
||||
scrollSensitivity: window.mode === 'text' ? 100 : 40,
|
||||
@@ -44,6 +50,24 @@
|
||||
document: doc,
|
||||
token: "<%= it.drive_file_id %>",
|
||||
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: {
|
||||
callbackUrl: `${window.baseURL}callback${callbackQueryString}`,
|
||||
lang: window.user.language,
|
||||
|
||||
Reference in New Issue
Block a user