Skip to content

Commit

Permalink
feat: Add client methods for fetching, creating, and delting Columns.
Browse files Browse the repository at this point in the history
  • Loading branch information
adam-coster committed Jul 2, 2021
1 parent b2318a7 commit 8a6d604
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 11 deletions.
67 changes: 56 additions & 11 deletions src/lib/BravoClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ import type {
ConstructorFavroEntity,
} from '$/types/FavroApiTypes';
import type { OptionsBravoCreateWidget } from '$/types/ParameterOptions.js';
import { BravoColumn } from './entities/BravoColumn.js';
import { DataFavroColumn } from '$/types/FavroColumnTypes.js';

export class BravoClient extends FavroClient {
//#region Organizations
Expand Down Expand Up @@ -192,13 +194,7 @@ export class BravoClient extends FavroClient {
}

async deleteCollectionById(collectionId: string) {
const res = await this.request(`collections/${collectionId}`, {
method: 'delete',
});
assertBravoClaim(
res.succeeded,
`Failed to delete collection with status ${res.status}`,
);
await this.deleteEntity(`collections/${collectionId}`);
this.cache.removeCollection(collectionId);
}

Expand Down Expand Up @@ -389,17 +385,66 @@ export class BravoClient extends FavroClient {
}

async deleteWidgetById(widgetCommonId: string) {
const res = await this.request(`widgets/${widgetCommonId}`, {
await this.deleteEntity(`widgets/${widgetCommonId}`);
}
//#endregion

//#region COLUMNS

/**
* Create a new column on a Widget.
* {@link https://favro.com/developer/#create-a-column}
*/
async createColumn(
widgetCommonId: string,
name: string,
options?: { position?: number },
) {
const res = await this.requestWithReturnedEntities(
`columns`,
{
method: 'post',
body: {
widgetCommonId,
name,
position: options?.position,
},
},
BravoColumn,
);
const column = (await res.getAllEntities())[0] as BravoColumn | undefined;
assertBravoClaim(column, `Failed to create widget`);
// TODO: UPDATE CACHE
return column;
}

async listColumns(widgetCommonId: string) {
const res = (await this.requestWithReturnedEntities(
`columns`,
{ method: 'get', query: { widgetCommonId } },
BravoColumn,
)) as BravoResponseEntities<DataFavroColumn, BravoColumn>;
// TODO: UPDATE CACHE
return await res.getAllEntities();
}

async deleteColumnById(columnId: string) {
// TODO: UPDATE CACHE
await this.deleteEntity(`columns/${columnId}`);
}

//#endregion

private async deleteEntity(url: string) {
const res = await this.request(url, {
method: 'delete',
});
assertBravoClaim(
res.succeeded,
`Failed to delete collection with status ${res.status}`,
`Failed to delete entity at ${url}; Status: ${res.status}`,
);
}

//#endregion

/**
* Clear all cached data. This is useful if you need to
* ensure that data from your next requests are completely
Expand Down
10 changes: 10 additions & 0 deletions src/lib/entities/BravoWidget.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
import { DataFavroWidget } from '$types/FavroWidgetTypes.js';
import { BravoEntity } from '$lib/BravoEntity.js';
import { selectRandom } from '$lib/utility.js';
import { BravoColumn } from './BravoColumn.js';

export type OptionWidgetColor = typeof BravoWidget['colors'][number];

export class BravoWidget extends BravoEntity<DataFavroWidget> {
private _columns?: BravoColumn[];

get widgetCommonId() {
return this._data.widgetCommonId;
}
Expand All @@ -24,6 +27,13 @@ export class BravoWidget extends BravoEntity<DataFavroWidget> {
return this._data.editRole;
}

async getColumns() {
if (!this._columns) {
this._columns = await this._client.listColumns(this.widgetCommonId);
}
return [...this._columns];
}

async delete() {
if (!this.deleted) {
await this._client.deleteWidgetById(this.widgetCommonId);
Expand Down

0 comments on commit 8a6d604

Please sign in to comment.