Tableau API Uncaught (в обещании) Исключение $ {_message: «Параметр не может быть пустым или пустым: fieldName» - PullRequest
0 голосов
/ 20 марта 2020

Надеясь, что кто-то здесь может помочь мне понять, почему я получаю это сообщение об ошибке. Я рефакторинг компонента класса в функциональный компонент с React Hooks, и я делал console.log () почти на каждой строке, которую я могу проверить, чтобы убедиться, что я возвращаю те же значения, что и исходный код. Все в консоли совпадает, пока я не доберусь до части asyn c await, и именно здесь консоль указывает, что я сталкиваюсь с проблемой «Параметр не может быть пустым или пустым: fieldName». У кого-нибудь есть идеи? ТИА! (Кстати, я знаю, что здесь много кода для отображения, но поскольку информационные панели доступны только при входе в нашу VPN, я не знаю лучшего способа отображения кода.)

const Categorical = () => {
let viz = useSelector(state => state.fetchDashboard);
const filterSelect = useSelector(state => state.fetchFilterSelect); 
let filterApplied = useSelector(state => state.fetchFilter);
const globalFilterTitles = ["Region", "Service Area", "Contract - Cohort"];
const globalFilters = useSelector(state => state.globalFilters)
const dispatch = useDispatch();
const selectedDashboard = useSelector(state => state.selectedDashboard);

const handleChange = (event, key, filterTitle) => {
    let selectedValues = filterApplied;
    let ind = event.target.value.indexOf("All");
    if (filterSelect[key].indexOf("All") > -1) {
        if (ind === -1) {
            selectedValues[key] = [];
        } else {
            event.target.value.shift();
            selectedValues[key] = event.target.value;
        }
    } else if (filterSelect[key].indexOf("All") > -1) {
        if (ind > -1) {
            selectedValues[key] = filterSelect[filterTitle];
        } else if (
            event.target.value.length + 1 ===
            filterSelect[filterTitle].length
        ) {
            selectedValues[key] = filterSelect[filterTitle];
        } else {
            selectedValues[key] = event.target.value;
        }
    } else selectedValues[key] = event.target.value;
    console.log(selectedValues[key]);

    return (
        prevState => ({
            ...prevState,
            filterApplied: selectedValues[key]
        }),

        async function () {
            const values =
                filterSelect[key].indexOf("All") > -1
                    ? ""
                    : filterSelect[key];
            const fType = values === "" ? "All" : "Replace";
            let sheet = await viz
                .getWorkbook()
                .getActiveSheet()
                .getWorksheets()
                .get("Index");

            sheet
                .applyFilterAsync(filterTitle, values, fType)
                .then(function () { })

                .otherwise(function (err) {
                    alert(err);
                });

            let filterNames = {};
            let filters = await sheet.getFiltersAsync();

            for (let filter in filters) {
                if (!isNaN(parseInt(filter))) {
                    if (
                        filters[filter].getFilterType() === "categorical" &&
                        filters[filter].getFieldName() !== "Measure Names" &&
                        filters[filter].getFieldName() !== "Measure Values" &&
                        filters[filter].getFieldName().search("_hide") < 0
                    ) {
                        let filterTitle = filters[filter].getFieldName();
                        filterNames[filterTitle] = [];
                        console.log(filterNames[filterTitle])

                        let len = filters[filter].getAppliedValues().length;
                        if (
                            selectedDashboard.categoryForceSelect.indexOf(
                                filterTitle
                            ) === -1 &&
                            len !== 0 &&
                            filterSelect[filterTitle].length - 1 === len
                        ) {
                            filterNames[filterTitle].push("All");
                        }

                        for (let i = 0; i < len; i++) {
                            if (filters[filter].getAppliedValues()[i].value !== null) {
                                filterNames[filterTitle].push(
                                    filters[filter].getAppliedValues()[i].value
                                );
                            }
                        }
                    }
                }
            }

            fetchFilter(filterNames);
            if (globalFilterTitles.indexOf(filterTitle) > -1) {
                console.log(globalFilterTitles.indexOf(filterTitle));
                //take previous value of filters
                globalFilters[filterTitle] = filterNames[filterTitle]; // add new values to previous values
                console.log(globalFilters);

                setGlobalFilters(globalFilters);
            } //update state with most recent values.
            //Now whenever a new dashboard is requested, the most recent state of global filters will be applied.
        }
    );
};

1 Ответ

0 голосов
/ 23 марта 2020

Я обнаружил, что значение sheet.applyFilterAsyn c (filterTitle) возвращается как неопределенное; как только я изменил это на ключ в соответствующих местах, он работал как ожидалось.

...