magento2 – Magento 2 : My spinner is not stop and through error

I have a created new tab in admin customer -> customer information.
And after click my custom tab and error through in console.

enter image description here

I have a try this code.

VendorModuleviewadminhtmllayoutcustomer_index_edit.xml

<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left"
  xsi:noNamespaceSchemaLocation="../../../../../../../lib/internal/Magento/Framework/View/Layout/etc/page_configuration.xsd">
<body>
    <referenceBlock name="customer_form">
        <block class="VendorModuleBlockAdminhtmlEditTabCustom" name="customertab_edit_tab">
            <action method="setTabLabel">
                <argument name="label" xsi:type="string">Custom Tab</argument>
            </action>
        </block>
    </referenceBlock>
</body>
</page>

VendorModuleBlockAdminhtmlEditTabCustom.php

<?php

namespace VendorModuleBlockAdminhtmlEditTab;

use MagentoCustomerControllerRegistryConstants;
use MagentoUiComponentLayoutTabsTabInterface;
use MagentoBackendBlockTemplateContext;
use MagentoFrameworkRegistry;

class Custom extends MagentoBackendBlockTemplate implements TabInterface
{

protected $_coreRegistry;
protected $context;
protected $registry;

public function __construct(
    Context $context,
    Registry $registry,
    array $data = ()
)
{
    $this->_coreRegistry = $registry;
    parent::__construct($context, $data);
}

public function getTabLabel()
{
    return __('Custom Tab');
}

public function getTabTitle()
{
    return __('Custom Tab');
}

public function canShowTab()
{
    if ($this->getCustomerId()) {
        return true;
    }
    return false;
}

public function getCustomerId()
{
    return $this->_coreRegistry->registry(RegistryConstants::CURRENT_CUSTOMER_ID);
}

public function isHidden()
{
    if ($this->getCustomerId()) {
        return false;
    }
    return true;
}

public function getTabClass()
{
    return '';
}

public function getTabUrl()
{
    return $this->getUrl('module/*/custom', ('_current' => true));
}

public function isAjaxLoaded()
{
    return true;
}
}

interaction design – Is it wrong to have a “loading” spinner wheel in bottom right corner?

As a commenter said, the spinner is appropriate while the system is processing the request or working to delete the list, because the user expects feedback after taking an action.

The issue with placing it in the bottom right side of the dialog window is that 1) it’s not a common place for a user to look to receive feedback, and 2) the buttons are presumably still both active (the user might want to click on them to try to cancel the action.)

Consider changing the buttons to “Delete” and “Cancel” to make it really clear to the user what they’re going to do. “Cancel” should close the window (the user really should never see a spinner). When “Delete” is clicked, both buttons should become disabled; a spinner is OK if the deletion only lasts a couple of seconds (for longer deletions, use a progress bar). Position the spinner either in the middle of the screen, or on the “Delete” button itself.

Google Maps iOS continous spinner for navigation

In the application user has possible to open Google maps with navigation to the stop. When user has enabled location permission in the system dialog, everything works correct – Google Maps is opened, load and show path between selected stop and current user location. The situation changes when user has disabled location permission. In this case Google maps opens but is unable to load path on the maps. It also show endless loading indicator in navigation steps place.

enter image description here

Recorded movie: https://drive.google.com/file/d/1MriakRfRhILNmdv_TvAXDhaz_uMrZag4/view?usp=sharing

Any ideas how to fix this issue, to force Google maps showing navigation path in case of disabled location permission in my app?

For opening google maps we use url:

comgooglemaps://?saddr=&center=56.66927193017708,12.864841503952087&directionsmode=walking&daddr=Halmstad+C+(T%C3%A5g)

I use Google Maps

pod ‘GoogleMaps’, ‘~> 4.1.0’

java – Guardar información de un spinner a una base de datos SQLite Android Studio

he escuchado que desde una BD se puede rellenar un spinner ¿pero cómo lo hago al revés? no encuentro información acerca de un spinner ya hecho y con base de lo ya seleccionado pueda almacenarlo en mi Base de Datos SQLite en Android Studio, por si acaso, uso java y lo necesito para después mostrarlo en un TextView en otra activity pero no sé cómo.. Me ayudan?

typescript – Handling a spinner for multiple REST calls

Context

In an Angular application, I have three <select> boxes that are fed from the database with a relatively small data set. These boxes are part of a filter Component that is displayed next to a server-side data table. The component outputs the filter asynchronously to the parent component, which then pipes into the table, invokes server, filters out SQL etc.

Focusing on the scope, when the control is loaded, I want to invoke the server with three GET invocations. Until they complete, I want to display a spinner.

Since I am using a library of controls, part of the code is already done. I want to ask here if I am handling the Observables correctly from the Angular point of view

Code I wrote so far

The code works

export class MyComponent implements OnInit, OnDestroy {

  public filterLoading$: BehaviorSubject<boolean>;
  public select1: Observable<string()>;
  public select2: Observable<string()>;
  public select3: Observable<string()>;
  private filterLoadingSub$?: Subscription;

  constructor(private remoteService: RemoteService) {
    this.select1 = remoteService.getFirst();
    this.select2 = remoteService.getSecond();
    this.select3 = remoteService.getThird();
    this.filterLoading$ = new BehaviorSubject<boolean>(true);
  }


  ngOnInit(): void {
    this.filterLoadingSub$ = forkJoin((this.select1, this.select2, this.select3))
      .subscribe(() => this.filterLoading$.next(false))
    ;
  }


  ngOnDestroy(): void {
    if (!!this.filterLoadingSub$) {
      this.filterLoadingSub$.unsubscribe();
    }
  }

}

Explanation:

  • selectX are bound to the front end with <option *ngFor="let x of (selectX | async)" ...>
  • The subject filterLoading$ is used to display the spinner. Actually my custom accordion handles it for me <acme-filter-panel isLoaded="!(filterLoading$ | async)>
  • Then I used forkJoin operator to wait for the completion of all three calls. I don’t care about the last returned valued, only that the three have completed. But this leads to a Subscription
  • Under the philosophy of dispose your own garbage, every time I hit a Subscription I always write code to unsubscribe. However, these are just HTTP calls that return only once when invoked.

I truly understand that I am not handling error logic, but really that goes beyond the scope of the question

Questions

My question is about two aspects.

Apart from moving code from constructor to ngOnInit, on reasons of symmetry, am I writing too much code or is there some simplification I can use to say Angular to unlock the spinner when all of the three invocations occurred?

Is it always necessary to always unsubscribe from subscriptions? Or are there cases in which a dangling subscription harms none? I learned that subscriptions use memory, so I deem necessary to clean up resources whenever possible, even if modern machines have gigabytes of RAM.

More in general, is it possible to write this piece in a more concise way? For three data sets I had to instantiate a fourth member, which is actually needed to monitor the spinner, and a fifth member used only on destruction to clean up. I often work with Observables & co.

I find in the google new spinner!

Maybe sombebody know about the Texterro and how doest it works?
And how google analyse content from this spinner or Article Forge is better?
thank you guys.

customization – Inserting our own CSS HTML preloader, removing Kirki’s spinner!

I’m an amateur in the customization and coding universe.

We have a WordPress website theme (Florian) which is using KIRKI as a customizer. We want to change Kirki’s default page loader animation (SVG spinner) with our own animation. We need the both default SVG image (which is Kirki’s logo) and the wave type spinner to be removed.

Please note that our own preloader does not contain an SVG image file. Instead, it has an SVG code inside CSS and HTML files. We don’t know how to remove Kirki’s SVG spinner and where to add our CSS and HTML codes. We need the preloader to show up and disappear before every new page gets loaded. We have an HTML file and a CSS file separately in which the shape and animation of our logo have been defined. The logo is our lab’s logo.

Would you please guide us on how to add the HTML and CSS codes to our theme through Kirki or any other possible way, to fulfill the above? Kindly explain in a simple and step by step technical language.

Looking forward to receiving your reply soon.

We appreciate your kind assistance and wish you all the best.
Cécile

uicomponent – Help to create form – now its neverending spinner

I’m learning to create an UI components form, but stuck on neverending spinner. Help me to create this form, step by step, please.
enter image description here I have a module in adminhtml which shows a table from database. This table contains columns id, age, name, comment. I need to build an edit form which shows after click on a row in the table.
File myadminroute_index_edit.xml was created in OverdoseAdminPanelviewadminhtmllayoutmyadminroute_index_edit.xml

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content">
            <block class="MagentoBackendBlockTemplate" template="Overdose_AdminPanel::future-form.phtml"/>
            <uiComponent name="overdose_friends_form"/>
        </referenceContainer>
    </body>
</page>

UI component overdose_friends_form.xml is located in *OverdoseAdminPanelviewbaseui_component*

<?xml version="1.0" encoding="UTF-8"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <argument name="data" xsi:type="array">
        <item name="js_config" xsi:type="array">
            <item name="provider" xsi:type="string">overdose_friends_form.overdose_friends_form_data_source</item>
            <item name="deps" xsi:type="string">overdose_friends_form.overdose_friends_form_data_source</item>
        </item>
        <item name="label" xsi:type="string" translate="true">Editing in the Form</item>
        <item name="layout" xsi:type="array">
            <item name="type" xsi:type="string">tabs</item>
        </item>
        <item name="config" xsi:type="array">
            <item name="dataScope" xsi:type="string">data</item>
        </item>
        <item name="buttons" xsi:type="array">
        <item name="primary" xsi:type="array">
            <item name="label" xsi:type="string" translate="true">Save Button</item>
            <item name="class" xsi:type="string">primary</item>
            <item name="url" xsi:type="string">myadminroute/index/save</item>
        </item>
            <item name="primary" xsi:type="array">
                <item name="label" xsi:type="string" translate="true">Back Button</item>
                <item name="class" xsi:type="string">primary</item>
                <item name="url" xsi:type="string">myadminroute/index/index</item>
            </item>
        </item>
        <item name="template" xsi:type="string">templates/form/collapsible</item>
    </argument>

    <dataSource name="overdose_friends_form_data_source">
        <argument name="dataProvider" xsi:type="configurableObject">
            <argument name="class" xsi:type="string">OverdoseAdminPanelControllerAdminhtmlModelDataprovider</argument>
            <argument name="name" xsi:type="string">overdose_friends_form_data_source</argument>
            <argument name="primaryFieldName" xsi:type="string">id</argument>
            <argument name="requestFieldName" xsi:type="string">id</argument>
        </argument>
        <argument name="data" xsi:type="array">
            <item name="js_config" xsi:type="array">
                <item name="component" xsi:type="string">Magento_Ui/js/form/provider</item>
            </item>
        </argument>
    </dataSource>

    <fieldset name="sample_fieldset">
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="label" xsi:type="string" translate="true">Sample Fieldset</item>
            </item>
        </argument>

        <!-- This field represents form id -->
        <field name="id">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="visible" xsi:type="boolean">true</item>
                    <item name="dataType" xsi:type="string">text</item>
                    <item name="formElement" xsi:type="string">input</item>
                    <item name="source" xsi:type="string">sampleform</item>
                </item>
            </argument>
        </field>
    </fieldset>
</form>

Dataprovider.php is located in *OverdoseAdminPanelControllerAdminhtmlModel*

<?php
namespace OverdoseAdminPanelControllerAdminhtmlModel;

use OverdoseLessonOneModelResourceModelCollectionFriendsFactory;

class DataProvider extends MagentoUiDataProviderAbstractDataProvider
{

    public function __construct(
        $name,
        $primaryFieldName,
        $requestFieldName,
        OverdoseLessonOneModelResourceModelCollectionFriendsFactory $friendsFactory,
        array $meta = (),
        array $data = ()
    ) {
        $this->collection = $friendsFactory->create();
        parent::__construct($name, $primaryFieldName, $requestFieldName, $meta, $data);
    }

    /**
     * Get data
     *
     * @return array
     */
    public function getData()
    {
        return ();
    }
}

The controller consists of AbstractController.php in *OverdoseAdminPanelControllerAdminhtmlIndex*

<?php
namespace OverdoseAdminPanelControllerAdminhtmlIndex;

use MagentoBackendAppAction;
use MagentoFrameworkAppConfigScopeConfigInterface;

abstract class AbstractController extends MagentoBackendAppAction

{
    const DEFAULT_ACTION_PATH = 'myadminroute/index/';

    protected $friendsFactory;
    protected $friendsResourceModel;


    public function __construct(
        ActionContext $context,
                // TODO: Add your repository or model/resourceModel classes here
        OverdoseLessonOneModelFriendsFactory $friendsFactory,
        OverdoseLessonOneModelResourceModelFriends $friendsResourceModel
    ) {

        parent::__construct($context);
        // TODO: Assign them to the protected variable, so that child classes can access it
        $this->friendsFactory = $friendsFactory;
        $this->friendsResourceModel = $friendsResourceModel;
    }
}

and Edit.php in *OverdoseAdminPanelControllerAdminhtmlIndex*

<?php
namespace OverdoseAdminPanelControllerAdminhtmlIndex;

use MagentoFrameworkAppActionHttpGetActionInterface;
use MagentoBackendAppAction;
use MagentoFrameworkControllerResultFactory;


class Edit extends AbstractController
{

    public function execute()
    {
        $adminPage = $this->resultFactory->create('page');

        $adminPage->getConfig()->getTitle()->prepend(__('Friend form'));

        $entityId = $this->getRequest()->getParam('id');
        //echo ($entityId);
     
        return  $adminPage;


    }
}

android – ¿guardar en una BBDD phpmyadmin el ID de lo que selecciono en un spinner?

<por favor su ayuda, los datos que obtengo de una tabla los muestro en el spinner, de ahí quiero guardar el id del item seleccionado pero no lose, he visto que se debe de crear un metodo para obtener primero el id y luego enviar a guardar. Estoy creando un metodo que esta en la parte de abajo que s de guardar porque estoy enviando datos adicionales a la misma tabla que quiero guardar lo del spinner por favor su ayuda. Gracias>

private void llenarSpinner(){ //se encarga de llamar al cargarspinner
        String url="obtener.php";
        cliente.post(url, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header() headers, byte() responseBody) {//evalua la pagina si e que cumple on la condicion
                if (statusCode == 200){
                    cargarSpinner (new String(responseBody));
                }

            }

            @Override
            public void onFailure(int statusCode, Header() headers, byte() responseBody, Throwable error) {

            }
        });
    }

    private void cargarSpinner(String respuesta){
        ArrayList <Barrio> lista = new ArrayList<Barrio>();

        try {
            JSONArray jsonArreglo = new JSONArray(respuesta);
            for(int i=0; i < jsonArreglo.length(); i++){
                Barrio b = new Barrio();
                b.setNombrebarrio(jsonArreglo.getJSONObject(i).getString("nombre_circuito"));
                lista.add(b);
            }
            ArrayAdapter <Barrio> a = new ArrayAdapter <Barrio> ( this, android.R.layout.simple_dropdown_item_1line, lista);
            spnbarrio.setAdapter(a);

        }catch (Exception e){
            e.printStackTrace();

        }
    }
}


y tengo el metodo agregar cliente y boton guardar-----

lo que hago en el metodo guardar es validar q los campos no esten vacios y si es qalguno esta envia un mensaje, y ahi llamo al agregar cliente

    private void agregarCliente(Cliente c){
        String url = "/agregarcliente.php?";
        String parametros = "cedula="+c.getCedula()+"&nombreclientes="+c.getNombres()+"&apellidoclientes="+c.getApellidos()+"&telefonoclientes="+c.getTelefono()+"&correoclientes="+c.getCorreo()+"&direccionclientes="+c.getDireccion()+"&distritoclientes="+c.getBarrio()+"&rucclientes"+c.getRuc();
        cliente.post(url + parametros, new AsyncHttpResponseHandler() {
            @Override
            public void onSuccess(int statusCode, Header() headers, byte() responseBody) {
                if(statusCode == 200){
                    Toast.makeText(ingresoclientes.this, "Cliente agregado correctamente", Toast.LENGTH_SHORT).show();
                    

                }
            }

            @Override
            public void onFailure(int statusCode, Header() headers, byte() responseBody, Throwable error) {

            }
        });
    }

magento2 – ImageUploader module causes stuck spinner on category view in Magento 2

everyone.
I want to create an image uploader that uploads an image to the server from the admin app category view using the ImageUploader UI component, and stores its path in the database.
So far, I can get the module to upload the image, and store it on the server (I can see the files in the pub/media/catalog/category directory), and the path is recorded in the database, but after the upload, the category view in the admin app is stuck with the spinner spinning, and the console outputs the following error:

file-uploader.js:79

TypeError: value.map is not a function. (In 'value.map(this.processFile, this)', 'value.map' is undefined)

Here is my complete source code:

Vendor/Module/Controller/Adminhtml/Category/Image/Upload.php

<?php

namespace VendorModuleControllerAdminhtmlCategoryImage;

use MagentoFrameworkAppActionHttpPostActionInterface;
use MagentoFrameworkControllerResultFactory;

class Upload extends MagentoBackendAppAction implements HttpPostActionInterface
{
    protected $imageUploader;

    public function __construct(
        MagentoBackendAppActionContext $context,
        MagentoCatalogModelImageUploader $imageUploader
    ) {
        parent::__construct($context);
        $this->imageUploader = $imageUploader;
    }

    protected function _isAllowed()
    {
        return $this->_authorization->isAllowed('Magento_Catalog::categories');
    }

    public function execute()
    {
        $imageId = $this->_request->getParam('param_name', 'subcategory_image');

        try {
            $result = $this->imageUploader->saveFileToTmpDir($imageId);
        } catch (Exception $e) {
            $result = ('error' => $e->getMessage(), 'errorcode' => $e->getCode());
        }
        return $this->resultFactory->create(ResultFactory::TYPE_JSON)->setData($result);
    }
}

Vendor/Module/etc/adminhtml/routes.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="admin">
        <route id="categorylist" frontName="categorylist">
            <module name="Vendor_Module" before="Magento_Backend" />
        </route>
    </router>
</config>

Vendor/Module/etc/di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <virtualType name="VendorModuleCategoryImageUpload" type="MagentoCatalogModelImageUploader">
        <arguments>
            <argument name="baseTmpPath" xsi:type="string">catalog/tmp/category</argument>
            <argument name="basePath" xsi:type="string">catalog/category</argument>
            <argument name="allowedExtensions" xsi:type="array">
                <item name="jpg" xsi:type="string">jpg</item>
                <item name="jpeg" xsi:type="string">jpeg</item>
                <item name="gif" xsi:type="string">gif</item>
                <item name="png" xsi:type="string">png</item>
            </argument>
            <argument name="allowedMimeTypes" xsi:type="array">
                <item name="jpg" xsi:type="string">image/jpg</item>
                <item name="jpeg" xsi:type="string">image/jpeg</item>
                <item name="gif" xsi:type="string">image/gif</item>
                <item name="png" xsi:type="string">image/png</item>
            </argument>
        </arguments>
    </virtualType>
    <type name="VendorModuleControllerAdminhtmlCategoryImageUpload">
        <arguments>
            <argument name="imageUploader" xsi:type="object">MagentoCatalogCategoryImageUpload</argument>
        </arguments>
    </type>
</config>

Vendor/Module/Helper/Data.php

<?php

namespace VendorModuleHelper;

class Data extends MagentoFrameworkAppHelperAbstractHelper
{
    protected $_storeManagerInterface;

    public function __construct(
        MagentoFrameworkAppHelperContext $context,
        MagentoStoreModelStoreManagerInterface $storeManagerInterface
    ) {
        $this->_storeManagerInterface = $storeManagerInterface;
        parent::__construct($context);
    }

    public function getIconImageUrl($category)
    {
        $url = null;
        $image = $category->getData('subcategory_image');
        if ($image) {
            if (is_string($image)) {
                $url = $this->_storeManagerInterface->getStore()->getBaseUrl(
                    MagentoFrameworkUrlInterface::URL_TYPE_MEDIA
                ) . 'catalog/category/' . $image;
            } else {
                $url = false;
            }
        }
        return $url;
    }
}

Vendor/Module/Model/Category/DataProvider.php

<?php

namespace VendorModuleModelCategory;

class DataProvider extends MagentoCatalogModelCategoryDataProvider
{
    public function getData()
    {
        if (isset($this->loadedData)) {
            return $this->loadedData;
        }
        $category = parent::getCurrentCategory();
        if ($category) {
            $categoryData = $category->getData();
            $categoryData = $this->addUseConfigSettings($categoryData);
            $categoryData = $this->filterFields($categoryData);
            $categoryData = $this->convertValues($category, $categoryData);

            $this->loadedData($category->getId()) = $categoryData;
        }
        return $this->loadedData;
    }

    private function convertValues($category, $categoryData)
    {
        $objectManager = MagentoFrameworkAppObjectManager::getInstance();
        $media_url = $objectManager->get('MagentoStoreModelStoreManagerInterface')->getStore()->getBaseUrl(MagentoFrameworkUrlInterface::URL_TYPE_MEDIA);
        $directory = $objectManager->get('MagentoFrameworkFilesystemDirectoryList');

        if (isset($categoryData('subcategory_image'))) {
            unset($categoryData('subcategory_image'));
            $fileName2 = $category->getData('subcategory_image');
            $helper = $objectManager->get('VendorModuleHelperData');
            $categoryData('subcategory_image')(0)('name') = $category->getData('subcategory_image');
            $categoryData('subcategory_image')(0)('url') = $helper->getIconimageUrl($category);
            $categoryData('subcategory_image')(0)('size') = @filesize($directory->getPath('media') . '/catalog/category/' . $fileName2);
        }
        return $categoryData;
    }

    protected function getFieldsMap()
    {
        $fields = parent::getFieldsMap();
        $fields('content')() = 'subcategory_image';
        return $fields;
    }
}

Vendor/Module/Setup/InstallData.php

<?php

namespace VendorModuleSetup;

use MagentoFrameworkModuleSetupMigration;
use MagentoFrameworkSetupInstallDataInterface;
use MagentoFrameworkSetupModuleContextInterface;
use MagentoFrameworkSetupModuleDataSetupInterface;
use MagentoCatalogSetupCategorySetupFactory;

class InstallData implements InstallDataInterface
{
    private $categorySetupFactory;

    public function __construct(CategorySetupFactory $categorySetupFactory)
    {
        $this->categorySetupFactory = $categorySetupFactory;
    }

    public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
    {
        $setup->startSetup();

        $categorySetup = $this->categorySetupFactory->create(('setup' => $setup));
        $entityTypeId = $categorySetup->getEntityTypeId(MagentoCatalogModelCategory::ENTITY);
        $attributeSetId = $categorySetup->getDefaultAttributeSetId($entityTypeId);
        $categorySetup->removeAttribute(
            MagentoCatalogModelCategory::ENTITY,
            'subcategory_image'
        );
        $categorySetup->addAttribute(
            MagentoCatalogModelCategory::ENTITY,
            'subcategory_image',
            (
                'backend'      => 'MagentoCatalogModelCategoryAttributeBackendImage',
                'type'         => 'varchar',
                'input'        => 'image',
                'label'        => 'Image',
                'name'         => 'Image',
                'source'       => '',
                'visible'      => true,
                'required'     => false,
                'user_defined' => true,
                'group'        => 'Content',
                'global'       => MagentoEavModelEntityAttributeScopedAttributeInterface::SCOPE_GLOBAL
            )
        );

        $setup->endSetup();
    }
}

Vendor/Module/view/adminhtml/ui_component/category_form.xml

<?xml version="1.0"?>
<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <fieldset name="content">
        <field name="subcategory_image" formElement="imageUploader" sortOrder="3">
            <argument name="data" xsi:type="array">
                <item name="config" xsi:type="array">
                    <item name="source" xsi:type="string">category</item>
                </item>
            </argument>
            <settings>
                <elementTmpl>ui/form/element/uploader/image</elementTmpl>
                <dataType>string</dataType>
                <notice translate="true">This image will be displayed as a category menu item in the parent category</notice>
                <label translate="true">Category Menu Image</label>
                <componentType>imageUploader</componentType>
                <visible>true</visible>
                <required>false</required>
            </settings>
            <formElements>
                <imageUploader>
                    <settings>
                        <required>false</required>
                        <allowedExtensions>jpg jpeg gif png</allowedExtensions>
                        <maxFileSize>4194304</maxFileSize>
                        <uploaderConfig>
                            <param xsi:type="url" name="url" path="categorylist/category_image/upload" />
                        </uploaderConfig>
                        <initialMediaGalleryOpenSubpath>catalog/category</initialMediaGalleryOpenSubpath>
                        <previewTmpl>Magento_Catalog/image-preview</previewTmpl>
                        <openDialogTitle>Media Gallery</openDialogTitle>
                    </settings>
                </imageUploader>
            </formElements>
        </field>
    </fieldset>
</form>

Any suggestions on how I might fix this?
Thank you in advance!