Ejemplo n.º 1
0
            cellClickedFn: function(rowIndex, columnIndex, filter) {
                if (!queryResult) return false;

                // lookup the coldef and cell value of the cell we are taking action on
                var coldef = queryResult.data.cols[columnIndex],
                    value = queryResult.data.rows[rowIndex][columnIndex];

                if (coldef.special_type === "id") {
                    // action is on a PK column
                    let newCard = startNewCard("query", card.dataset_query.database);

                    newCard.dataset_query.query.source_table = coldef.table_id;
                    newCard.dataset_query.query.aggregation = ["rows"];
                    newCard.dataset_query.query.filter = ["AND", ["=", coldef.id, value]];

                    // run it
                    setCard(newCard);

                    MetabaseAnalytics.trackEvent("QueryBuilder", "Table Cell Click", "PK");
                } else if (coldef.special_type === "fk") {
                    // action is on an FK column
                    let newCard = startNewCard("query", card.dataset_query.database);

                    newCard.dataset_query.query.source_table = coldef.target.table_id;
                    newCard.dataset_query.query.aggregation = ["rows"];
                    newCard.dataset_query.query.filter = ["AND", ["=", coldef.target.id, value]];

                    // run it
                    setCard(newCard);

                    MetabaseAnalytics.trackEvent("QueryBuilder", "Table Cell Click", "FK");
                } else {
                    // this is applying a filter by clicking on a cell value
                    let dataset_query = angular.copy(card.dataset_query);
                    Query.addFilter(dataset_query.query);

                    if (coldef.unit) {
                        // this is someone using quick filters on a datetime value
                        let start = moment(value).format("YYYY-MM-DD");
                        let end = start;
                        switch(coldef.unit) {
                            case "week": end = moment(value).add(1, "weeks").subtract(1, "days").format("YYYY-MM-DD"); break;
                            case "month": end = moment(value).add(1, "months").subtract(1, "days").format("YYYY-MM-DD"); break;
                            case "quarter": end = moment(value).add(1, "quarters").subtract(1, "days").format("YYYY-MM-DD"); break;
                            case "year": start = moment(value, "YYYY").format("YYYY-MM-DD");
                                         end = moment(value, "YYYY").add(1, "years").subtract(1, "days").format("YYYY-MM-DD"); break;
                        }
                        Query.updateFilter(dataset_query.query, dataset_query.query.filter.length - 1, ["BETWEEN", coldef.id, start, end]);

                    } else {
                        // quick filtering on a normal value (string/number)
                        Query.updateFilter(dataset_query.query, dataset_query.query.filter.length - 1, [filter, coldef.id, value]);
                    }

                    onQueryChanged(dataset_query);
                    runQuery();

                    MetabaseAnalytics.trackEvent("QueryBuilder", "Table Cell Click", "Quick Filter");
                 }
            },
Ejemplo n.º 2
0
            cellClickedFn: function(rowIndex, columnIndex, filter) {
                if (!queryResult) return false;

                // lookup the coldef and cell value of the cell we are taking action on
                var coldef = queryResult.data.cols[columnIndex],
                    value = queryResult.data.rows[rowIndex][columnIndex];

                if (coldef.special_type === "id") {
                    // action is on a PK column
                    let newCard = startNewCard("query", card.dataset_query.database);

                    newCard.dataset_query.query.source_table = coldef.table_id;
                    newCard.dataset_query.query.aggregation = ["rows"];
                    newCard.dataset_query.query.filter = ["AND", ["=", coldef.id, value]];

                    // run it
                    setCard(newCard);

                } else if (coldef.special_type === "fk") {
                    // action is on an FK column
                    let newCard = startNewCard("query", card.dataset_query.database);

                    newCard.dataset_query.query.source_table = coldef.target.table_id;
                    newCard.dataset_query.query.aggregation = ["rows"];
                    newCard.dataset_query.query.filter = ["AND", ["=", coldef.target.id, value]];

                    // run it
                    setCard(newCard);

                } else {
                    // this is applying a filter by clicking on a cell value
                    let dataset_query = angular.copy(card.dataset_query);
                    Query.addFilter(dataset_query.query);
                    Query.updateFilter(dataset_query.query, dataset_query.query.filter.length - 1, [filter, coldef.id, value]);
                    onQueryChanged(dataset_query);
                    runQuery();
                 }
            },
Ejemplo n.º 3
0
    return async (dispatch, getState) => {
        const { qb: { card, queryResult } } = getState();
        if (!queryResult) return false;

        // lookup the coldef and cell value of the cell we are taking action on
        var coldef          = queryResult.data.cols[columnIndex],
            value           = queryResult.data.rows[rowIndex][columnIndex],
            sourceTableID   = card.dataset_query.query.source_table,
            isForeignColumn = coldef.table_id && coldef.table_id !== sourceTableID && coldef.fk_field_id,
            fieldRefForm    = isForeignColumn ? ['fk->', coldef.fk_field_id, coldef.id] : ['field-id', coldef.id];

        if (isPK(coldef.special_type)) {
            // action is on a PK column
            let newCard = startNewCard("query", card.dataset_query.database);

            newCard.dataset_query.query.source_table = coldef.table_id;
            newCard.dataset_query.query.aggregation = ["rows"];
            newCard.dataset_query.query.filter = ["AND", ["=", coldef.id, value]];

            // run it
            dispatch(setCardAndRun(newCard));

            MetabaseAnalytics.trackEvent("QueryBuilder", "Table Cell Click", "PK");
        } else if (isFK(coldef.special_type)) {
            // action is on an FK column
            let newCard = startNewCard("query", card.dataset_query.database);

            newCard.dataset_query.query.source_table = coldef.target.table_id;
            newCard.dataset_query.query.aggregation = ["rows"];
            newCard.dataset_query.query.filter = ["AND", ["=", coldef.target.id, value]];

            // run it
            dispatch(setCardAndRun(newCard));

            MetabaseAnalytics.trackEvent("QueryBuilder", "Table Cell Click", "FK");
        } else {
            // this is applying a filter by clicking on a cell value
            let dataset_query = Utils.copy(card.dataset_query);

            if (coldef.unit && coldef.unit != "default" && filter === "=") {
                // this is someone using quick filters on a datetime value
                let start = moment(value).format("YYYY-MM-DD");
                let end = start;
                switch(coldef.unit) {
                    case "week": end = moment(value).add(1, "weeks").subtract(1, "days").format("YYYY-MM-DD"); break;
                    case "month": end = moment(value).add(1, "months").subtract(1, "days").format("YYYY-MM-DD"); break;
                    case "quarter": end = moment(value).add(1, "quarters").subtract(1, "days").format("YYYY-MM-DD"); break;
                    case "year": start = moment(value, "YYYY").format("YYYY-MM-DD");
                                 end = moment(value, "YYYY").add(1, "years").subtract(1, "days").format("YYYY-MM-DD"); break;
                }
                Query.addFilter(dataset_query.query, ["BETWEEN", fieldRefForm, start, end]);
            } else {
                // quick filtering on a normal value (string/number)
                Query.addFilter(dataset_query.query, [filter, fieldRefForm, value]);
            }

            // update and run the query
            dispatch(setQuery(dataset_query, true));

            MetabaseAnalytics.trackEvent("QueryBuilder", "Table Cell Click", "Quick Filter");
        }
    };