@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.
Files changed (88) hide show
  1. package/dist/components/left-bar.js +0 -9
  2. package/dist/components/router.js +0 -44
  3. package/dist/index.d.ts +1 -1
  4. package/dist/index.js +1 -1
  5. package/dist/mention-configs.d.ts +0 -2
  6. package/dist/mention-configs.js +1 -38
  7. package/dist/screens/groups/group-details.js +1 -0
  8. package/dist/screens/search/global-search.js +2 -4
  9. package/dist/screens/workflows/workflow-details.js +5 -56
  10. package/dist/system-apps/index.d.ts +0 -4
  11. package/dist/system-apps/index.js +1 -18
  12. package/dist/tabs-layout/tabs-layout.js +12 -2
  13. package/dist/ui-defaults/index.d.ts +0 -1
  14. package/dist/ui-defaults/index.js +0 -1
  15. package/dist/ui-defaults/list-screen.js +0 -1
  16. package/docs/tabs-ui.md +6 -21
  17. package/package.json +3 -3
  18. package/src/components/left-bar.tsx +0 -12
  19. package/src/components/router.tsx +0 -48
  20. package/src/index.tsx +2 -2
  21. package/src/mention-configs.ts +1 -40
  22. package/src/screens/groups/group-details.tsx +2 -1
  23. package/src/screens/search/global-search.tsx +2 -6
  24. package/src/screens/workflows/workflow-details.tsx +3 -28
  25. package/src/system-apps/index.ts +0 -14
  26. package/src/tabs-layout/tabs-layout.tsx +17 -3
  27. package/src/ui-defaults/index.ts +0 -1
  28. package/src/ui-defaults/list-screen.tsx +0 -1
  29. package/dist/screens/events/cron.d.ts +0 -3
  30. package/dist/screens/events/cron.js +0 -77
  31. package/dist/screens/events/event-details.d.ts +0 -6
  32. package/dist/screens/events/event-details.js +0 -112
  33. package/dist/screens/events/event-handlers.d.ts +0 -7
  34. package/dist/screens/events/event-handlers.js +0 -84
  35. package/dist/screens/events/event-info.d.ts +0 -5
  36. package/dist/screens/events/event-info.js +0 -19
  37. package/dist/screens/events/event-list.d.ts +0 -2
  38. package/dist/screens/events/event-list.js +0 -107
  39. package/dist/screens/events/event-schedule.d.ts +0 -5
  40. package/dist/screens/events/event-schedule.js +0 -124
  41. package/dist/screens/knowledge/knowledge-frame-details.bk.d.ts +0 -6
  42. package/dist/screens/knowledge/knowledge-frame-details.bk.js +0 -84
  43. package/dist/screens/knowledge/knowledge-frame-details.d.ts +0 -8
  44. package/dist/screens/knowledge/knowledge-frame-details.js +0 -143
  45. package/dist/screens/knowledge/knowledge-frame-list.d.ts +0 -2
  46. package/dist/screens/knowledge/knowledge-frame-list.js +0 -45
  47. package/dist/screens/knowledge/knowledge-value-details.d.ts +0 -6
  48. package/dist/screens/knowledge/knowledge-value-details.js +0 -150
  49. package/dist/screens/knowledge/knowledge-value-list-item.d.ts +0 -5
  50. package/dist/screens/knowledge/knowledge-value-list-item.js +0 -39
  51. package/dist/screens/knowledge/knowledge-value-list.d.ts +0 -3
  52. package/dist/screens/knowledge/knowledge-value-list.js +0 -123
  53. package/dist/screens/predicates/predicate-details.d.ts +0 -6
  54. package/dist/screens/predicates/predicate-details.js +0 -103
  55. package/dist/screens/predicates/predicate-list.d.ts +0 -2
  56. package/dist/screens/predicates/predicate-list.js +0 -46
  57. package/dist/screens/workflows/workflow-subscriptions.d.ts +0 -6
  58. package/dist/screens/workflows/workflow-subscriptions.js +0 -81
  59. package/dist/system-apps/events.app.d.ts +0 -2
  60. package/dist/system-apps/events.app.js +0 -8
  61. package/dist/system-apps/knowledge-frames.app.d.ts +0 -2
  62. package/dist/system-apps/knowledge-frames.app.js +0 -9
  63. package/dist/system-apps/knowledge-values.app.d.ts +0 -2
  64. package/dist/system-apps/knowledge-values.app.js +0 -9
  65. package/dist/system-apps/predicates.app.d.ts +0 -2
  66. package/dist/system-apps/predicates.app.js +0 -8
  67. package/dist/ui-defaults/notes-editor.d.ts +0 -7
  68. package/dist/ui-defaults/notes-editor.js +0 -41
  69. package/src/screens/events/cron.ts +0 -74
  70. package/src/screens/events/event-details.tsx +0 -117
  71. package/src/screens/events/event-handlers.tsx +0 -61
  72. package/src/screens/events/event-info.tsx +0 -29
  73. package/src/screens/events/event-list.tsx +0 -104
  74. package/src/screens/events/event-schedule.tsx +0 -130
  75. package/src/screens/knowledge/knowledge-frame-details.bk.tsx +0 -160
  76. package/src/screens/knowledge/knowledge-frame-details.tsx +0 -176
  77. package/src/screens/knowledge/knowledge-frame-list.tsx +0 -49
  78. package/src/screens/knowledge/knowledge-value-details.tsx +0 -181
  79. package/src/screens/knowledge/knowledge-value-list-item.tsx +0 -48
  80. package/src/screens/knowledge/knowledge-value-list.tsx +0 -131
  81. package/src/screens/predicates/predicate-details.tsx +0 -125
  82. package/src/screens/predicates/predicate-list.tsx +0 -50
  83. package/src/screens/workflows/workflow-subscriptions.tsx +0 -58
  84. package/src/system-apps/events.app.ts +0 -7
  85. package/src/system-apps/knowledge-frames.app.ts +0 -8
  86. package/src/system-apps/knowledge-values.app.ts +0 -8
  87. package/src/system-apps/predicates.app.ts +0 -7
  88. 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";
@@ -1,4 +1,4 @@
1
- import { Assistants, IMentionData, PeerEventTypes, PeerTypes, Predicates, rpcClientCalls, Tools, Users, Workflows } from "@peers-app/peers-sdk";
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, events, and more..."
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, events, predicates, types, and users all in one place.
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, IPeerEventHandler, IWorkflow, observable, PeerEventHandlers, runWorkflow, Workflows } from "@peers-app/peers-sdk";
2
- import React, { useState } from "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
- const [handlers] = useState(() => observable([] as IPeerEventHandler[]));
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>
@@ -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, sleep, Subscription } from "@peers-app/peers-sdk";
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
- // below reloading logic is a kludge to deal with different groups having different packages installed
143
- await sleep(250);
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'}`}
@@ -1,4 +1,3 @@
1
1
 
2
- import './notes-editor'
3
2
  import './list-screen'
4
3
  import './markdown-field'
@@ -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,3 +0,0 @@
1
- export declare function getCronErrors(cronExpression: string): string | false;
2
- export declare function getCronExplanation(cronExpression: string): string;
3
- export declare function getNextCronDate(cronExpression: string): Date;
@@ -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,6 +0,0 @@
1
- import React from "react";
2
- interface IProps {
3
- peerEventTypeId: string;
4
- }
5
- export declare const PeerEventDetails: (props: IProps) => React.JSX.Element;
6
- export {};
@@ -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;