Proper typing
This commit is contained in:
parent
47e16dd844
commit
342d70b326
|
@ -7,11 +7,11 @@ import * as internal from "./internal"
|
||||||
import * as external from "./external"
|
import * as external from "./external"
|
||||||
import { isExternalTableID } from "../../../integrations/utils"
|
import { isExternalTableID } from "../../../integrations/utils"
|
||||||
import {
|
import {
|
||||||
AutomationEventType,
|
|
||||||
Ctx,
|
Ctx,
|
||||||
DeleteRow,
|
DeleteRow,
|
||||||
DeleteRowRequest,
|
DeleteRowRequest,
|
||||||
DeleteRows,
|
DeleteRows,
|
||||||
|
EventType,
|
||||||
ExportRowsRequest,
|
ExportRowsRequest,
|
||||||
ExportRowsResponse,
|
ExportRowsResponse,
|
||||||
FieldType,
|
FieldType,
|
||||||
|
@ -67,7 +67,7 @@ export async function patch(
|
||||||
ctx.status = 200
|
ctx.status = 200
|
||||||
|
|
||||||
ctx.eventEmitter?.emitRow({
|
ctx.eventEmitter?.emitRow({
|
||||||
eventName: AutomationEventType.ROW_UPDATE,
|
eventName: EventType.ROW_UPDATE,
|
||||||
appId,
|
appId,
|
||||||
row,
|
row,
|
||||||
table,
|
table,
|
||||||
|
@ -104,14 +104,14 @@ export const save = async (ctx: UserCtx<Row, Row>) => {
|
||||||
sdk.rows.save(sourceId, ctx.request.body, ctx.user?._id)
|
sdk.rows.save(sourceId, ctx.request.body, ctx.user?._id)
|
||||||
)
|
)
|
||||||
ctx.status = 200
|
ctx.status = 200
|
||||||
ctx.eventEmitter &&
|
|
||||||
ctx.eventEmitter.emitRow({
|
ctx.eventEmitter?.emitRow({
|
||||||
eventName: `row:save`,
|
eventName: EventType.ROW_SAVE,
|
||||||
appId,
|
appId,
|
||||||
row,
|
row,
|
||||||
table,
|
table,
|
||||||
user: sdk.users.getUserContextBindings(ctx.user),
|
user: sdk.users.getUserContextBindings(ctx.user),
|
||||||
})
|
})
|
||||||
ctx.message = `${table.name} saved successfully`
|
ctx.message = `${table.name} saved successfully`
|
||||||
// prefer squashed for response
|
// prefer squashed for response
|
||||||
ctx.body = row || squashed
|
ctx.body = row || squashed
|
||||||
|
@ -183,13 +183,12 @@ async function deleteRows(ctx: UserCtx<DeleteRowRequest>) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let row of rows) {
|
for (let row of rows) {
|
||||||
ctx.eventEmitter &&
|
ctx.eventEmitter?.emitRow({
|
||||||
ctx.eventEmitter.emitRow({
|
eventName: EventType.ROW_DELETE,
|
||||||
eventName: `row:delete`,
|
appId,
|
||||||
appId,
|
row,
|
||||||
row,
|
user: sdk.users.getUserContextBindings(ctx.user),
|
||||||
user: sdk.users.getUserContextBindings(ctx.user),
|
})
|
||||||
})
|
|
||||||
gridSocket?.emitRowDeletion(ctx, row)
|
gridSocket?.emitRowDeletion(ctx, row)
|
||||||
}
|
}
|
||||||
return rows
|
return rows
|
||||||
|
@ -204,13 +203,12 @@ async function deleteRow(ctx: UserCtx<DeleteRowRequest>) {
|
||||||
await quotas.removeRow()
|
await quotas.removeRow()
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.eventEmitter &&
|
ctx.eventEmitter?.emitRow({
|
||||||
ctx.eventEmitter.emitRow({
|
eventName: EventType.ROW_DELETE,
|
||||||
eventName: `row:delete`,
|
appId,
|
||||||
appId,
|
row: resp.row,
|
||||||
row: resp.row,
|
user: sdk.users.getUserContextBindings(ctx.user),
|
||||||
user: sdk.users.getUserContextBindings(ctx.user),
|
})
|
||||||
})
|
|
||||||
gridSocket?.emitRowDeletion(ctx, resp.row)
|
gridSocket?.emitRowDeletion(ctx, resp.row)
|
||||||
|
|
||||||
return resp
|
return resp
|
||||||
|
|
|
@ -17,6 +17,7 @@ import {
|
||||||
import { context, features } from "@budibase/backend-core"
|
import { context, features } from "@budibase/backend-core"
|
||||||
import {
|
import {
|
||||||
ContextUser,
|
ContextUser,
|
||||||
|
EventType,
|
||||||
FeatureFlag,
|
FeatureFlag,
|
||||||
FieldType,
|
FieldType,
|
||||||
LinkDocumentValue,
|
LinkDocumentValue,
|
||||||
|
@ -44,15 +45,7 @@ const INVALID_DISPLAY_COLUMN_TYPE = [
|
||||||
* This functionality makes sure that when rows with links are created, updated or deleted they are processed
|
* This functionality makes sure that when rows with links are created, updated or deleted they are processed
|
||||||
* correctly - making sure that no stale links are left around and that all links have been made successfully.
|
* correctly - making sure that no stale links are left around and that all links have been made successfully.
|
||||||
*/
|
*/
|
||||||
|
export { EventType } from "@budibase/types"
|
||||||
export const EventType = {
|
|
||||||
ROW_SAVE: "row:save",
|
|
||||||
ROW_UPDATE: "row:update",
|
|
||||||
ROW_DELETE: "row:delete",
|
|
||||||
TABLE_SAVE: "table:save",
|
|
||||||
TABLE_UPDATED: "table:updated",
|
|
||||||
TABLE_DELETE: "table:delete",
|
|
||||||
}
|
|
||||||
|
|
||||||
function clearRelationshipFields(schema: TableSchema, rows: Row[]) {
|
function clearRelationshipFields(schema: TableSchema, rows: Row[]) {
|
||||||
for (let [key, field] of Object.entries(schema)) {
|
for (let [key, field] of Object.entries(schema)) {
|
||||||
|
|
|
@ -1,6 +1,12 @@
|
||||||
import { EventEmitter } from "events"
|
import { EventEmitter } from "events"
|
||||||
import { rowEmission, tableEmission } from "./utils"
|
import { rowEmission, tableEmission } from "./utils"
|
||||||
import { Table, Row, User } from "@budibase/types"
|
import {
|
||||||
|
Table,
|
||||||
|
Row,
|
||||||
|
UserBindings,
|
||||||
|
EventType,
|
||||||
|
ContextEmitter,
|
||||||
|
} from "@budibase/types"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* keeping event emitter in one central location as it might be used for things other than
|
* keeping event emitter in one central location as it might be used for things other than
|
||||||
|
@ -12,7 +18,7 @@ import { Table, Row, User } from "@budibase/types"
|
||||||
* Extending the standard emitter to some syntactic sugar and standardisation to the emitted event.
|
* Extending the standard emitter to some syntactic sugar and standardisation to the emitted event.
|
||||||
* This is specifically quite important for template strings used in automations.
|
* This is specifically quite important for template strings used in automations.
|
||||||
*/
|
*/
|
||||||
class BudibaseEmitter extends EventEmitter {
|
class BudibaseEmitter extends EventEmitter implements ContextEmitter {
|
||||||
emitRow({
|
emitRow({
|
||||||
eventName,
|
eventName,
|
||||||
appId,
|
appId,
|
||||||
|
@ -21,17 +27,17 @@ class BudibaseEmitter extends EventEmitter {
|
||||||
oldRow,
|
oldRow,
|
||||||
user,
|
user,
|
||||||
}: {
|
}: {
|
||||||
eventName: string
|
eventName: EventType.ROW_SAVE | EventType.ROW_DELETE | EventType.ROW_UPDATE
|
||||||
appId: string
|
appId: string
|
||||||
row: Row
|
row: Row
|
||||||
table?: Table
|
table?: Table
|
||||||
oldRow?: Row
|
oldRow?: Row
|
||||||
user: User
|
user: UserBindings
|
||||||
}) {
|
}) {
|
||||||
rowEmission({ emitter: this, eventName, appId, row, table, oldRow, user })
|
rowEmission({ emitter: this, eventName, appId, row, table, oldRow, user })
|
||||||
}
|
}
|
||||||
|
|
||||||
emitTable(eventName: string, appId: string, table?: Table) {
|
emitTable(eventName: EventType, appId: string, table?: Table) {
|
||||||
tableEmission({ emitter: this, eventName, appId, table })
|
tableEmission({ emitter: this, eventName, appId, table })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { Table, Row, User } from "@budibase/types"
|
import { Table, Row, UserBindings } from "@budibase/types"
|
||||||
import BudibaseEmitter from "./BudibaseEmitter"
|
import BudibaseEmitter from "./BudibaseEmitter"
|
||||||
|
|
||||||
type BBEventOpts = {
|
type BBEventOpts = {
|
||||||
|
@ -9,7 +9,7 @@ type BBEventOpts = {
|
||||||
row?: Row
|
row?: Row
|
||||||
oldRow?: Row
|
oldRow?: Row
|
||||||
metadata?: any
|
metadata?: any
|
||||||
user?: User
|
user?: UserBindings
|
||||||
}
|
}
|
||||||
|
|
||||||
interface BBEventTable extends Table {
|
interface BBEventTable extends Table {
|
||||||
|
@ -25,7 +25,7 @@ type BBEvent = {
|
||||||
id?: string
|
id?: string
|
||||||
revision?: string
|
revision?: string
|
||||||
metadata?: any
|
metadata?: any
|
||||||
user?: User
|
user?: UserBindings
|
||||||
}
|
}
|
||||||
|
|
||||||
export function rowEmission({
|
export function rowEmission({
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
export const enum EventType {
|
||||||
|
ROW_SAVE = "row:save",
|
||||||
|
ROW_UPDATE = "row:update",
|
||||||
|
ROW_DELETE = "row:delete",
|
||||||
|
TABLE_SAVE = "table:save",
|
||||||
|
TABLE_UPDATED = "table:updated",
|
||||||
|
TABLE_DELETE = "table:delete",
|
||||||
|
}
|
|
@ -1 +1,2 @@
|
||||||
export * from "./installation"
|
export * from "./installation"
|
||||||
|
export * from "./events"
|
||||||
|
|
|
@ -7,10 +7,11 @@ import {
|
||||||
ConfigType,
|
ConfigType,
|
||||||
Row,
|
Row,
|
||||||
Table,
|
Table,
|
||||||
AutomationEventType,
|
UserBindings,
|
||||||
} from "../documents"
|
} from "../documents"
|
||||||
import { FeatureFlag, License } from "../sdk"
|
import { FeatureFlag, License } from "../sdk"
|
||||||
import { Files } from "formidable"
|
import { Files } from "formidable"
|
||||||
|
import { EventType } from "../core"
|
||||||
|
|
||||||
export interface ContextUser extends Omit<User, "roles"> {
|
export interface ContextUser extends Omit<User, "roles"> {
|
||||||
globalId?: string
|
globalId?: string
|
||||||
|
@ -61,10 +62,25 @@ export interface BBContext extends Ctx {
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ContextEmitter {
|
export interface ContextEmitter {
|
||||||
emitRow: (params: {
|
emitRow(values: {
|
||||||
eventName: AutomationEventType
|
eventName: EventType.ROW_SAVE
|
||||||
appId: string
|
appId: string
|
||||||
row: Row
|
row: Row
|
||||||
table?: Table
|
table: Table
|
||||||
}) => Promise<void>
|
user: UserBindings
|
||||||
|
}): void
|
||||||
|
emitRow(values: {
|
||||||
|
eventName: EventType.ROW_UPDATE
|
||||||
|
appId: string
|
||||||
|
row: Row
|
||||||
|
table: Table
|
||||||
|
oldRow: Row
|
||||||
|
user: UserBindings
|
||||||
|
}): void
|
||||||
|
emitRow(values: {
|
||||||
|
eventName: EventType.ROW_DELETE
|
||||||
|
appId: string
|
||||||
|
row: Row
|
||||||
|
user: UserBindings
|
||||||
|
}): void
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue