@journeyapps-labs/reactor-mod-data-browser 3.2.1 → 3.4.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/CHANGELOG.md +23 -0
- package/dist/@types/actions/schema-model/ViewHasManyAction.d.ts +12 -0
- package/dist/@types/core/AbstractConnection.d.ts +12 -0
- package/dist/@types/core/SchemaModelDefinition.d.ts +12 -5
- package/dist/@types/core/query/StandardModelFields.d.ts +4 -0
- package/dist/@types/core/query/query-simple/SimpleQueryFilterState.d.ts +4 -6
- package/dist/@types/core/query/widgets/BelongsToDisplayWidget.d.ts +1 -0
- package/dist/@types/core/query/widgets/ColumnDisplayWidget.d.ts +1 -0
- package/dist/@types/core/query/widgets/IDCellDisplayWidget.d.ts +5 -0
- package/dist/@types/core/query/widgets/PeekRelationshipButton.d.ts +1 -0
- package/dist/@types/core/query/widgets/SmartBelongsToDisplayWidget.d.ts +2 -0
- package/dist/@types/core/query/widgets/SmartColumnWidget.d.ts +8 -3
- package/dist/@types/core/query/widgets/SmartFilterWidget.d.ts +6 -0
- package/dist/@types/core/types/ManualConnection.d.ts +1 -0
- package/dist/@types/entities/ConnectionEntityDefinition.d.ts +2 -1
- package/dist/@types/entities/SchemaModelObjectEntityDefinition.d.ts +2 -1
- package/dist/@types/forms/types/belongs-to-filter.d.ts +10 -0
- package/dist/@types/forms/types/shared/type-handler.d.ts +1 -0
- package/dist/@types/forms/types/shared/ui.d.ts +12 -0
- package/dist/@types/panels/query/QueryPanelFactory.d.ts +2 -2
- package/dist/DataBrowserModule.js +2 -0
- package/dist/DataBrowserModule.js.map +1 -1
- package/dist/actions/schema-model/ViewHasManyAction.js +112 -0
- package/dist/actions/schema-model/ViewHasManyAction.js.map +1 -0
- package/dist/core/AbstractConnection.js +58 -5
- package/dist/core/AbstractConnection.js.map +1 -1
- package/dist/core/SchemaModelDefinition.js +70 -12
- package/dist/core/SchemaModelDefinition.js.map +1 -1
- package/dist/core/query/StandardModelFields.js +3 -0
- package/dist/core/query/StandardModelFields.js.map +1 -1
- package/dist/core/query/query-simple/SimpleQueryColumns.js +37 -12
- package/dist/core/query/query-simple/SimpleQueryColumns.js.map +1 -1
- package/dist/core/query/query-simple/SimpleQueryFilterState.js +35 -7
- package/dist/core/query/query-simple/SimpleQueryFilterState.js.map +1 -1
- package/dist/core/query/query-simple/SimpleQuerySortState.js +0 -1
- package/dist/core/query/query-simple/SimpleQuerySortState.js.map +1 -1
- package/dist/core/query/widgets/BelongsToDisplayWidget.js +1 -1
- package/dist/core/query/widgets/BelongsToDisplayWidget.js.map +1 -1
- package/dist/core/query/widgets/ColumnDisplayWidget.js +13 -2
- package/dist/core/query/widgets/ColumnDisplayWidget.js.map +1 -1
- package/dist/core/query/widgets/IDCellDisplayWidget.js +33 -0
- package/dist/core/query/widgets/IDCellDisplayWidget.js.map +1 -0
- package/dist/core/query/widgets/PeekRelationshipButton.js +23 -16
- package/dist/core/query/widgets/PeekRelationshipButton.js.map +1 -1
- package/dist/core/query/widgets/SmartBelongsToDisplayWidget.js +1 -1
- package/dist/core/query/widgets/SmartBelongsToDisplayWidget.js.map +1 -1
- package/dist/core/query/widgets/SmartColumnWidget.js +7 -14
- package/dist/core/query/widgets/SmartColumnWidget.js.map +1 -1
- package/dist/core/query/widgets/SmartFilterWidget.js +10 -7
- package/dist/core/query/widgets/SmartFilterWidget.js.map +1 -1
- package/dist/core/types/ManualConnection.js +3 -0
- package/dist/core/types/ManualConnection.js.map +1 -1
- package/dist/entities/ConnectionEntityDefinition.js +29 -6
- package/dist/entities/ConnectionEntityDefinition.js.map +1 -1
- package/dist/entities/SchemaModelObjectEntityDefinition.js +15 -14
- package/dist/entities/SchemaModelObjectEntityDefinition.js.map +1 -1
- package/dist/forms/types/attachment-handler.js +1 -0
- package/dist/forms/types/attachment-handler.js.map +1 -1
- package/dist/forms/types/belongs-to-filter.js +57 -0
- package/dist/forms/types/belongs-to-filter.js.map +1 -0
- package/dist/forms/types/boolean-handler.js +34 -1
- package/dist/forms/types/boolean-handler.js.map +1 -1
- package/dist/forms/types/date-handler.js +1 -0
- package/dist/forms/types/date-handler.js.map +1 -1
- package/dist/forms/types/image-handler.js +1 -0
- package/dist/forms/types/image-handler.js.map +1 -1
- package/dist/forms/types/location-handler.js +1 -0
- package/dist/forms/types/location-handler.js.map +1 -1
- package/dist/forms/types/multiple-choice-handler.js +1 -0
- package/dist/forms/types/multiple-choice-handler.js.map +1 -1
- package/dist/forms/types/multiple-choice-integer-handler.js +1 -0
- package/dist/forms/types/multiple-choice-integer-handler.js.map +1 -1
- package/dist/forms/types/number-handler.js +3 -2
- package/dist/forms/types/number-handler.js.map +1 -1
- package/dist/forms/types/single-choice-handler.js +1 -0
- package/dist/forms/types/single-choice-handler.js.map +1 -1
- package/dist/forms/types/single-choice-integer-handler.js +1 -0
- package/dist/forms/types/single-choice-integer-handler.js.map +1 -1
- package/dist/forms/types/text-handler.js +1 -0
- package/dist/forms/types/text-handler.js.map +1 -1
- package/dist/panels/model-json/ModelJsonPanelWidget.js +4 -3
- package/dist/panels/model-json/ModelJsonPanelWidget.js.map +1 -1
- package/dist/panels/query/QueryPanelFactory.js.map +1 -1
- package/dist/panels/query/table-controls/FilterControlsWidget.js +1 -0
- package/dist/panels/query/table-controls/FilterControlsWidget.js.map +1 -1
- package/dist/stores/ConnectionStore.js +15 -3
- package/dist/stores/ConnectionStore.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist-module/bundle.js +51 -35
- package/dist-module/bundle.js.map +1 -1
- package/package.json +4 -4
- package/src/DataBrowserModule.ts +2 -0
- package/src/actions/schema-model/ViewHasManyAction.ts +114 -0
- package/src/core/AbstractConnection.ts +45 -2
- package/src/core/SchemaModelDefinition.ts +90 -14
- package/src/core/query/StandardModelFields.ts +8 -0
- package/src/core/query/query-simple/SimpleQueryColumns.tsx +50 -14
- package/src/core/query/query-simple/SimpleQueryFilterState.ts +42 -9
- package/src/core/query/query-simple/SimpleQuerySortState.ts +0 -1
- package/src/core/query/widgets/BelongsToDisplayWidget.tsx +2 -1
- package/src/core/query/widgets/ColumnDisplayWidget.tsx +17 -4
- package/src/core/query/widgets/IDCellDisplayWidget.tsx +46 -0
- package/src/core/query/widgets/PeekRelationshipButton.tsx +23 -16
- package/src/core/query/widgets/SmartBelongsToDisplayWidget.tsx +3 -0
- package/src/core/query/widgets/SmartColumnWidget.tsx +27 -23
- package/src/core/query/widgets/SmartFilterWidget.tsx +14 -5
- package/src/core/types/ManualConnection.ts +4 -0
- package/src/entities/ConnectionEntityDefinition.tsx +32 -4
- package/src/entities/SchemaModelObjectEntityDefinition.ts +17 -15
- package/src/forms/types/attachment-handler.tsx +1 -0
- package/src/forms/types/belongs-to-filter.tsx +84 -0
- package/src/forms/types/boolean-handler.tsx +46 -2
- package/src/forms/types/date-handler.tsx +1 -0
- package/src/forms/types/image-handler.tsx +1 -0
- package/src/forms/types/location-handler.tsx +1 -0
- package/src/forms/types/multiple-choice-handler.tsx +1 -0
- package/src/forms/types/multiple-choice-integer-handler.tsx +1 -0
- package/src/forms/types/number-handler.tsx +3 -2
- package/src/forms/types/shared/type-handler.ts +1 -0
- package/src/forms/types/single-choice-handler.tsx +1 -0
- package/src/forms/types/single-choice-integer-handler.tsx +1 -0
- package/src/forms/types/text-handler.tsx +1 -0
- package/src/panels/model-json/ModelJsonPanelWidget.tsx +8 -6
- package/src/panels/query/QueryPanelFactory.tsx +2 -2
- package/src/panels/query/table-controls/FilterControlsWidget.tsx +1 -0
- package/src/stores/ConnectionStore.ts +17 -6
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { NumberType, Variable } from '@journeyapps/db';
|
|
1
|
+
import { IntegerType, NumberType, Variable } from '@journeyapps/db';
|
|
2
2
|
import { DialogStore2, FormInput, NumberInput, ioc } from '@journeyapps-labs/reactor-mod';
|
|
3
3
|
import { TypeHandler } from './shared/type-handler';
|
|
4
4
|
import { Condition, SimpleFilter, Statement, StatementMatch } from '../../core/query/filters';
|
|
@@ -68,7 +68,8 @@ class NumberFilterForm extends ConditionalFilterForm<number> {
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
export const numberHandler: TypeHandler = {
|
|
71
|
-
matches: (type) => type instanceof NumberType,
|
|
71
|
+
matches: (type) => type instanceof NumberType || type instanceof IntegerType,
|
|
72
|
+
getTypeLabel: (type) => (type instanceof IntegerType ? 'Integer' : 'Number'),
|
|
72
73
|
encode: async (value: number) => value,
|
|
73
74
|
decode: async (value: number) => value,
|
|
74
75
|
encodeToScalar: async (value: number) => value,
|
|
@@ -9,6 +9,7 @@ export type ScalarValue = string | number | boolean | null;
|
|
|
9
9
|
|
|
10
10
|
export interface TypeHandler<T extends Type = Type, ENCODED = any, DECODED = any> {
|
|
11
11
|
matches: (type: Type) => boolean;
|
|
12
|
+
getTypeLabel?: (type: T) => string;
|
|
12
13
|
generateField: (event: { label: string; name: string; type: T }) => FormInput;
|
|
13
14
|
generateDisplay: (event: {
|
|
14
15
|
label: string;
|
|
@@ -6,6 +6,7 @@ import { Condition, SimpleFilter, Statement } from '../../core/query/filters';
|
|
|
6
6
|
|
|
7
7
|
export const singleChoiceHandler: TypeHandler = {
|
|
8
8
|
matches: (type) => type instanceof SingleChoiceType,
|
|
9
|
+
getTypeLabel: () => 'Single choice',
|
|
9
10
|
encode: async (value: string) => value,
|
|
10
11
|
decode: async (value: string) => value,
|
|
11
12
|
encodeToScalar: async (value: string) => value,
|
|
@@ -6,6 +6,7 @@ import { Condition, SimpleFilter, Statement } from '../../core/query/filters';
|
|
|
6
6
|
|
|
7
7
|
export const singleChoiceIntegerHandler: TypeHandler = {
|
|
8
8
|
matches: (type) => type instanceof SingleChoiceIntegerType,
|
|
9
|
+
getTypeLabel: () => 'Single choice integer',
|
|
9
10
|
encode: async (value: string) => parseInt(value),
|
|
10
11
|
decode: async (value: number) => `${value}`,
|
|
11
12
|
encodeToScalar: async (value: string) => value,
|
|
@@ -150,6 +150,7 @@ class TextFilterForm extends ConditionalFilterForm<string> {
|
|
|
150
150
|
export const textHandler = (context: TypeHandlerContext): TypeHandler<TextType, string, string> => {
|
|
151
151
|
return {
|
|
152
152
|
matches: (type) => type instanceof TextType,
|
|
153
|
+
getTypeLabel: () => 'Text',
|
|
153
154
|
encode: async (value: string) => value,
|
|
154
155
|
decode: async (value: string) => value,
|
|
155
156
|
encodeToScalar: async (value: string) => value,
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { useEffect, useState } from 'react';
|
|
2
|
+
import { JSX, useEffect, useState } from 'react';
|
|
3
3
|
import { observer } from 'mobx-react';
|
|
4
4
|
import styled from '@emotion/styled';
|
|
5
5
|
import { BorderLayoutWidget, LoadingPanelWidget, PanelToolbarWidget } from '@journeyapps-labs/reactor-mod';
|
|
6
|
-
import {
|
|
6
|
+
import { copyTextToClipboard, saveFile } from '@journeyapps-labs/lib-reactor-utils';
|
|
7
7
|
import { ModelJsonPanelModel } from './ModelJsonPanelFactory';
|
|
8
8
|
import { SimpleEditorWidget } from '@journeyapps-labs/reactor-mod-editor';
|
|
9
9
|
|
|
@@ -25,7 +25,7 @@ namespace S {
|
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
export const ModelJsonPanelWidget: React.FC<QueryPanelWidgetProps> = observer((props) => {
|
|
28
|
-
const [json, setJson] = useState(null);
|
|
28
|
+
const [json, setJson] = useState<string | null>(null);
|
|
29
29
|
|
|
30
30
|
useEffect(() => {
|
|
31
31
|
if (!props.model?.model?.data) {
|
|
@@ -39,8 +39,8 @@ export const ModelJsonPanelWidget: React.FC<QueryPanelWidgetProps> = observer((p
|
|
|
39
39
|
}
|
|
40
40
|
}, [props.model.model?.data]);
|
|
41
41
|
|
|
42
|
-
let top
|
|
43
|
-
if (props.model.model) {
|
|
42
|
+
let top: JSX.Element;
|
|
43
|
+
if (props.model.model && json) {
|
|
44
44
|
top = (
|
|
45
45
|
<PanelToolbarWidget
|
|
46
46
|
btns={[
|
|
@@ -67,6 +67,8 @@ export const ModelJsonPanelWidget: React.FC<QueryPanelWidgetProps> = observer((p
|
|
|
67
67
|
label: 'ID',
|
|
68
68
|
value: props.model?.id
|
|
69
69
|
},
|
|
70
|
+
|
|
71
|
+
// @ts-ignore FIXME, this can take null
|
|
70
72
|
props.model?.field
|
|
71
73
|
? {
|
|
72
74
|
label: 'Field',
|
|
@@ -83,7 +85,7 @@ export const ModelJsonPanelWidget: React.FC<QueryPanelWidgetProps> = observer((p
|
|
|
83
85
|
{() => {
|
|
84
86
|
return (
|
|
85
87
|
<BorderLayoutWidget top={top}>
|
|
86
|
-
<S.SimpleEditor lang="application/json" path={`${props.model.model.id}`} text={json} />
|
|
88
|
+
<S.SimpleEditor lang="application/json" path={`${props.model.model.id}`} text={json!} />
|
|
87
89
|
</BorderLayoutWidget>
|
|
88
90
|
);
|
|
89
91
|
}}
|
|
@@ -4,7 +4,7 @@ import { QueryPanelWidget } from './QueryPanelWidget';
|
|
|
4
4
|
import { AbstractQuery } from '../../core/query/AbstractQuery';
|
|
5
5
|
import { ConnectionStore } from '../../stores/ConnectionStore';
|
|
6
6
|
import { observable } from 'mobx';
|
|
7
|
-
import { WorkspaceModelFactoryEvent } from '@projectstorm/react-workspaces-core';
|
|
7
|
+
import { WorkspaceEngine, WorkspaceModelFactoryEvent } from '@projectstorm/react-workspaces-core';
|
|
8
8
|
import { AbstractSerializableQuery } from '../../core/query/AbstractSerializableQuery';
|
|
9
9
|
import { SavedQueryStore } from '../../stores/SavedQueryStore';
|
|
10
10
|
import { AbstractConnection } from '../../core/AbstractConnection';
|
|
@@ -48,7 +48,7 @@ export class QueryPanelModel extends ReactorPanelModel {
|
|
|
48
48
|
};
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
fromArray(data: ReturnType<this['toArray']>, engine) {
|
|
51
|
+
fromArray(data: ReturnType<this['toArray']>, engine: WorkspaceEngine) {
|
|
52
52
|
super.fromArray(data, engine);
|
|
53
53
|
this.current_page = data.current_page || 0;
|
|
54
54
|
}
|
|
@@ -31,6 +31,7 @@ export const FilterControlsWidget: React.FC<FilterControlsWidgetProps> = (props)
|
|
|
31
31
|
return {
|
|
32
32
|
key: field.key,
|
|
33
33
|
title: field.label,
|
|
34
|
+
group: field.group,
|
|
34
35
|
action: async () => {
|
|
35
36
|
await props.simpleQuery.filterState.setupFilterForField(field.key, event.nativeEvent as any);
|
|
36
37
|
props.goToPage?.(0);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AbstractStore, LocalStorageSerializer } from '@journeyapps-labs/reactor-mod';
|
|
2
2
|
import { AbstractConnection, AbstractConnectionSerialized } from '../core/AbstractConnection';
|
|
3
|
-
import {
|
|
3
|
+
import { computed, observable, runInAction, when } from 'mobx';
|
|
4
4
|
import { AbstractConnectionFactory } from '../core/AbstractConnectionFactory';
|
|
5
5
|
import { getDefaultConnectionColor } from '../core/connection-colors';
|
|
6
6
|
|
|
@@ -51,9 +51,18 @@ export class ConnectionStore extends AbstractStore<ConnectionStoreSerialized> {
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
async deserializeConnection(data: AbstractConnectionSerialized) {
|
|
54
|
-
let conn = this._connectionFactories.get(data.factory)
|
|
54
|
+
let conn = this._connectionFactories.get(data.factory)?.generateConnection();
|
|
55
|
+
if (!conn) {
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
|
|
55
59
|
conn.id = data.id;
|
|
56
|
-
|
|
60
|
+
try {
|
|
61
|
+
await conn._deSerialize(data.payload);
|
|
62
|
+
} catch (ex) {
|
|
63
|
+
this.logger.error(`Failed to deserialize connection: [${conn.id}]`, ex);
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
57
66
|
conn.color = data.color || getDefaultConnectionColor(conn.id);
|
|
58
67
|
return conn;
|
|
59
68
|
}
|
|
@@ -66,9 +75,11 @@ export class ConnectionStore extends AbstractStore<ConnectionStoreSerialized> {
|
|
|
66
75
|
return this.deserializeConnection(connSer);
|
|
67
76
|
})
|
|
68
77
|
);
|
|
69
|
-
connections
|
|
70
|
-
|
|
71
|
-
|
|
78
|
+
connections
|
|
79
|
+
.filter((c) => !!c)
|
|
80
|
+
.forEach((c) => {
|
|
81
|
+
this.addConnection(c);
|
|
82
|
+
});
|
|
72
83
|
});
|
|
73
84
|
}
|
|
74
85
|
|