-
Notifications
You must be signed in to change notification settings - Fork 5
/
index.ts
74 lines (65 loc) · 2.77 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/*
* Silex website builder, free/libre no-code tool for makers.
* Copyright (c) 2023 lexoyo and Silex Labs foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import GraphQL, { GraphQLOptions } from './datasources/GraphQL'
import { DataSourceManager } from './model/DataSourceManager'
import { DATA_SOURCE_ERROR, DataSourceEditor, DataSourceEditorOptions, IDataSource, IDataSourceOptions } from './types'
import { createDataSource, NOTIFICATION_GROUP } from './utils'
import view from './view'
/**
* Export the public API
*/
export * from './model/state'
export * from './model/DataTree'
export * from './model/DataSourceManager'
export * from './model/token'
export * from './model/completion'
export * from './types'
export * from './utils'
export * from './view/state-editor'
/**
* GrapeJs plugin entry point
*/
export default (editor: DataSourceEditor, opts: Partial<DataSourceEditorOptions> = {}) => {
const options: DataSourceEditorOptions = {
dataSources: [],
filters: [],
...opts,
view: {
el: '.gjs-pn-panel.gjs-pn-views-container',
...opts?.view,
},
}
// Create the data sources from config
const dataSources = options.dataSources
.map((ds: IDataSourceOptions) => createDataSource(ds))
// Connect the data sources (async)
Promise.all(dataSources.map(ds => ds.connect()))
// .then(() => console.info('Data sources connected'))
.catch(err => console.error('Error while connecting data sources', err))
// Register the data source manager
editor.DataSourceManager = new DataSourceManager(dataSources, editor, options)
// Register the UI for component properties
view(editor, options.view)
// Use grapesjs-notifications plugin for errors
editor.on(DATA_SOURCE_ERROR, (msg: string, ds: IDataSource) => editor.runCommand('notifications:add', { type: 'error', message: `Data source \`${ds.id}\` error: ${msg}`, group: NOTIFICATION_GROUP }))
//editor.on(DATA_SOURCE_READY, (ds: IDataSource) => editor.runCommand('notifications:add', { type: 'success', message: `Data source ready: ${ds.id}`, group: NOTIFICATION_GROUP }))
}
/**
* Version of the plugin
* This is replaced by the build script
*/
export const version = '__VERSION__'