0

I'm trying to build a feature in an Odoo 16 where I need to mask a particular field using password="1". At the same time, I'd like to offer a clipboard copy functionality for that masked field by using widget="CopyClipboardChar". However, I'm having difficulty getting both to work together.

Has anyone encountered this issue before and found a solution? Any insights or workarounds would be greatly appreciated.

arleite
  • 101
  • 6

1 Answers1

1

You can pass isPassword attribute from CopyClipboardChar to charField widget

Example

Alter the CopyClipboardChar component:

/** @odoo-module **/

import {patch} from "@web/core/utils/patch";
import { registry } from "@web/core/registry";
import { CopyClipboardCharField } from "@web/views/fields/copy_clipboard/copy_clipboard_field"
import { archParseBoolean } from "@web/views/utils";


CopyClipboardCharField.props = {
    ...CopyClipboardCharField.props,
    isPassword: { type: Boolean, optional: true },
};

CopyClipboardCharField.extractProps = ({ attrs, field }) => {
    return {
        isPassword: archParseBoolean(attrs.password),
    };
};

patch(CopyClipboardCharField.prototype, "CopyClipboardCharField.password", {
    get isPassword() {
        return this.props.isPassword;
    }
});

Alter the web.CopyClipboardField template to use isPassword function:

<?xml version="1.0" encoding="UTF-8"?>
<templates xml:space="preserve">

    <t t-inherit="web.CopyClipboardField" t-inherit-mode="extension" owl="1">
        <xpath expr="//Field" position="attributes">
            <attribute name="isPassword">isPassword</attribute>
        </xpath>
    </t>
    
</templates>

Add files to the manifest file:

'assets': {
    'web.assets_backend': [
        'MODULE_NAME/static/src/js/copy_clipboard_char.js',
        'MODULE_NAME/static/src/xml/copy_clipboard_char.xml',
    ],
},
Kenly
  • 24,317
  • 7
  • 44
  • 60
  • Very good, i created a module that inherits CopyClipboardChar and i created a widget that deals with this problem, it's similar to your solution, thanks – arleite Aug 24 '23 at 15:38