Newer
Older
import _ from "underscore";
import { ROOT_COLLECTION } from "metabase/entities/collections";
import { Card, Collection } from "metabase-types/api";
import {
convertSavedQuestionToVirtualTable,
getCollectionVirtualSchemaName,
SAVED_QUESTIONS_VIRTUAL_DB_ID,
} from "metabase-lib/metadata/utils/saved-questions";
export function setupCollectionsEndpoints(
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
scope: Scope,
collections: Collection[],
) {
scope.get("/api/collection").reply(200, collections);
scope.get("/api/collection/tree?tree=true").reply(200, collections);
scope.get("/api/collection/root").reply(200, ROOT_COLLECTION);
}
function getCollectionVirtualSchemaURLs(collection: Collection) {
const db = SAVED_QUESTIONS_VIRTUAL_DB_ID;
const schemaName = getCollectionVirtualSchemaName(collection);
const schema = encodeURIComponent(schemaName);
const questions = ["/api/database/", db, "/schema/", schema].join("");
const models = ["/api/database/", db, "/datasets/", schema].join("");
return { questions, models };
}
export function setupCollectionVirtualSchemaEndpoints(
scope: Scope,
collection: Collection,
cards: Card[],
) {
const urls = getCollectionVirtualSchemaURLs(collection);
const [models, questions] = _.partition(cards, card => card.dataset);
const modelVirtualTables = models.map(convertSavedQuestionToVirtualTable);
const questionVirtualTables = questions.map(
convertSavedQuestionToVirtualTable,
);
scope.get(urls.questions).reply(200, questionVirtualTables);
scope.get(urls.models).reply(200, modelVirtualTables);
}