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)
							 | 
						|
								
							 |