71 lines
1.4 KiB
TypeScript
71 lines
1.4 KiB
TypeScript
|
|
export enum FieldType {
|
|
text = 'text',
|
|
textarea = 'textarea',
|
|
html = 'html',
|
|
email = 'email',
|
|
number = 'number',
|
|
integer = 'integer',
|
|
date = 'date',
|
|
select = 'select',
|
|
bool = 'bool',
|
|
}
|
|
|
|
enum ResourceAction {
|
|
create = 'create',
|
|
read = 'read',
|
|
readOne = 'readOne',
|
|
update = 'update',
|
|
delete = 'delete',
|
|
}
|
|
|
|
export enum Renderer {
|
|
text = 'text',
|
|
html = 'html',
|
|
bool = 'bool',
|
|
date = 'date',
|
|
time = 'time',
|
|
datetime = 'datetime',
|
|
}
|
|
|
|
const allResourceActions = [
|
|
ResourceAction.create, ResourceAction.read, ResourceAction.readOne,
|
|
ResourceAction.update, ResourceAction.delete,
|
|
]
|
|
|
|
export type FieldBase = {
|
|
key: string,
|
|
display: string,
|
|
type: FieldType,
|
|
required: boolean,
|
|
sort?: 'asc' | 'desc',
|
|
renderer?: Renderer,
|
|
readonly?: boolean,
|
|
helpText?: string,
|
|
placeholder?: string,
|
|
hideOn?: {
|
|
form?: boolean,
|
|
listing?: boolean,
|
|
},
|
|
}
|
|
|
|
export type SelectOptions = {display: string, value: any}[]
|
|
|
|
export type FieldDefinition = FieldBase
|
|
| FieldBase & { type: FieldType.select, options: SelectOptions }
|
|
|
|
export interface ResourceConfiguration {
|
|
key: string,
|
|
collection: string,
|
|
primaryKey: string,
|
|
display: {
|
|
field?: string,
|
|
singular: string,
|
|
plural: string,
|
|
},
|
|
supportedActions: ResourceAction[],
|
|
fields: FieldDefinition[],
|
|
}
|
|
|
|
export { ResourceAction, allResourceActions }
|