@knapsack/app
Version:
Build Design Systems on top of knapsack, by Basalt
91 lines (81 loc) • 2.45 kB
text/typescript
/**
* Copyright (C) 2018 Basalt
This file is part of Knapsack.
Knapsack is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2 of the License, or (at your option)
any later version.
Knapsack is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
more details.
You should have received a copy of the GNU General Public License along
with Knapsack; if not, see <https://www.gnu.org/licenses>.
*/
import GraphQLJSON from 'graphql-type-json';
import { FileDb } from './dbs/file-db';
import { PageBuilderPage, PageBuilderSlice } from '../schemas/page-builder';
export { pageBuilderPagesTypeDef } from '../schemas/page-builder';
export class PageBuilder {
db: FileDb;
constructor({
dataDir,
}: {
/**
* Directory to read/write examples files to
*/
dataDir: string;
}) {
this.db = new FileDb({
dbDir: dataDir,
name: 'knapsack.page-builder',
defaults: {},
});
}
async getPageBuilderPage(id: string): Promise<PageBuilderPage> {
return this.db.get(id);
}
async getPageBuilderPages(): Promise<PageBuilderPage[]> {
return this.db.values();
}
async setPageBuilderPage(
id: string,
data: PageBuilderPage,
): Promise<{
ok: boolean;
message: string;
}> {
try {
this.db.set(id, data);
return {
ok: true,
message: `PageBuilderPage ${id} saved successfully!`,
};
} catch (e) {
return {
ok: false,
message: `PageBuilderPage ${id} NOT saved successfully. ${e.toString()}`,
};
}
}
}
export const pageBuilderPagesResolvers = {
Query: {
pageBuilderPage: (parent, { id }, { pageBuilderPages }) =>
pageBuilderPages.getPageBuilderPage(id),
pageBuilderPages: (parent, args, { pageBuilderPages }) =>
pageBuilderPages.getPageBuilderPages(),
},
Mutation: {
setPageBuilderPage: async (
parent,
{ id, data },
{ pageBuilderPages, canWrite },
) => {
if (!canWrite) return false;
await pageBuilderPages.setPageBuilderPage(id, data);
return pageBuilderPages.getPageBuilderPage(id);
},
},
JSON: GraphQLJSON,
};