@peers-app/peers-ui 0.13.6 → 0.14.1

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 (86) 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/search/global-search.js +2 -4
  8. package/dist/screens/settings/settings-page.js +26 -1
  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 +8 -25
  12. package/dist/ui-defaults/index.d.ts +0 -1
  13. package/dist/ui-defaults/index.js +0 -1
  14. package/dist/ui-defaults/list-screen.js +0 -1
  15. package/docs/tabs-ui.md +6 -21
  16. package/package.json +3 -3
  17. package/src/components/left-bar.tsx +0 -12
  18. package/src/components/router.tsx +0 -48
  19. package/src/index.tsx +2 -2
  20. package/src/mention-configs.ts +1 -40
  21. package/src/screens/search/global-search.tsx +2 -6
  22. package/src/screens/settings/settings-page.tsx +37 -0
  23. package/src/screens/workflows/workflow-details.tsx +3 -28
  24. package/src/system-apps/index.ts +8 -20
  25. package/src/ui-defaults/index.ts +0 -1
  26. package/src/ui-defaults/list-screen.tsx +0 -1
  27. package/dist/screens/events/cron.d.ts +0 -3
  28. package/dist/screens/events/cron.js +0 -77
  29. package/dist/screens/events/event-details.d.ts +0 -6
  30. package/dist/screens/events/event-details.js +0 -112
  31. package/dist/screens/events/event-handlers.d.ts +0 -7
  32. package/dist/screens/events/event-handlers.js +0 -84
  33. package/dist/screens/events/event-info.d.ts +0 -5
  34. package/dist/screens/events/event-info.js +0 -19
  35. package/dist/screens/events/event-list.d.ts +0 -2
  36. package/dist/screens/events/event-list.js +0 -107
  37. package/dist/screens/events/event-schedule.d.ts +0 -5
  38. package/dist/screens/events/event-schedule.js +0 -124
  39. package/dist/screens/knowledge/knowledge-frame-details.bk.d.ts +0 -6
  40. package/dist/screens/knowledge/knowledge-frame-details.bk.js +0 -84
  41. package/dist/screens/knowledge/knowledge-frame-details.d.ts +0 -8
  42. package/dist/screens/knowledge/knowledge-frame-details.js +0 -143
  43. package/dist/screens/knowledge/knowledge-frame-list.d.ts +0 -2
  44. package/dist/screens/knowledge/knowledge-frame-list.js +0 -45
  45. package/dist/screens/knowledge/knowledge-value-details.d.ts +0 -6
  46. package/dist/screens/knowledge/knowledge-value-details.js +0 -150
  47. package/dist/screens/knowledge/knowledge-value-list-item.d.ts +0 -5
  48. package/dist/screens/knowledge/knowledge-value-list-item.js +0 -39
  49. package/dist/screens/knowledge/knowledge-value-list.d.ts +0 -3
  50. package/dist/screens/knowledge/knowledge-value-list.js +0 -123
  51. package/dist/screens/predicates/predicate-details.d.ts +0 -6
  52. package/dist/screens/predicates/predicate-details.js +0 -103
  53. package/dist/screens/predicates/predicate-list.d.ts +0 -2
  54. package/dist/screens/predicates/predicate-list.js +0 -46
  55. package/dist/screens/workflows/workflow-subscriptions.d.ts +0 -6
  56. package/dist/screens/workflows/workflow-subscriptions.js +0 -81
  57. package/dist/system-apps/events.app.d.ts +0 -2
  58. package/dist/system-apps/events.app.js +0 -8
  59. package/dist/system-apps/knowledge-frames.app.d.ts +0 -2
  60. package/dist/system-apps/knowledge-frames.app.js +0 -9
  61. package/dist/system-apps/knowledge-values.app.d.ts +0 -2
  62. package/dist/system-apps/knowledge-values.app.js +0 -9
  63. package/dist/system-apps/predicates.app.d.ts +0 -2
  64. package/dist/system-apps/predicates.app.js +0 -8
  65. package/dist/ui-defaults/notes-editor.d.ts +0 -7
  66. package/dist/ui-defaults/notes-editor.js +0 -41
  67. package/src/screens/events/cron.ts +0 -74
  68. package/src/screens/events/event-details.tsx +0 -117
  69. package/src/screens/events/event-handlers.tsx +0 -61
  70. package/src/screens/events/event-info.tsx +0 -29
  71. package/src/screens/events/event-list.tsx +0 -104
  72. package/src/screens/events/event-schedule.tsx +0 -130
  73. package/src/screens/knowledge/knowledge-frame-details.bk.tsx +0 -160
  74. package/src/screens/knowledge/knowledge-frame-details.tsx +0 -176
  75. package/src/screens/knowledge/knowledge-frame-list.tsx +0 -49
  76. package/src/screens/knowledge/knowledge-value-details.tsx +0 -181
  77. package/src/screens/knowledge/knowledge-value-list-item.tsx +0 -48
  78. package/src/screens/knowledge/knowledge-value-list.tsx +0 -131
  79. package/src/screens/predicates/predicate-details.tsx +0 -125
  80. package/src/screens/predicates/predicate-list.tsx +0 -50
  81. package/src/screens/workflows/workflow-subscriptions.tsx +0 -58
  82. package/src/system-apps/events.app.ts +0 -7
  83. package/src/system-apps/knowledge-frames.app.ts +0 -8
  84. package/src/system-apps/knowledge-values.app.ts +0 -8
  85. package/src/system-apps/predicates.app.ts +0 -7
  86. 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
  ];
@@ -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 }) => (
@@ -62,6 +62,7 @@ const AdvancedSettingsTab: React.FC = () => {
62
62
  <ResetDeviceSyncInfos />
63
63
  <DeleteLocalDatabase />
64
64
  <ImportOldPeersData />
65
+ <ResetChangeTracking />
65
66
  </>
66
67
  );
67
68
  };
@@ -325,6 +326,42 @@ const DeleteLocalDatabase: React.FC = () => {
325
326
  );
326
327
  }
327
328
 
329
+ const ResetChangeTracking: React.FC = () => {
330
+ const [busy, setBusy] = useState(false);
331
+ return (
332
+ <div className="mt-4 pt-3 border-top">
333
+ <h6 className="mb-2">Change tracking</h6>
334
+ <small className="text-muted d-block mb-2">
335
+ Clears all change history for the current group and rebuilds it from your current database rows.
336
+ Device sync cursors are cleared; a full resync with peers may follow. Use when debugging sync issues.
337
+ </small>
338
+ <button
339
+ className="btn btn-warning btn-sm"
340
+ disabled={busy}
341
+ onClick={async () => {
342
+ const confirmed = window.confirm(
343
+ 'Reset Change Tracking will clear all change history and rebuild it from scratch. This may take a while. Continue?'
344
+ );
345
+ if (!confirmed) return;
346
+ setBusy(true);
347
+ try {
348
+ await rpcServerCalls.resetChangeTracking();
349
+ await rpcServerCalls.flushDatabases();
350
+ alert('Change tracking reset successfully.');
351
+ } catch (err) {
352
+ console.error('Error while resetting change tracking', err);
353
+ alert('Failed to reset change tracking: ' + ((err as Error).message || String(err)));
354
+ } finally {
355
+ setBusy(false);
356
+ }
357
+ }}
358
+ >
359
+ {busy ? 'Resetting…' : 'Reset Change Tracking'}
360
+ </button>
361
+ </div>
362
+ );
363
+ };
364
+
328
365
  const IMPORT_TOOL_ID = '00mh0wlipkdbeaw8imptsk001';
329
366
 
330
367
  interface IDryRunResult {
@@ -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,32 +47,28 @@ export const systemApps: IAppNav[] = [
55
47
  searchApp,
56
48
  threadsApp,
57
49
 
58
- // Knowledge & Data
59
- knowledgeValuesApp,
60
- knowledgeFramesApp,
61
- predicatesApp,
50
+ // System Tools & Debugging
51
+ networkViewerApp,
52
+ consoleLogsApp,
53
+ dataExplorerApp,
62
54
 
63
55
  // Core Management Apps
64
- variablesApp,
65
56
  typesApp,
66
- assistantsApp,
57
+ variablesApp,
67
58
  toolsApp,
68
59
  workflowsApp,
69
- eventsApp,
60
+ assistantsApp,
70
61
  packagesApp,
62
+ contactsApp,
71
63
  groupsApp,
72
64
  joinGroupApp,
73
- contactsApp,
74
65
 
75
66
  // User & Settings Apps
76
67
  settingsApp,
77
68
  // Mobile Settings (only in React Native)
78
69
  ...(isReactNative() ? [mobileSettingsApp] : []),
79
70
 
80
- // System Tools & Debugging
81
- consoleLogsApp,
82
- networkViewerApp,
83
- dataExplorerApp,
71
+
84
72
  ];
85
73
 
86
74
  // Virtual system package for tabs integration
@@ -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;