sb-mig
Version:
CLI to rule the world. (and handle stuff related to Storyblok CMS)
59 lines (58 loc) • 2.16 kB
JavaScript
import { getAllItemsWithPagination } from "../../api/utils/request.js";
export async function getAllDatasources(client) {
const spaceId = client.spaceId;
return getAllItemsWithPagination({
apiFn: ({ per_page, page }) => client.sbApi.get(`spaces/${spaceId}/datasources/`, {
per_page,
page,
}),
params: { spaceId },
itemsKey: "datasources",
});
}
export async function getDatasource(client, datasourceName) {
const datasources = await getAllDatasources(client);
const match = datasources.filter((d) => d.name === datasourceName);
if (Array.isArray(match) && match.length === 0)
return false;
return match;
}
export async function createDatasource(client, datasource) {
const spaceId = client.spaceId;
const finalDatasource = {
name: datasource.name,
slug: datasource.slug,
dimensions: [...(datasource.dimensions ?? [])],
dimensions_attributes: [...(datasource.dimensions ?? [])],
};
return client.sbApi
.post(`spaces/${spaceId}/datasources/`, {
datasource: finalDatasource,
})
.then((res) => res.data);
}
export async function updateDatasource(client, args) {
const spaceId = client.spaceId;
const { datasource, datasourceToBeUpdated } = args;
const dimensionsToCreate = (datasource.dimensions ?? []).filter((dimension) => {
const isDimensionInRemoteDatasource = datasourceToBeUpdated.dimensions?.find((d) => dimension.name === d.name);
return !isDimensionInRemoteDatasource;
});
return client.sbApi
.put(`spaces/${spaceId}/datasources/${datasourceToBeUpdated.id}`, {
datasource: {
id: datasourceToBeUpdated.id,
name: datasource.name,
slug: datasource.slug,
dimensions: [
...(datasourceToBeUpdated.dimensions ?? []),
...dimensionsToCreate,
],
dimensions_attributes: [
...(datasourceToBeUpdated.dimensions ?? []),
...dimensionsToCreate,
],
},
})
.then((res) => res.data);
}