Uncaught TypeError: data.some is not a function

16,322

Solution 1

I've got this issue while creating a form using UI Components, specifically Select component. I was missing the caption element, so if anybody encounter this issue they might be missing an element.

<form>
...
<fieldset>
    ...
    <field name="select_example" formElement="select">
        <settings>
            <dataType>text</dataType>
            <label translate="true">Select Example</label>
            <dataScope>select_example</dataScope>
        </settings>
        <formElements>
            <select>
                <settings>
                    <options>
                        <option name="1" xsi:type="array">
                            <item name="value" xsi:type="string">1</item>
                            <item name="label" xsi:type="string">Option #1</item>
                        </option>
                        <option name="2" xsi:type="array">
                            <item name="value" xsi:type="string">2</item>
                            <item name="label" xsi:type="string">Option #2</item>
                        </option>
                        <option name="3" xsi:type="array">
                            <item name="value" xsi:type="string">3</item>
                            <item name="label" xsi:type="string">Option #3</item>
                        </option>
                    </options>
                    <caption translate="true">-- Please Select --</caption>
                </settings>
            </select>
        </formElements>
    </field>

Solution 2

In Magento 2.1.8 there was a method removed that may affect certain extensions - it affected ours called getOptionArray().

To fix it in our extension in: Ui/DataProvider/Product/Form/Modifier/FixedSelectionType.php

'options' => FixedType::getOptionArray(),

becomes:

'options' => FixedType::getOptionsArray(),

and in the model/attribute folder add this method, in our case the full path is: Model/Attribute/Sources/FixedType.php

and above the public function getalloptions() method add this:

public static function getOptionsArray()
 {
     $result = [];

     foreach (self::getOptionArray() as $index => $value) {
         $result[] = ['value' => $index, 'label' => $value];
     }

     return $result;
 }
Share:
16,322
10 Gauge
Author by

10 Gauge

Updated on June 24, 2022

Comments

  • 10 Gauge
    10 Gauge almost 2 years

    I am trying to figure out a JS error I am receiving in a Magento e-commerce extension that I paid good money for, but support has been lacking on their end to fix this. Error causes a spinning wheel of doom on page load that never goes away.

    The following is the error I receive in the developer console:

    Uncaught TypeError: data.some is not a function
    at findFirst (select.js:67)
    at UiClass.normalizeData (select.js:193)
    at UiClass.normalizeData (wrapper.js:109)
    at UiClass.getInitialValue (abstract.js:200)
    at UiClass.setInitialValue (abstract.js:143)
    at UiClass._super (wrapper.js:106)
    at UiClass.setInitialValue (select.js:302)
    at UiClass.setInitialValue (wrapper.js:109)
    at UiClass.initialize (abstract.js:70)
    at UiClass.initialize (wrapper.js:109)
    

    This is the code section at line 67 of select.js data.some(function (node) { the error is referencing:

    /**
     * Recursively loops over data to find non-undefined, non-array value
     *
     * @param  {Array} data
     * @return {*} - first non-undefined value in array
     */
    function findFirst(data) {
        var value;
    
        data.some(function (node) {
            value = node.value;
    
            if (Array.isArray(value)) {
                value = findFirst(value);
            }
    
            return !_.isUndefined(value);
        });
    
        return value;
    }
    

    I am hoping this is just some kind of typo error that I might be able to fix on my own?

    Thanks in advance for any help.

    P.S. I am a coding novice.