@peers-app/peers-ui 0.13.5 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/left-bar.js +0 -9
- package/dist/components/router.js +0 -44
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/mention-configs.d.ts +0 -2
- package/dist/mention-configs.js +1 -38
- package/dist/screens/groups/group-details.js +1 -0
- package/dist/screens/search/global-search.js +2 -4
- package/dist/screens/workflows/workflow-details.js +5 -56
- package/dist/system-apps/index.d.ts +0 -4
- package/dist/system-apps/index.js +1 -18
- package/dist/tabs-layout/tabs-layout.js +12 -2
- package/dist/ui-defaults/index.d.ts +0 -1
- package/dist/ui-defaults/index.js +0 -1
- package/dist/ui-defaults/list-screen.js +0 -1
- package/docs/tabs-ui.md +6 -21
- package/package.json +3 -3
- package/src/components/left-bar.tsx +0 -12
- package/src/components/router.tsx +0 -48
- package/src/index.tsx +2 -2
- package/src/mention-configs.ts +1 -40
- package/src/screens/groups/group-details.tsx +2 -1
- package/src/screens/search/global-search.tsx +2 -6
- package/src/screens/workflows/workflow-details.tsx +3 -28
- package/src/system-apps/index.ts +0 -14
- package/src/tabs-layout/tabs-layout.tsx +17 -3
- package/src/ui-defaults/index.ts +0 -1
- package/src/ui-defaults/list-screen.tsx +0 -1
- package/dist/screens/events/cron.d.ts +0 -3
- package/dist/screens/events/cron.js +0 -77
- package/dist/screens/events/event-details.d.ts +0 -6
- package/dist/screens/events/event-details.js +0 -112
- package/dist/screens/events/event-handlers.d.ts +0 -7
- package/dist/screens/events/event-handlers.js +0 -84
- package/dist/screens/events/event-info.d.ts +0 -5
- package/dist/screens/events/event-info.js +0 -19
- package/dist/screens/events/event-list.d.ts +0 -2
- package/dist/screens/events/event-list.js +0 -107
- package/dist/screens/events/event-schedule.d.ts +0 -5
- package/dist/screens/events/event-schedule.js +0 -124
- package/dist/screens/knowledge/knowledge-frame-details.bk.d.ts +0 -6
- package/dist/screens/knowledge/knowledge-frame-details.bk.js +0 -84
- package/dist/screens/knowledge/knowledge-frame-details.d.ts +0 -8
- package/dist/screens/knowledge/knowledge-frame-details.js +0 -143
- package/dist/screens/knowledge/knowledge-frame-list.d.ts +0 -2
- package/dist/screens/knowledge/knowledge-frame-list.js +0 -45
- package/dist/screens/knowledge/knowledge-value-details.d.ts +0 -6
- package/dist/screens/knowledge/knowledge-value-details.js +0 -150
- package/dist/screens/knowledge/knowledge-value-list-item.d.ts +0 -5
- package/dist/screens/knowledge/knowledge-value-list-item.js +0 -39
- package/dist/screens/knowledge/knowledge-value-list.d.ts +0 -3
- package/dist/screens/knowledge/knowledge-value-list.js +0 -123
- package/dist/screens/predicates/predicate-details.d.ts +0 -6
- package/dist/screens/predicates/predicate-details.js +0 -103
- package/dist/screens/predicates/predicate-list.d.ts +0 -2
- package/dist/screens/predicates/predicate-list.js +0 -46
- package/dist/screens/workflows/workflow-subscriptions.d.ts +0 -6
- package/dist/screens/workflows/workflow-subscriptions.js +0 -81
- package/dist/system-apps/events.app.d.ts +0 -2
- package/dist/system-apps/events.app.js +0 -8
- package/dist/system-apps/knowledge-frames.app.d.ts +0 -2
- package/dist/system-apps/knowledge-frames.app.js +0 -9
- package/dist/system-apps/knowledge-values.app.d.ts +0 -2
- package/dist/system-apps/knowledge-values.app.js +0 -9
- package/dist/system-apps/predicates.app.d.ts +0 -2
- package/dist/system-apps/predicates.app.js +0 -8
- package/dist/ui-defaults/notes-editor.d.ts +0 -7
- package/dist/ui-defaults/notes-editor.js +0 -41
- package/src/screens/events/cron.ts +0 -74
- package/src/screens/events/event-details.tsx +0 -117
- package/src/screens/events/event-handlers.tsx +0 -61
- package/src/screens/events/event-info.tsx +0 -29
- package/src/screens/events/event-list.tsx +0 -104
- package/src/screens/events/event-schedule.tsx +0 -130
- package/src/screens/knowledge/knowledge-frame-details.bk.tsx +0 -160
- package/src/screens/knowledge/knowledge-frame-details.tsx +0 -176
- package/src/screens/knowledge/knowledge-frame-list.tsx +0 -49
- package/src/screens/knowledge/knowledge-value-details.tsx +0 -181
- package/src/screens/knowledge/knowledge-value-list-item.tsx +0 -48
- package/src/screens/knowledge/knowledge-value-list.tsx +0 -131
- package/src/screens/predicates/predicate-details.tsx +0 -125
- package/src/screens/predicates/predicate-list.tsx +0 -50
- package/src/screens/workflows/workflow-subscriptions.tsx +0 -58
- package/src/system-apps/events.app.ts +0 -7
- package/src/system-apps/knowledge-frames.app.ts +0 -8
- package/src/system-apps/knowledge-values.app.ts +0 -8
- package/src/system-apps/predicates.app.ts +0 -7
- package/src/ui-defaults/notes-editor.tsx +0 -51
|
@@ -10,22 +10,14 @@ import { ToolTestDetails } from "../screens/tools/tool-test-details";
|
|
|
10
10
|
import { WorkflowDetails } from "../screens/workflows/workflow-details";
|
|
11
11
|
import { WorkflowList } from "../screens/workflows/workflow-list";
|
|
12
12
|
import { ChannelMessages } from "./messages/channel-view";
|
|
13
|
-
import { PeerEventList } from "../screens/events/event-list";
|
|
14
|
-
import { PeerEventDetails } from "../screens/events/event-details";
|
|
15
13
|
import { SettingsPage } from "../screens/settings/settings-page";
|
|
16
14
|
import { PackageDetails } from "../screens/packages/package-details";
|
|
17
15
|
import { PackageList } from "../screens/packages/package-list";
|
|
18
16
|
import { PackageNewLocal } from "../screens/packages/package-new-local";
|
|
19
17
|
import { VariableList } from "../screens/variables/variable-list";
|
|
20
18
|
import { VariableDetails } from "../screens/variables/variable-details";
|
|
21
|
-
import { KnowledgeFrameList } from "../screens/knowledge/knowledge-frame-list";
|
|
22
|
-
import { KnowledgeFrameDetails } from "../screens/knowledge/knowledge-frame-details";
|
|
23
19
|
import { PeerTypeLists } from "../screens/peer-types/peer-type-list";
|
|
24
20
|
import { PeerTypeDetails } from "../screens/peer-types/peer-type-details";
|
|
25
|
-
import { PredicateList } from "../screens/predicates/predicate-list";
|
|
26
|
-
import { PredicateDetails } from "../screens/predicates/predicate-details";
|
|
27
|
-
import { KnowledgeValueList } from "../screens/knowledge/knowledge-value-list";
|
|
28
|
-
import { KnowledgeValueDetails } from "../screens/knowledge/knowledge-value-details";
|
|
29
21
|
import { UIRouter } from "../ui-router/ui-loader";
|
|
30
22
|
import { useObservable } from "../hooks";
|
|
31
23
|
import { ThreadMessageList } from "./messages/thread-message-list";
|
|
@@ -126,16 +118,6 @@ export function Router({ path: providedPath }: { path?: string } = {}) {
|
|
|
126
118
|
return <ToolDetails toolId={toolId} />;
|
|
127
119
|
}
|
|
128
120
|
|
|
129
|
-
if (path === 'events') {
|
|
130
|
-
return <PeerEventList />;
|
|
131
|
-
}
|
|
132
|
-
if (path.match(/^events\//)) {
|
|
133
|
-
const parts = path.split('/');
|
|
134
|
-
parts.shift();
|
|
135
|
-
const id = parts[0];
|
|
136
|
-
return <PeerEventDetails peerEventTypeId={id} />;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
121
|
if (path === 'packages') {
|
|
140
122
|
return <PackageList />;
|
|
141
123
|
}
|
|
@@ -159,26 +141,6 @@ export function Router({ path: providedPath }: { path?: string } = {}) {
|
|
|
159
141
|
return <VariableDetails persistentVarId={id} />;
|
|
160
142
|
}
|
|
161
143
|
|
|
162
|
-
if (path === 'knowledge-values') {
|
|
163
|
-
return <KnowledgeValueList />;
|
|
164
|
-
}
|
|
165
|
-
if (path.match(/^knowledge-values\/([a-zA-Z0-9]{25})/)) {
|
|
166
|
-
const parts = path.split('/');
|
|
167
|
-
parts.shift();
|
|
168
|
-
const id = parts[0];
|
|
169
|
-
return <KnowledgeValueDetails knowledgeValueId={id} />;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
if (path === 'knowledge-frames') {
|
|
173
|
-
return <KnowledgeFrameList />;
|
|
174
|
-
}
|
|
175
|
-
if (path.match(/^knowledge-frames\//)) {
|
|
176
|
-
const parts = path.split('/');
|
|
177
|
-
parts.shift();
|
|
178
|
-
const id = parts[0];
|
|
179
|
-
return <KnowledgeFrameDetails knowledgeFrameId={id} />;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
144
|
if (path === 'peer-types') {
|
|
183
145
|
return <PeerTypeLists />;
|
|
184
146
|
}
|
|
@@ -189,16 +151,6 @@ export function Router({ path: providedPath }: { path?: string } = {}) {
|
|
|
189
151
|
return <PeerTypeDetails peerTypeId={id} />;
|
|
190
152
|
}
|
|
191
153
|
|
|
192
|
-
if (path === 'predicates') {
|
|
193
|
-
return <PredicateList />;
|
|
194
|
-
}
|
|
195
|
-
if (path.match(/^predicates\//)) {
|
|
196
|
-
const parts = path.split('/');
|
|
197
|
-
parts.shift();
|
|
198
|
-
const id = parts[0];
|
|
199
|
-
return <PredicateDetails predicateId={id} />;
|
|
200
|
-
}
|
|
201
|
-
|
|
202
154
|
if (path.match(/^threads\//)) {
|
|
203
155
|
const parts = path.split('/');
|
|
204
156
|
parts.shift();
|
package/src/index.tsx
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
export * from "./hooks";
|
|
2
|
-
export * from "./screens/events/cron";
|
|
3
2
|
|
|
4
3
|
export * from "./tabs-layout/tabs-layout";
|
|
5
4
|
export { activeTabId, activeTabs, TabState, updateActiveTabTitle, closeCurrentTab, goToTabPath } from "./tabs-layout/tabs-state";
|
|
@@ -10,4 +9,5 @@ export * from "./components/sortable-list";
|
|
|
10
9
|
export * from "./components/tabs";
|
|
11
10
|
export * from "./components/inverse-lazy-list";
|
|
12
11
|
export * from "./components/markdown-editor/editor-inline";
|
|
13
|
-
export * from "./components/markdown-editor/editor";
|
|
12
|
+
export * from "./components/markdown-editor/editor";
|
|
13
|
+
export * from "./components/markdown-with-mentions";
|
package/src/mention-configs.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Assistants, IMentionData,
|
|
1
|
+
import { Assistants, IMentionData, PeerTypes, rpcClientCalls, Tools, Users, Workflows } from "@peers-app/peers-sdk";
|
|
2
2
|
// import { MENTIONS_MAX_RESULTS } from "../client/components/markdown-editor/mentions-plugin";
|
|
3
3
|
|
|
4
4
|
const MENTIONS_MAX_RESULTS = 10;
|
|
@@ -89,43 +89,6 @@ export const workflowMentionConfig: IMentionConfig = {
|
|
|
89
89
|
}),
|
|
90
90
|
};
|
|
91
91
|
|
|
92
|
-
export const peerEventTypeMentionConfig: IMentionConfig = {
|
|
93
|
-
kind: 'event',
|
|
94
|
-
iconClass: 'bi bi-lightning-charge-fill',
|
|
95
|
-
styleClass: 'mention-event',
|
|
96
|
-
query: async (search: string) => {
|
|
97
|
-
return PeerEventTypes().list({ name: { $matchWords: search } }, { pageSize: MENTIONS_MAX_RESULTS })
|
|
98
|
-
.then((events) => events.map((event) => ({
|
|
99
|
-
kind: 'event' as const,
|
|
100
|
-
id: event.peerEventTypeId,
|
|
101
|
-
name: event.name,
|
|
102
|
-
})));
|
|
103
|
-
},
|
|
104
|
-
getById: id => PeerEventTypes().get(id).then(item => item && {
|
|
105
|
-
kind: 'event',
|
|
106
|
-
id: item.peerEventTypeId,
|
|
107
|
-
name: item.name
|
|
108
|
-
}),
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
export const predicateMentionConfig: IMentionConfig = {
|
|
112
|
-
kind: 'predicate',
|
|
113
|
-
iconClass: 'bi bi-node-plus-fill',
|
|
114
|
-
query: async (search: string) => {
|
|
115
|
-
const results = await Predicates().list({ name: { $matchWords: search } }, { pageSize: MENTIONS_MAX_RESULTS });
|
|
116
|
-
return results.map(p => ({
|
|
117
|
-
kind: 'predicate',
|
|
118
|
-
id: p.predicateId,
|
|
119
|
-
name: p.name
|
|
120
|
-
}));
|
|
121
|
-
},
|
|
122
|
-
getById: id => Predicates().get(id).then(item => item && {
|
|
123
|
-
kind: 'predicate',
|
|
124
|
-
id: item.predicateId,
|
|
125
|
-
name: item.name
|
|
126
|
-
}),
|
|
127
|
-
};
|
|
128
|
-
|
|
129
92
|
export const valueTypeMentionConfig: IMentionConfig = {
|
|
130
93
|
kind: 'type',
|
|
131
94
|
iconClass: 'bi bi-code-square',
|
|
@@ -160,7 +123,5 @@ export const mentionConfigs = [
|
|
|
160
123
|
userMentionConfig,
|
|
161
124
|
assistantMentionConfig,
|
|
162
125
|
workflowMentionConfig,
|
|
163
|
-
peerEventTypeMentionConfig,
|
|
164
|
-
predicateMentionConfig,
|
|
165
126
|
valueTypeMentionConfig,
|
|
166
127
|
];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getIconClassName, getUserContext, Groups, IDoc, IGroup, Observable, generateGroupShare, checkQRCodeCompatibility, copyToClipboard, sleep } from "@peers-app/peers-sdk";
|
|
1
|
+
import { getIconClassName, getUserContext, Groups, IDoc, IGroup, Observable, generateGroupShare, checkQRCodeCompatibility, copyToClipboard, rpcServerCalls, sleep } from "@peers-app/peers-sdk";
|
|
2
2
|
import React, { useState } from "react";
|
|
3
3
|
import { Checkbox } from "../../components/checkbox";
|
|
4
4
|
import { Input } from "../../components/input";
|
|
@@ -40,6 +40,7 @@ export const GroupDetails = (props: IProps) => {
|
|
|
40
40
|
const deleteResult = await originalDelete();
|
|
41
41
|
userContext.defaultDataContext(userContext.userDataContext);
|
|
42
42
|
await sleep(100);
|
|
43
|
+
await rpcServerCalls.flushDatabases();
|
|
43
44
|
window.location.reload();
|
|
44
45
|
return deleteResult;
|
|
45
46
|
}
|
|
@@ -7,8 +7,6 @@ import {
|
|
|
7
7
|
userMentionConfig,
|
|
8
8
|
assistantMentionConfig,
|
|
9
9
|
workflowMentionConfig,
|
|
10
|
-
peerEventTypeMentionConfig,
|
|
11
|
-
predicateMentionConfig,
|
|
12
10
|
valueTypeMentionConfig,
|
|
13
11
|
IMentionConfig
|
|
14
12
|
} from '../../mention-configs';
|
|
@@ -55,8 +53,6 @@ export function GlobalSearch() {
|
|
|
55
53
|
{ config: toolMentionConfig, category: 'Tools', navigationPath: 'tools' },
|
|
56
54
|
{ config: assistantMentionConfig, category: 'Assistants', navigationPath: 'assistants' },
|
|
57
55
|
{ config: workflowMentionConfig, category: 'Workflows', navigationPath: 'workflows' },
|
|
58
|
-
{ config: peerEventTypeMentionConfig, category: 'Events', navigationPath: 'events' },
|
|
59
|
-
{ config: predicateMentionConfig, category: 'Predicates', navigationPath: 'predicates' },
|
|
60
56
|
{ config: valueTypeMentionConfig, category: 'Types', navigationPath: 'peer-types' },
|
|
61
57
|
{ config: userMentionConfig, category: 'Users', navigationPath: 'profile' },
|
|
62
58
|
];
|
|
@@ -191,7 +187,7 @@ export function GlobalSearch() {
|
|
|
191
187
|
ref={inputRef}
|
|
192
188
|
type="text"
|
|
193
189
|
className={`form-control form-control-lg ${isDark ? 'bg-dark text-light border-secondary' : ''}`}
|
|
194
|
-
placeholder="Search across apps, tools, assistants, workflows,
|
|
190
|
+
placeholder="Search across apps, tools, assistants, workflows, and more..."
|
|
195
191
|
value={searchQuery}
|
|
196
192
|
onChange={(e) => setSearchQuery(e.target.value)}
|
|
197
193
|
style={{
|
|
@@ -372,7 +368,7 @@ export function GlobalSearch() {
|
|
|
372
368
|
<i className="bi-search mb-3 d-block text-muted" style={{ fontSize: '64px' }} />
|
|
373
369
|
<h3 className="text-muted mb-3">Search across everything</h3>
|
|
374
370
|
<p className="text-muted mb-4" style={{ maxWidth: '400px', margin: '0 auto' }}>
|
|
375
|
-
Find apps, tools, assistants, workflows,
|
|
371
|
+
Find apps, tools, assistants, workflows, types, and users all in one place.
|
|
376
372
|
</p>
|
|
377
373
|
<div className="d-flex flex-wrap justify-content-center gap-2">
|
|
378
374
|
{searchConfigs.map(({ config, category }) => (
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { defaultAssistantId, getAllAssistantIdsMentioned,
|
|
2
|
-
import React
|
|
1
|
+
import { defaultAssistantId, getAllAssistantIdsMentioned, IWorkflow, runWorkflow, Workflows } from "@peers-app/peers-sdk";
|
|
2
|
+
import React from "react";
|
|
3
3
|
import { Input } from "../../components/input";
|
|
4
4
|
import { LoadingIndicator } from "../../components/loading-indicator";
|
|
5
5
|
import { SaveButton } from "../../components/save-button";
|
|
@@ -9,7 +9,6 @@ import { usePromise } from "../../hooks";
|
|
|
9
9
|
import { updateActiveTabTitle } from "../../tabs-layout/tabs-state";
|
|
10
10
|
import { WorkflowInfo } from "./workflow-info";
|
|
11
11
|
import { WorkflowInstructions } from "./workflow-instructions";
|
|
12
|
-
import { WorkflowEventSubscriptions } from "./workflow-subscriptions";
|
|
13
12
|
|
|
14
13
|
interface IProps {
|
|
15
14
|
workflowId: string;
|
|
@@ -26,18 +25,7 @@ export const WorkflowDetails = (props: IProps) => {
|
|
|
26
25
|
return Workflows().initDoc(workflow);
|
|
27
26
|
}, undefined, [props.workflowId]);
|
|
28
27
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const handlersLoaded = usePromise(async () => {
|
|
32
|
-
if (!workflow) return false;
|
|
33
|
-
const _handlers = await PeerEventHandlers().list({ handlerWorkflowId: workflow.workflowId });
|
|
34
|
-
handlers(_handlers);
|
|
35
|
-
return true;
|
|
36
|
-
}, false, [workflow]);
|
|
37
|
-
|
|
38
|
-
const allLoaded = !!(workflow && handlersLoaded);
|
|
39
|
-
|
|
40
|
-
if (!allLoaded) {
|
|
28
|
+
if (!workflow) {
|
|
41
29
|
return <LoadingIndicator />;
|
|
42
30
|
}
|
|
43
31
|
|
|
@@ -47,13 +35,6 @@ export const WorkflowDetails = (props: IProps) => {
|
|
|
47
35
|
const assistantsMentioned = await getAllAssistantIdsMentioned(workflow.instructions[0].markdown ?? '');
|
|
48
36
|
workflow.defaultAssistantId = assistantsMentioned[0] || defaultAssistantId;
|
|
49
37
|
workflow.save();
|
|
50
|
-
const oldHandlers = await PeerEventHandlers().list({ handlerWorkflowId: workflow.workflowId });
|
|
51
|
-
for (const oldHandler of oldHandlers) {
|
|
52
|
-
await PeerEventHandlers().delete(oldHandler.peerEventHandlerId);
|
|
53
|
-
}
|
|
54
|
-
for (const handler of handlers()) {
|
|
55
|
-
PeerEventHandlers().save(handler, { restoreIfDeleted: true });
|
|
56
|
-
}
|
|
57
38
|
}
|
|
58
39
|
|
|
59
40
|
return (
|
|
@@ -107,12 +88,6 @@ export const WorkflowDetails = (props: IProps) => {
|
|
|
107
88
|
<WorkflowInstructions workflow={workflow} />
|
|
108
89
|
</ScreenTabBody>
|
|
109
90
|
},
|
|
110
|
-
{
|
|
111
|
-
name: 'Subscriptions', content:
|
|
112
|
-
<ScreenTabBody>
|
|
113
|
-
<WorkflowEventSubscriptions workflow={workflow} eventSubscriptions={handlers} />
|
|
114
|
-
</ScreenTabBody>
|
|
115
|
-
},
|
|
116
91
|
]}
|
|
117
92
|
/>
|
|
118
93
|
</div>
|
package/src/system-apps/index.ts
CHANGED
|
@@ -5,14 +5,10 @@ export { searchApp } from './search.app';
|
|
|
5
5
|
export { assistantsApp } from './assistants.app';
|
|
6
6
|
export { toolsApp } from './tools.app';
|
|
7
7
|
export { workflowsApp } from './workflows.app';
|
|
8
|
-
export { eventsApp } from './events.app';
|
|
9
8
|
export { variablesApp } from './variables.app';
|
|
10
9
|
export { typesApp } from './types.app';
|
|
11
10
|
export { packagesApp } from './packages.app';
|
|
12
11
|
export { threadsApp } from './threads.app';
|
|
13
|
-
export { knowledgeValuesApp } from './knowledge-values.app';
|
|
14
|
-
export { knowledgeFramesApp } from './knowledge-frames.app';
|
|
15
|
-
export { predicatesApp } from './predicates.app';
|
|
16
12
|
export { settingsApp } from './settings.app';
|
|
17
13
|
export { groupsApp } from './groups.app';
|
|
18
14
|
export { joinGroupApp } from './join-group.app';
|
|
@@ -27,14 +23,10 @@ import { searchApp } from './search.app';
|
|
|
27
23
|
import { assistantsApp } from './assistants.app';
|
|
28
24
|
import { toolsApp } from './tools.app';
|
|
29
25
|
import { workflowsApp } from './workflows.app';
|
|
30
|
-
import { eventsApp } from './events.app';
|
|
31
26
|
import { variablesApp } from './variables.app';
|
|
32
27
|
import { typesApp } from './types.app';
|
|
33
28
|
import { packagesApp } from './packages.app';
|
|
34
29
|
import { threadsApp } from './threads.app';
|
|
35
|
-
import { knowledgeValuesApp } from './knowledge-values.app';
|
|
36
|
-
import { knowledgeFramesApp } from './knowledge-frames.app';
|
|
37
|
-
import { predicatesApp } from './predicates.app';
|
|
38
30
|
import { settingsApp } from './settings.app';
|
|
39
31
|
import { groupsApp } from './groups.app';
|
|
40
32
|
import { joinGroupApp } from './join-group.app';
|
|
@@ -55,18 +47,12 @@ export const systemApps: IAppNav[] = [
|
|
|
55
47
|
searchApp,
|
|
56
48
|
threadsApp,
|
|
57
49
|
|
|
58
|
-
// Knowledge & Data
|
|
59
|
-
knowledgeValuesApp,
|
|
60
|
-
knowledgeFramesApp,
|
|
61
|
-
predicatesApp,
|
|
62
|
-
|
|
63
50
|
// Core Management Apps
|
|
64
51
|
variablesApp,
|
|
65
52
|
typesApp,
|
|
66
53
|
assistantsApp,
|
|
67
54
|
toolsApp,
|
|
68
55
|
workflowsApp,
|
|
69
|
-
eventsApp,
|
|
70
56
|
packagesApp,
|
|
71
57
|
groupsApp,
|
|
72
58
|
joinGroupApp,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getUserContext, hasShownWelcomeModal, IAppNav, rpcServerCalls, setDefaultClientUserContext,
|
|
1
|
+
import { getUserContext, hasShownWelcomeModal, IAppNav, rpcServerCalls, setDefaultClientUserContext, Subscription } from "@peers-app/peers-sdk";
|
|
2
2
|
import React, { Component, useEffect, useState } from 'react';
|
|
3
3
|
import { openCommandPalette } from '../command-palette/command-palette';
|
|
4
4
|
import { CommandPaletteOverlay } from '../command-palette/command-palette-ui';
|
|
@@ -132,6 +132,7 @@ function TabsLayoutInternal() {
|
|
|
132
132
|
const [tabs] = useObservable(activeTabs);
|
|
133
133
|
const [activeTab] = useObservable(activeTabId);
|
|
134
134
|
const [currentlyActiveGroupId, setCurrentlyActiveGroupId] = useState('');
|
|
135
|
+
const [switchingGroup, setSwitchingGroup] = useState(false);
|
|
135
136
|
|
|
136
137
|
useEffect(() => {
|
|
137
138
|
let sub: Subscription;
|
|
@@ -139,8 +140,9 @@ function TabsLayoutInternal() {
|
|
|
139
140
|
setCurrentlyActiveGroupId(userContext.currentlyActiveGroupId() || userContext.userId)
|
|
140
141
|
sub = userContext.currentlyActiveGroupId.subscribe(async groupId => {
|
|
141
142
|
setCurrentlyActiveGroupId(userContext.currentlyActiveGroupId() || userContext.userId);
|
|
142
|
-
|
|
143
|
-
await
|
|
143
|
+
setSwitchingGroup(true);
|
|
144
|
+
await userContext.waitForActiveGroupPersistence();
|
|
145
|
+
await rpcServerCalls.flushDatabases();
|
|
144
146
|
window.location.reload();
|
|
145
147
|
});
|
|
146
148
|
});
|
|
@@ -184,6 +186,18 @@ function TabsLayoutInternal() {
|
|
|
184
186
|
<div
|
|
185
187
|
key={currentlyActiveGroupId}
|
|
186
188
|
className="d-flex flex-column" style={{ height: 'calc(100vh - 25px)', overflow: 'hidden' }}>
|
|
189
|
+
{switchingGroup && (
|
|
190
|
+
<div style={{
|
|
191
|
+
position: 'fixed', inset: 0, zIndex: 9999,
|
|
192
|
+
display: 'flex', alignItems: 'center', justifyContent: 'center',
|
|
193
|
+
backgroundColor: _colorMode === 'light' ? 'rgba(255,255,255,0.85)' : 'rgba(0,0,0,0.85)',
|
|
194
|
+
}}>
|
|
195
|
+
<div className="text-center">
|
|
196
|
+
<div className="spinner-border text-secondary mb-3" role="status" />
|
|
197
|
+
<div className={`small ${_colorMode === 'light' ? 'text-muted' : 'text-secondary'}`}>Switching group...</div>
|
|
198
|
+
</div>
|
|
199
|
+
</div>
|
|
200
|
+
)}
|
|
187
201
|
{/* Tabs Header */}
|
|
188
202
|
<div
|
|
189
203
|
className={`border-bottom ${_colorMode === 'light' ? 'bg-light' : 'bg-dark'}`}
|
package/src/ui-defaults/index.ts
CHANGED
|
@@ -15,7 +15,6 @@ export const DefaultListScreen = (props: IProps) => {
|
|
|
15
15
|
const path = mainContentPath().toLowerCase().trim().split('?')[0].split('#').pop()?.split('/')[0] || '';
|
|
16
16
|
const fuzzyTableName = ({
|
|
17
17
|
variables: 'persistent_vars',
|
|
18
|
-
"events": 'peer_event_types',
|
|
19
18
|
}[path] || path).replace(/[_-]/g, '').trim();
|
|
20
19
|
|
|
21
20
|
const allTables = getAllTables();
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.getCronErrors = getCronErrors;
|
|
7
|
-
exports.getCronExplanation = getCronExplanation;
|
|
8
|
-
exports.getNextCronDate = getNextCronDate;
|
|
9
|
-
const cron_validate_1 = __importDefault(require("cron-validate"));
|
|
10
|
-
const moment_timezone_1 = __importDefault(require("moment-timezone"));
|
|
11
|
-
const cron_parser_1 = require("cron-parser");
|
|
12
|
-
function getCronErrors(cronExpression) {
|
|
13
|
-
const validationResult = (0, cron_validate_1.default)(cronExpression);
|
|
14
|
-
if (validationResult.isError()) {
|
|
15
|
-
const errors = validationResult.getError();
|
|
16
|
-
const errorMarkdown = ['Validation errors:', ...errors].join('\n- ');
|
|
17
|
-
return errorMarkdown;
|
|
18
|
-
}
|
|
19
|
-
let parseError = '';
|
|
20
|
-
try {
|
|
21
|
-
(0, cron_parser_1.parseExpression)(cronExpression);
|
|
22
|
-
}
|
|
23
|
-
catch (e) {
|
|
24
|
-
parseError = e.message;
|
|
25
|
-
}
|
|
26
|
-
if (parseError) {
|
|
27
|
-
return 'Validation error: ' + parseError;
|
|
28
|
-
}
|
|
29
|
-
return false;
|
|
30
|
-
}
|
|
31
|
-
function getCronExplanation(cronExpression) {
|
|
32
|
-
if (!cronExpression) {
|
|
33
|
-
return '';
|
|
34
|
-
}
|
|
35
|
-
function formatDate(date) {
|
|
36
|
-
// let dtStr = moment
|
|
37
|
-
return (0, moment_timezone_1.default)(date).calendar(null, {
|
|
38
|
-
sameDay: '[Today at] LT',
|
|
39
|
-
nextDay: '[Tomorrow at] LT',
|
|
40
|
-
nextWeek: 'dddd [at] LT',
|
|
41
|
-
lastDay: '[Yesterday at] LT',
|
|
42
|
-
lastWeek: '[Last] dddd [at] LT',
|
|
43
|
-
sameElse: 'L [at] LT'
|
|
44
|
-
}) + `\n - \`${date.toISOString().replace(':00.000Z', 'Z')}\``;
|
|
45
|
-
}
|
|
46
|
-
let parsed = (0, cron_parser_1.parseExpression)(cronExpression);
|
|
47
|
-
const strDates = [];
|
|
48
|
-
let i = 1;
|
|
49
|
-
while (true) {
|
|
50
|
-
const dt = parsed.prev().toString();
|
|
51
|
-
strDates.push(`- ${formatDate(new Date(dt))}`);
|
|
52
|
-
i++;
|
|
53
|
-
if (i > 3)
|
|
54
|
-
break;
|
|
55
|
-
}
|
|
56
|
-
strDates.push('Prior three dates:');
|
|
57
|
-
strDates.reverse();
|
|
58
|
-
strDates.push('\nNext three dates:');
|
|
59
|
-
i = 1;
|
|
60
|
-
parsed = (0, cron_parser_1.parseExpression)(cronExpression);
|
|
61
|
-
while (true) {
|
|
62
|
-
const dt = parsed.next().toString();
|
|
63
|
-
strDates.push(`- ${formatDate(new Date(dt))}`);
|
|
64
|
-
i++;
|
|
65
|
-
if (i > 3)
|
|
66
|
-
break;
|
|
67
|
-
}
|
|
68
|
-
return strDates.join('\n');
|
|
69
|
-
}
|
|
70
|
-
function getNextCronDate(cronExpression) {
|
|
71
|
-
const errors = getCronErrors(cronExpression);
|
|
72
|
-
if (errors) {
|
|
73
|
-
throw new Error(errors);
|
|
74
|
-
}
|
|
75
|
-
const parsed = (0, cron_parser_1.parseExpression)(cronExpression);
|
|
76
|
-
return new Date(parsed.next().toString());
|
|
77
|
-
}
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.PeerEventDetails = void 0;
|
|
37
|
-
const peers_sdk_1 = require("@peers-app/peers-sdk");
|
|
38
|
-
const react_1 = __importStar(require("react"));
|
|
39
|
-
const input_1 = require("../../components/input");
|
|
40
|
-
const io_schema_1 = require("../../components/io-schema");
|
|
41
|
-
const loading_indicator_1 = require("../../components/loading-indicator");
|
|
42
|
-
const save_button_1 = require("../../components/save-button");
|
|
43
|
-
const tabs_1 = require("../../components/tabs");
|
|
44
|
-
const hooks_1 = require("../../hooks");
|
|
45
|
-
const tabs_state_1 = require("../../tabs-layout/tabs-state");
|
|
46
|
-
const event_handlers_1 = require("./event-handlers");
|
|
47
|
-
const event_info_1 = require("./event-info");
|
|
48
|
-
const event_schedule_1 = require("./event-schedule");
|
|
49
|
-
const PeerEventDetails = (props) => {
|
|
50
|
-
const peerEventType = (0, hooks_1.usePromise)(async () => {
|
|
51
|
-
const peerEvent = await (0, peers_sdk_1.PeerEventTypes)().get(props.peerEventTypeId);
|
|
52
|
-
if (!peerEvent) {
|
|
53
|
-
throw new Error('Workflow not found');
|
|
54
|
-
}
|
|
55
|
-
const doc = (0, peers_sdk_1.PeerEventTypes)().initDoc(peerEvent);
|
|
56
|
-
(0, tabs_state_1.updateActiveTabTitle)(doc.name || "Event");
|
|
57
|
-
return doc;
|
|
58
|
-
}, undefined, [props.peerEventTypeId]);
|
|
59
|
-
const [handlers] = (0, react_1.useState)(() => (0, peers_sdk_1.observable)([]));
|
|
60
|
-
const handlersLoaded = (0, hooks_1.usePromise)(async () => {
|
|
61
|
-
if (!peerEventType)
|
|
62
|
-
return false;
|
|
63
|
-
const _handlers = await (0, peers_sdk_1.PeerEventHandlers)().list({ peerEventTypeId: peerEventType?.peerEventTypeId });
|
|
64
|
-
handlers(_handlers);
|
|
65
|
-
return true;
|
|
66
|
-
}, false, [peerEventType]);
|
|
67
|
-
const allLoaded = !!(peerEventType && handlersLoaded);
|
|
68
|
-
if (!allLoaded) {
|
|
69
|
-
return react_1.default.createElement(loading_indicator_1.LoadingIndicator, null);
|
|
70
|
-
}
|
|
71
|
-
async function saveChanges() {
|
|
72
|
-
if (!peerEventType)
|
|
73
|
-
return;
|
|
74
|
-
await peerEventType.save();
|
|
75
|
-
const oldHandlers = await (0, peers_sdk_1.PeerEventHandlers)().list({ peerEventTypeId: peerEventType.peerEventTypeId });
|
|
76
|
-
for (const oldHandler of oldHandlers) {
|
|
77
|
-
await (0, peers_sdk_1.PeerEventHandlers)().delete(oldHandler.peerEventHandlerId);
|
|
78
|
-
}
|
|
79
|
-
for (const handler of handlers()) {
|
|
80
|
-
(0, peers_sdk_1.PeerEventHandlers)().save(handler, { restoreIfDeleted: true });
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return (react_1.default.createElement("div", { className: "container-fluid p-3" },
|
|
84
|
-
react_1.default.createElement("div", { className: "d-flex" },
|
|
85
|
-
react_1.default.createElement("div", null,
|
|
86
|
-
react_1.default.createElement("h4", null,
|
|
87
|
-
react_1.default.createElement("i", { className: "bi bi-lightning-charge-fill me-2" }))),
|
|
88
|
-
react_1.default.createElement("div", { className: "flex-grow-1" },
|
|
89
|
-
react_1.default.createElement("h4", null,
|
|
90
|
-
react_1.default.createElement(input_1.Input, { key: peerEventType.peerEventTypeId, className: 'border border-0', style: { width: '100%', outline: 'none', backgroundColor: 'transparent' }, value: peerEventType.qs.name }))),
|
|
91
|
-
react_1.default.createElement("div", null,
|
|
92
|
-
react_1.default.createElement(save_button_1.SaveButton, { key: peerEventType.peerEventTypeId, onClick: saveChanges, doc: peerEventType }))),
|
|
93
|
-
react_1.default.createElement(tabs_1.Tabs, { key: peerEventType.peerEventTypeId, tabs: [
|
|
94
|
-
{
|
|
95
|
-
name: 'Info', content: react_1.default.createElement(tabs_1.ScreenTabBody, null,
|
|
96
|
-
react_1.default.createElement(event_info_1.PeerEventInfo, { peerEventType: peerEventType }))
|
|
97
|
-
},
|
|
98
|
-
{
|
|
99
|
-
name: 'Schema', content: react_1.default.createElement(tabs_1.ScreenTabBody, null,
|
|
100
|
-
react_1.default.createElement(io_schema_1.IOSchemaEditor, { ioSchema: peerEventType.qs.schema, simpleValueName: "Event" }))
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
name: 'Triggers', content: react_1.default.createElement(tabs_1.ScreenTabBody, null,
|
|
104
|
-
react_1.default.createElement(event_schedule_1.PeerEventSchedule, { peerEventType: peerEventType }))
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
name: 'Handlers', content: react_1.default.createElement(tabs_1.ScreenTabBody, null,
|
|
108
|
-
react_1.default.createElement(event_handlers_1.PeerEventHandlersUI, { peerEventType: peerEventType, handlers: handlers }))
|
|
109
|
-
},
|
|
110
|
-
] })));
|
|
111
|
-
};
|
|
112
|
-
exports.PeerEventDetails = PeerEventDetails;
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { Observable } from "@peers-app/peers-sdk";
|
|
2
|
-
import React from "react";
|
|
3
|
-
import { IDoc, IPeerEventHandler, IPeerEventType } from "@peers-app/peers-sdk";
|
|
4
|
-
export declare const PeerEventHandlersUI: (props: {
|
|
5
|
-
peerEventType: IDoc<IPeerEventType>;
|
|
6
|
-
handlers: Observable<IPeerEventHandler[]>;
|
|
7
|
-
}) => React.JSX.Element;
|