You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
4.6 KiB
110 lines
4.6 KiB
/** @odoo-modules */
|
|
import { registry } from "@web/core/registry";
|
|
import { useService } from "@web/core/utils/hooks";
|
|
import { Component } from "@odoo/owl";
|
|
import { jsonrpc } from "@web/core/network/rpc_service";
|
|
const actionRegistry = registry.category("actions");
|
|
import { useRef } from "@odoo/owl";
|
|
class OnedriveDashboard extends Component{
|
|
setup() {
|
|
super.setup();
|
|
this.orm = useService("orm");
|
|
this.action = useService("action");
|
|
this.inputRef = useRef("all_files");
|
|
this.synchronize();
|
|
}
|
|
// * Opens a file upload dialog on click of the "Upload" button.
|
|
// *
|
|
// * @param {Object} ev - The click event object.
|
|
// */
|
|
async upload(){
|
|
this.action.doAction({
|
|
name: "Upload File",
|
|
type: 'ir.actions.act_window',
|
|
res_model: 'upload.file',
|
|
view_mode: 'form',
|
|
view_type: 'form',
|
|
views: [[false, 'form']],
|
|
target: 'new',
|
|
});
|
|
}
|
|
/**
|
|
* Retrieves and displays files from OneDrive on click of the "Import" button.
|
|
*
|
|
* @param {Object} ev - The click event object.
|
|
*/
|
|
async synchronize(){
|
|
var self = this;
|
|
var result = await this.orm.call('onedrive.dashboard',
|
|
"action_synchronize_onedrive",[' '])
|
|
if (!result) {
|
|
this.action.doAction({
|
|
'type': 'ir.actions.client',
|
|
'tag': 'display_notification',
|
|
'params': {
|
|
'message': 'Please setup credentials',
|
|
'type': 'warning',
|
|
'sticky': false,
|
|
}
|
|
});
|
|
}
|
|
else if (result[0] === 'error') {
|
|
if (result[1] === 'itemNotFound') {
|
|
// Display a notification if the folder is not found
|
|
this.action.doAction({
|
|
'type': 'ir.actions.client',
|
|
'tag': 'display_notification',
|
|
'params': {
|
|
'message': 'Error: Folder not found.',
|
|
'type': 'warning',
|
|
'sticky': false,
|
|
}
|
|
});
|
|
}
|
|
else {
|
|
// Display a notification for other errors
|
|
this.action.doAction({
|
|
'type': 'ir.actions.client',
|
|
'tag': 'display_notification',
|
|
'params': {
|
|
'message': 'Error:' + result[2],
|
|
'type': 'warning',
|
|
'sticky': false,
|
|
}
|
|
});
|
|
}
|
|
} else {
|
|
// Empty the onedrive_files div and append the files retrieved
|
|
this.inputRef.el.innerHTML = '';
|
|
var alt_src = "'/onedrive_integration_odoo/static/src/img/file_icon.png'";
|
|
$.each(Object.keys(result), function (index, name) {
|
|
$('#onedrive_files').append('<div class="col-sm-6 card" align="center"><a href="' + result[name] + '"><img class="card-img top" src="' + result[name] + '" onerror="this.src=' + alt_src + ';"/>' + name + '</div>');
|
|
});
|
|
}
|
|
}
|
|
/**
|
|
* Filters files displayed based on file type (e.g., image, all files).
|
|
*
|
|
* @param {Object} ev - The click event object.
|
|
*/
|
|
async filter_file_type(ev) {
|
|
var value = ev.currentTarget.getAttribute('value');
|
|
$.each($('.card'), function (index, name) {
|
|
$(this).hide();
|
|
var file_type = (name.textContent).slice(((name.textContent).lastIndexOf(".") - 1 >>> 0) + 2);
|
|
if (file_type == value) {
|
|
$(this).show();
|
|
}
|
|
if (value == 'allfiles') {
|
|
$(this).show();
|
|
}
|
|
if (value == 'image') {
|
|
if (file_type == 'jpeg' || file_type == 'jpg' || file_type == 'png') {
|
|
$(this).show();
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
OnedriveDashboard.template = "OnedriveDashboard";
|
|
registry.category("actions").add("onedrive_dashboard", OnedriveDashboard)
|
|
|