@integration-app/react 0.3.2 → 0.3.4
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/index.d.ts +145 -107
- package/dist/index.js +90 -69
- package/dist/index.js.map +1 -1
- package/dist/index.module.d.ts +145 -107
- package/dist/index.module.mjs +87 -69
- package/dist/index.module.mjs.map +1 -1
- package/dist/index.umd.d.ts +145 -107
- package/dist/index.umd.js +91 -70
- package/dist/index.umd.js.map +1 -1
- package/package.json +6 -6
- package/src/_modules/README.txt +1 -0
- package/src/_modules/awesome-debounce-promise.ts +8 -0
- package/src/actions/useAction.ts +4 -2
- package/src/actions/useActionInstance.ts +6 -2
- package/src/app-data-schemas/useAppDataSchema.ts +20 -0
- package/src/app-data-schemas/useAppDataSchemaInstance.ts +43 -0
- package/src/app-data-schemas/useAppDataSchemaInstances.ts +19 -0
- package/src/app-data-schemas/useAppDataSchemas.ts +11 -0
- package/src/app-events/useAppEventSubscription.ts +7 -5
- package/src/app-events/useAppEventType.ts +4 -2
- package/src/contexts/integration-app-context.tsx +6 -0
- package/src/customers/useCustomer.ts +2 -2
- package/src/data-collections/useDataCollectionSpec.ts +5 -2
- package/src/data-links/useDataLinkTable.ts +4 -2
- package/src/data-links/useDataLinkTableInstance.ts +2 -2
- package/src/data-sources/useDataSource.ts +6 -2
- package/src/data-sources/useDataSourceInstance.ts +10 -12
- package/src/field-mappings/useFieldMapping.ts +8 -2
- package/src/field-mappings/useFieldMappingInstance.ts +4 -2
- package/src/flows/useFlow.ts +4 -2
- package/src/flows/useFlowInstance.ts +8 -3
- package/src/flows/useFlowRun.ts +2 -2
- package/src/hooks/useElement.tsx +43 -32
- package/src/hooks/useElements.tsx +6 -0
- package/src/index.tsx +5 -1
- package/src/integrations/useIntegration.ts +4 -2
- package/tsconfig.json +2 -2
- package/rollup.dts.config.mjs +0 -21
- package/src/data-sources/useDataSourceInstanceLocations.ts +0 -41
@@ -2,19 +2,21 @@ import {
|
|
2
2
|
AppEventSubscription,
|
3
3
|
AppEventSubscriptionAccessor,
|
4
4
|
AppEventSubscriptionSelector,
|
5
|
-
|
5
|
+
AppEventSubscriptionUpdateRequest,
|
6
6
|
} from '@integration-app/sdk'
|
7
7
|
import { useElement } from '../hooks/useElement'
|
8
8
|
|
9
9
|
export function useAppEventSubscription(
|
10
|
-
selector: string | AppEventSubscriptionSelector,
|
10
|
+
selector: string | AppEventSubscriptionSelector | undefined,
|
11
11
|
) {
|
12
12
|
const { item: appEventSubscription, ...rest } = useElement<
|
13
13
|
AppEventSubscription,
|
14
|
-
|
15
|
-
|
14
|
+
AppEventSubscriptionUpdateRequest,
|
15
|
+
AppEventSubscriptionUpdateRequest,
|
16
16
|
AppEventSubscriptionAccessor
|
17
|
-
>(selector, (integrationApp) =>
|
17
|
+
>(selector, (integrationApp) =>
|
18
|
+
selector ? integrationApp.appEventSubscription(selector) : undefined,
|
19
|
+
)
|
18
20
|
|
19
21
|
return { appEventSubscription, ...rest }
|
20
22
|
}
|
@@ -6,13 +6,15 @@ import {
|
|
6
6
|
import { AppEventTypeAccessor } from '@integration-app/sdk'
|
7
7
|
import { useElement } from '../hooks/useElement'
|
8
8
|
|
9
|
-
export function useAppEventType(
|
9
|
+
export function useAppEventType(selector: string | undefined) {
|
10
10
|
const { item: appEventType, ...rest } = useElement<
|
11
11
|
AppEventType,
|
12
12
|
UpdateAppEventTypeRequest,
|
13
13
|
CreateAppEventTypeRequest,
|
14
14
|
AppEventTypeAccessor
|
15
|
-
>(
|
15
|
+
>(selector, (integrationApp) =>
|
16
|
+
selector ? integrationApp.appEventType(selector) : undefined,
|
17
|
+
)
|
16
18
|
|
17
19
|
return { appEventType, ...rest }
|
18
20
|
}
|
@@ -1,6 +1,8 @@
|
|
1
1
|
import { IntegrationAppClient } from '@integration-app/sdk'
|
2
2
|
import { createContext, ReactNode, useContext, useMemo } from 'react'
|
3
3
|
|
4
|
+
/* FIXME: strictNullCheck temporary fix */
|
5
|
+
// @ts-expect-error TS(2345): Argument of type 'null' is not assignable to param... Remove this comment to see the full error message
|
4
6
|
const IntegrationAppContext = createContext<IntegrationAppClient>(null)
|
5
7
|
|
6
8
|
IntegrationAppContext.displayName = 'IntegrationAppClientContext'
|
@@ -26,7 +28,11 @@ export const IntegrationAppProvider = ({
|
|
26
28
|
fetchToken,
|
27
29
|
credentials,
|
28
30
|
fetchCredentials,
|
31
|
+
/* FIXME: strictNullCheck temporary fix */
|
32
|
+
// @ts-expect-error TS(2322): Type 'null' is not assignable to type 'string'.
|
29
33
|
apiUri = null,
|
34
|
+
/* FIXME: strictNullCheck temporary fix */
|
35
|
+
// @ts-expect-error TS(2322): Type 'null' is not assignable to type 'string'.
|
30
36
|
uiUri = null,
|
31
37
|
children,
|
32
38
|
}: IntegrationAppProviderProps) => {
|
@@ -7,13 +7,13 @@ import {
|
|
7
7
|
} from '@integration-app/sdk'
|
8
8
|
import { useElement } from '../hooks/useElement'
|
9
9
|
|
10
|
-
export function useCustomer(selector: UserSelector | string) {
|
10
|
+
export function useCustomer(selector: UserSelector | string | undefined) {
|
11
11
|
const { item: customer, ...rest } = useElement<
|
12
12
|
User,
|
13
13
|
UpdateUserRequest,
|
14
14
|
CreateUserRequest,
|
15
15
|
UserAccessor
|
16
|
-
>(selector, (c) => c.customer(selector))
|
16
|
+
>(selector, (c) => (selector ? c.customer(selector) : undefined))
|
17
17
|
|
18
18
|
return { customer, ...rest }
|
19
19
|
}
|
@@ -1,5 +1,5 @@
|
|
1
|
-
import { useIntegrationApp } from 'contexts/integration-app-context'
|
2
1
|
import { DataCollectionSpec, parseDataLocationPath } from '@integration-app/sdk'
|
2
|
+
import { useIntegrationApp } from 'contexts/integration-app-context'
|
3
3
|
import useSWR from 'swr'
|
4
4
|
|
5
5
|
export function useDataCollectionSpec({
|
@@ -19,7 +19,10 @@ export function useDataCollectionSpec({
|
|
19
19
|
dataCollectionKey && integrationId
|
20
20
|
? `/integrations/${integrationId}/data/${dataCollectionKey}`
|
21
21
|
: null,
|
22
|
-
() =>
|
22
|
+
() =>
|
23
|
+
/* FIXME: strictNullCheck temporary fix */
|
24
|
+
// @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message
|
25
|
+
client.integration(integrationId).getDataCollection(dataCollectionKey),
|
23
26
|
)
|
24
27
|
|
25
28
|
return dataCollectionSpec
|
@@ -6,13 +6,15 @@ import {
|
|
6
6
|
} from '@integration-app/sdk'
|
7
7
|
import { useElement } from '../hooks/useElement'
|
8
8
|
|
9
|
-
export function useDataLinkTable(selector: string) {
|
9
|
+
export function useDataLinkTable(selector: string | undefined) {
|
10
10
|
const { item: dataLinkTable, ...rest } = useElement<
|
11
11
|
DataLinkTable,
|
12
12
|
UpdateDataLinkTableRequest,
|
13
13
|
CreateDataLinkTableRequest,
|
14
14
|
DataLinkTableAccessor
|
15
|
-
>(selector, (integrationApp) =>
|
15
|
+
>(selector, (integrationApp) =>
|
16
|
+
selector ? integrationApp.dataLinkTable(selector) : undefined,
|
17
|
+
)
|
16
18
|
|
17
19
|
return { dataLinkTable, ...rest }
|
18
20
|
}
|
@@ -8,7 +8,7 @@ import {
|
|
8
8
|
import { useElement } from '../hooks/useElement'
|
9
9
|
|
10
10
|
export function useDataLinkTableInstance(
|
11
|
-
selector: string | DataLinkTableInstanceSelector,
|
11
|
+
selector: string | DataLinkTableInstanceSelector | undefined,
|
12
12
|
) {
|
13
13
|
const {
|
14
14
|
item: dataLinkTableInstance,
|
@@ -21,7 +21,7 @@ export function useDataLinkTableInstance(
|
|
21
21
|
CreateDataLinkTableInstanceRequest,
|
22
22
|
DataLinkTableInstanceAccessor
|
23
23
|
>(selector, (integrationApp) =>
|
24
|
-
integrationApp.dataLinkTableInstance(selector),
|
24
|
+
selector ? integrationApp.dataLinkTableInstance(selector) : undefined,
|
25
25
|
)
|
26
26
|
|
27
27
|
return {
|
@@ -7,7 +7,9 @@ import {
|
|
7
7
|
} from '@integration-app/sdk'
|
8
8
|
import { useElement } from '../hooks/useElement'
|
9
9
|
|
10
|
-
export function useDataSource(
|
10
|
+
export function useDataSource(
|
11
|
+
selector: string | DataSourceSelector | undefined,
|
12
|
+
) {
|
11
13
|
const {
|
12
14
|
item: dataSource,
|
13
15
|
refresh,
|
@@ -18,7 +20,9 @@ export function useDataSource(selector: string | DataSourceSelector) {
|
|
18
20
|
UpdateDataSourceRequest,
|
19
21
|
CreateDataSourceRequest,
|
20
22
|
DataSourceAccessor
|
21
|
-
>(selector, (integrationApp) =>
|
23
|
+
>(selector, (integrationApp) =>
|
24
|
+
selector ? integrationApp.dataSource(selector) : undefined,
|
25
|
+
)
|
22
26
|
|
23
27
|
async function apply(integrationKeys: string[]) {
|
24
28
|
const result = await accessor?.apply(integrationKeys)
|
@@ -7,14 +7,13 @@ import {
|
|
7
7
|
OpenDataSourceConfigurationOptions,
|
8
8
|
DataSourceInstance,
|
9
9
|
UpdateDataSourceInstanceRequest,
|
10
|
-
DataDirectoryListRequest,
|
11
10
|
DataCollectionListRequest,
|
12
11
|
CreateDataSourceInstanceRequest,
|
13
12
|
} from '@integration-app/sdk'
|
14
13
|
import { useElement } from '../hooks/useElement'
|
15
14
|
|
16
15
|
export function useDataSourceInstance(
|
17
|
-
selector: string | DataSourceInstanceSelector,
|
16
|
+
selector: string | DataSourceInstanceSelector | undefined,
|
18
17
|
) {
|
19
18
|
const {
|
20
19
|
item: dataSourceInstance,
|
@@ -26,7 +25,9 @@ export function useDataSourceInstance(
|
|
26
25
|
UpdateDataSourceInstanceRequest,
|
27
26
|
CreateDataSourceInstanceRequest,
|
28
27
|
DataSourceInstanceAccessor
|
29
|
-
>(selector, (integrationApp) =>
|
28
|
+
>(selector, (integrationApp) =>
|
29
|
+
selector ? integrationApp.dataSourceInstance(selector) : undefined,
|
30
|
+
)
|
30
31
|
|
31
32
|
async function setup() {
|
32
33
|
await accessor?.setup()
|
@@ -86,14 +87,20 @@ export function useDataSourceInstance(
|
|
86
87
|
}
|
87
88
|
|
88
89
|
async function createRecord(request?: DataCollectionCreateRequest) {
|
90
|
+
/* FIXME: strictNullCheck temporary fix */
|
91
|
+
// @ts-expect-error TS(2345): Argument of type 'DataCollectionCreateRequest | un... Remove this comment to see the full error message
|
89
92
|
return accessor?.createRecord(request)
|
90
93
|
}
|
91
94
|
|
92
95
|
async function updateRecord(request?: DataCollectionUpdateRequest) {
|
96
|
+
/* FIXME: strictNullCheck temporary fix */
|
97
|
+
// @ts-expect-error TS(2345): Argument of type 'DataCollectionUpdateRequest | un... Remove this comment to see the full error message
|
93
98
|
return accessor?.updateRecord(request)
|
94
99
|
}
|
95
100
|
|
96
101
|
async function deleteRecord(id?: string) {
|
102
|
+
/* FIXME: strictNullCheck temporary fix */
|
103
|
+
// @ts-expect-error TS(2345): Argument of type 'string | undefined' is not assig... Remove this comment to see the full error message
|
97
104
|
return accessor?.deleteRecord(id)
|
98
105
|
}
|
99
106
|
|
@@ -105,14 +112,6 @@ export function useDataSourceInstance(
|
|
105
112
|
return accessor?.getCollection()
|
106
113
|
}
|
107
114
|
|
108
|
-
async function getLocations(
|
109
|
-
request: DataDirectoryListRequest & {
|
110
|
-
path?: string
|
111
|
-
},
|
112
|
-
) {
|
113
|
-
return accessor?.getLocations(request)
|
114
|
-
}
|
115
|
-
|
116
115
|
return {
|
117
116
|
dataSourceInstance,
|
118
117
|
accessor,
|
@@ -134,7 +133,6 @@ export function useDataSourceInstance(
|
|
134
133
|
updateRecord,
|
135
134
|
deleteRecord,
|
136
135
|
unifiedFieldsToNative,
|
137
|
-
getLocations,
|
138
136
|
getCollection,
|
139
137
|
|
140
138
|
...rest,
|
@@ -7,7 +7,9 @@ import {
|
|
7
7
|
} from '@integration-app/sdk'
|
8
8
|
import { useElement } from '../hooks/useElement'
|
9
9
|
|
10
|
-
export function useFieldMapping(
|
10
|
+
export function useFieldMapping(
|
11
|
+
selector: FieldMappingSelector | string | undefined,
|
12
|
+
) {
|
11
13
|
const {
|
12
14
|
item: fieldMapping,
|
13
15
|
accessor,
|
@@ -18,11 +20,15 @@ export function useFieldMapping(selector: FieldMappingSelector | string) {
|
|
18
20
|
UpdateFieldMappingRequest,
|
19
21
|
CreateFieldMappingRequest,
|
20
22
|
FieldMappingAccessor
|
21
|
-
>(selector, (integrationApp) =>
|
23
|
+
>(selector, (integrationApp) =>
|
24
|
+
selector ? integrationApp.fieldMapping(selector) : undefined,
|
25
|
+
)
|
22
26
|
|
23
27
|
async function apply(integrationKeys: string[]): Promise<FieldMapping[]> {
|
24
28
|
const result = await accessor?.apply(integrationKeys)
|
25
29
|
await refresh()
|
30
|
+
/* FIXME: strictNullCheck temporary fix */
|
31
|
+
// @ts-expect-error TS(2322): Type 'FieldMapping[] | undefined' is not assignabl... Remove this comment to see the full error message
|
26
32
|
return result
|
27
33
|
}
|
28
34
|
|
@@ -9,7 +9,7 @@ import {
|
|
9
9
|
import { useElement } from '../hooks/useElement'
|
10
10
|
|
11
11
|
export function useFieldMappingInstance(
|
12
|
-
selector: string | FieldMappingInstanceSelector,
|
12
|
+
selector: string | FieldMappingInstanceSelector | undefined,
|
13
13
|
) {
|
14
14
|
const {
|
15
15
|
item: fieldMappingInstance,
|
@@ -21,7 +21,9 @@ export function useFieldMappingInstance(
|
|
21
21
|
UpdateFieldMappingInstanceRequest,
|
22
22
|
CreateFieldMappingInstanceRequest,
|
23
23
|
FieldMappingInstanceAccessor
|
24
|
-
>(selector, (integrationApp) =>
|
24
|
+
>(selector, (integrationApp) =>
|
25
|
+
selector ? integrationApp.fieldMappingInstance(selector) : undefined,
|
26
|
+
)
|
25
27
|
|
26
28
|
async function setup() {
|
27
29
|
await accessor?.setup()
|
package/src/flows/useFlow.ts
CHANGED
@@ -7,7 +7,7 @@ import {
|
|
7
7
|
} from '@integration-app/sdk'
|
8
8
|
import { useElement } from '../hooks/useElement'
|
9
9
|
|
10
|
-
export function useFlow(selector: string | FlowSelector) {
|
10
|
+
export function useFlow(selector: string | FlowSelector | undefined) {
|
11
11
|
const {
|
12
12
|
item: flow,
|
13
13
|
accessor,
|
@@ -15,12 +15,14 @@ export function useFlow(selector: string | FlowSelector) {
|
|
15
15
|
...rest
|
16
16
|
} = useElement<Flow, UpdateFlowRequest, CreateFlowRequest, FlowAccessor>(
|
17
17
|
selector,
|
18
|
-
(integrationApp) => integrationApp.flow(selector),
|
18
|
+
(integrationApp) => (selector ? integrationApp.flow(selector) : undefined),
|
19
19
|
)
|
20
20
|
|
21
21
|
async function apply(integrationKeys: string[]): Promise<Flow[]> {
|
22
22
|
const result = await accessor?.apply(integrationKeys)
|
23
23
|
await refresh()
|
24
|
+
/* FIXME: strictNullCheck temporary fix */
|
25
|
+
// @ts-expect-error TS(2322): Type 'Flow[] | undefined' is not assignable to typ... Remove this comment to see the full error message
|
24
26
|
return result
|
25
27
|
}
|
26
28
|
|
@@ -5,10 +5,13 @@ import {
|
|
5
5
|
OpenFlowInstanceConfigurationOptions,
|
6
6
|
RunFlowOptions,
|
7
7
|
UpdateFlowInstanceRequest,
|
8
|
+
CreateFlowInstanceRequest,
|
8
9
|
} from '@integration-app/sdk'
|
9
10
|
import { useElement } from '../hooks/useElement'
|
10
11
|
|
11
|
-
export function useFlowInstance(
|
12
|
+
export function useFlowInstance(
|
13
|
+
selector: string | FlowInstanceSelector | undefined,
|
14
|
+
) {
|
12
15
|
const {
|
13
16
|
item: flowInstance,
|
14
17
|
accessor,
|
@@ -17,9 +20,11 @@ export function useFlowInstance(selector: string | FlowInstanceSelector) {
|
|
17
20
|
} = useElement<
|
18
21
|
FlowInstance,
|
19
22
|
UpdateFlowInstanceRequest,
|
20
|
-
|
23
|
+
CreateFlowInstanceRequest,
|
21
24
|
FlowInstanceAccessor
|
22
|
-
>(selector, (integrationApp) =>
|
25
|
+
>(selector, (integrationApp) =>
|
26
|
+
selector ? integrationApp.flowInstance(selector) : undefined,
|
27
|
+
)
|
23
28
|
|
24
29
|
async function enable() {
|
25
30
|
await accessor?.enable()
|
package/src/flows/useFlowRun.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import { FlowRun, FlowRunAccessor } from '@integration-app/sdk'
|
2
2
|
import { useElement } from '../hooks/useElement'
|
3
3
|
|
4
|
-
export function useFlowRun(id: string) {
|
4
|
+
export function useFlowRun(id: string | undefined) {
|
5
5
|
const {
|
6
6
|
item: flowRun,
|
7
7
|
archive,
|
@@ -9,7 +9,7 @@ export function useFlowRun(id: string) {
|
|
9
9
|
error,
|
10
10
|
loading,
|
11
11
|
} = useElement<FlowRun, never, never, FlowRunAccessor>(id, (integrationApp) =>
|
12
|
-
integrationApp.flowRun(id),
|
12
|
+
id ? integrationApp.flowRun(id) : undefined,
|
13
13
|
)
|
14
14
|
|
15
15
|
return {
|
package/src/hooks/useElement.tsx
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import { IntegrationAppClient } from '@integration-app/sdk'
|
2
|
-
import AwesomeDebouncePromise from 'awesome-debounce-promise'
|
2
|
+
import AwesomeDebouncePromise from '_modules/awesome-debounce-promise'
|
3
3
|
import { useIntegrationApp } from 'contexts/integration-app-context'
|
4
4
|
import useSWR from 'swr'
|
5
5
|
|
@@ -36,7 +36,7 @@ export function useElement<
|
|
36
36
|
selector: any,
|
37
37
|
accessorGenerator: (
|
38
38
|
integrationAppClient: IntegrationAppClient,
|
39
|
-
) => ElementAccessor,
|
39
|
+
) => ElementAccessor | undefined,
|
40
40
|
) {
|
41
41
|
const integrationApp = useIntegrationApp()
|
42
42
|
|
@@ -48,40 +48,44 @@ export function useElement<
|
|
48
48
|
}
|
49
49
|
const elementKey = JSON.stringify(elementKeyData)
|
50
50
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
// When we received updated state of the element,
|
66
|
-
// apply it to the context as long as we didn't make any other changes locally
|
67
|
-
// meanwhile.
|
68
|
-
await mutate(result, false)
|
69
|
-
}
|
70
|
-
} catch (e) {
|
71
|
-
elementState.updatedLocally = true
|
72
|
-
throw e
|
73
|
-
} finally {
|
51
|
+
const elementState: ElementState = elementStateCache.get(elementKey) ?? {
|
52
|
+
updatedLocally: false,
|
53
|
+
savingToServer: false,
|
54
|
+
debouncedPut: AwesomeDebouncePromise(async (data) => {
|
55
|
+
elementState.updatedLocally = false
|
56
|
+
elementState.savingToServer = true
|
57
|
+
|
58
|
+
try {
|
59
|
+
/* FIXME: strictNullCheck temporary fix */
|
60
|
+
// @ts-expect-error TS(2722): Cannot invoke an object which is possibly 'undefin... Remove this comment to see the full error message
|
61
|
+
const result = await accessor?.put(data)
|
62
|
+
if (!elementState.updatedLocally) {
|
63
|
+
// Update savingToSever so that cached versions in each hook are updated when they react to 'mutate' below
|
64
|
+
// Yes, this duplicates the one in `finally`, but by the time that one is called it's too late since `mutate` already did its job.
|
74
65
|
elementState.savingToServer = false
|
66
|
+
// When we received updated state of the element,
|
67
|
+
// apply it to the context as long as we didn't make any other changes locally
|
68
|
+
// meanwhile.
|
69
|
+
await mutate(result, false)
|
75
70
|
}
|
76
|
-
}
|
77
|
-
|
71
|
+
} catch (e) {
|
72
|
+
elementState.updatedLocally = true
|
73
|
+
throw e
|
74
|
+
} finally {
|
75
|
+
elementState.savingToServer = false
|
76
|
+
}
|
77
|
+
}, 500),
|
78
78
|
}
|
79
79
|
|
80
|
-
|
80
|
+
if (!elementStateCache.has(elementKey)) {
|
81
|
+
elementStateCache.set(elementKey, elementState)
|
82
|
+
}
|
81
83
|
|
82
|
-
const accessor = integrationApp
|
84
|
+
const accessor = integrationApp
|
85
|
+
? accessorGenerator(integrationApp)
|
86
|
+
: undefined
|
83
87
|
|
84
|
-
const swrKey = accessor && selector ? `element:${elementKey}` :
|
88
|
+
const swrKey = accessor && selector ? `element:${elementKey}` : undefined // do not fetch anything if selector or accessor is not defined
|
85
89
|
|
86
90
|
const {
|
87
91
|
data: item,
|
@@ -98,12 +102,16 @@ export function useElement<
|
|
98
102
|
const refreshing = isValidating
|
99
103
|
|
100
104
|
async function refresh(): Promise<Element> {
|
105
|
+
/* FIXME: strictNullCheck temporary fix */
|
106
|
+
// @ts-expect-error TS(2322): Type 'Awaited<Element> | undefined' is not assigna... Remove this comment to see the full error message
|
101
107
|
return await mutate()
|
102
108
|
}
|
103
109
|
|
104
110
|
async function put(data: UpdateRequest) {
|
105
111
|
if (!accessor?.put) {
|
106
112
|
throw new Error(
|
113
|
+
/* FIXME: strictNullCheck temporary fix */
|
114
|
+
// @ts-expect-error TS(2531): Object is possibly 'null'.
|
107
115
|
`"put method is not supported for accessor ${accessor.constructor.name}`,
|
108
116
|
)
|
109
117
|
}
|
@@ -113,7 +121,7 @@ export function useElement<
|
|
113
121
|
// We don't know which fields are "innate" for the element and should stay
|
114
122
|
// and which should be removed by put, so we'll do a simple patch.
|
115
123
|
// We'll update data with actual value from the server after put is done.
|
116
|
-
const newLocalData = {
|
124
|
+
const newLocalData: any = {
|
117
125
|
...item,
|
118
126
|
...data,
|
119
127
|
}
|
@@ -137,6 +145,8 @@ export function useElement<
|
|
137
145
|
return
|
138
146
|
}
|
139
147
|
|
148
|
+
/* FIXME: strictNullCheck temporary fix */
|
149
|
+
// @ts-expect-error TS(2345): Argument of type '{ archivedAt: string; }' is not ... Remove this comment to see the full error message
|
140
150
|
await mutate({ ...item, archivedAt: new Date().toISOString() }, false)
|
141
151
|
await accessor?.archive()
|
142
152
|
await mutate()
|
@@ -145,7 +155,7 @@ export function useElement<
|
|
145
155
|
async function create(data: CreateRequest) {
|
146
156
|
if (!accessor?.create) {
|
147
157
|
throw new Error(
|
148
|
-
`"create method is not supported for accessor ${accessor
|
158
|
+
`"create method is not supported for accessor ${accessor?.constructor.name}`,
|
149
159
|
)
|
150
160
|
}
|
151
161
|
|
@@ -160,6 +170,7 @@ export function useElement<
|
|
160
170
|
item,
|
161
171
|
|
162
172
|
loading,
|
173
|
+
|
163
174
|
saving: elementState.updatedLocally || elementState.savingToServer,
|
164
175
|
|
165
176
|
error,
|
@@ -21,11 +21,15 @@ export function useElements<Item>(route: string, query = {}) {
|
|
21
21
|
})}`
|
22
22
|
|
23
23
|
// reached the end
|
24
|
+
/* FIXME: strictNullCheck temporary fix */
|
25
|
+
// @ts-expect-error TS(2531): Object is possibly 'null'.
|
24
26
|
if (previousPageData.items?.length < LIMIT) return null
|
25
27
|
|
26
28
|
return `/${route}?${qs.stringify({
|
27
29
|
...query,
|
28
30
|
limit: LIMIT,
|
31
|
+
/* FIXME: strictNullCheck temporary fix */
|
32
|
+
// @ts-expect-error TS(2531): Object is possibly 'null'.
|
29
33
|
cursor: previousPageData.cursor,
|
30
34
|
})}`
|
31
35
|
}
|
@@ -43,6 +47,8 @@ export function useElements<Item>(route: string, query = {}) {
|
|
43
47
|
const refreshing = isValidating
|
44
48
|
|
45
49
|
async function loadMore() {
|
50
|
+
/* FIXME: strictNullCheck temporary fix */
|
51
|
+
// @ts-expect-error TS(2532): Object is possibly 'undefined'.
|
46
52
|
const hasMoreToLoad = data[size - 1]?.items?.length === LIMIT
|
47
53
|
|
48
54
|
if (hasMoreToLoad) {
|
package/src/index.tsx
CHANGED
@@ -17,7 +17,6 @@ export { useDataSource } from './data-sources/useDataSource.js'
|
|
17
17
|
export { useDataSourceEvents } from './data-sources/useDataSourceEvents.js'
|
18
18
|
export { useDataSourceInstance } from './data-sources/useDataSourceInstance.js'
|
19
19
|
export { useDataSourceInstanceCollection } from './data-sources/useDataSourceInstanceCollection.js'
|
20
|
-
export { useDataSourceInstanceLocations } from './data-sources/useDataSourceInstanceLocations.js'
|
21
20
|
export { useDataSourceInstances } from './data-sources/useDataSourceInstances.js'
|
22
21
|
export { useDataSources } from './data-sources/useDataSources.js'
|
23
22
|
|
@@ -27,6 +26,11 @@ export { useAppEventType } from './app-events/useAppEventType.js'
|
|
27
26
|
export { useAppEventTypes } from './app-events/useAppEventTypes.js'
|
28
27
|
export { useAppEvents } from './app-events/useAppEvents.js'
|
29
28
|
|
29
|
+
export { useAppDataSchema } from './app-data-schemas/useAppDataSchema.js'
|
30
|
+
export { useAppDataSchemas } from './app-data-schemas/useAppDataSchemas.js'
|
31
|
+
export { useAppDataSchemaInstance } from './app-data-schemas/useAppDataSchemaInstance.js'
|
32
|
+
export { useAppDataSchemaInstances } from './app-data-schemas/useAppDataSchemaInstances.js'
|
33
|
+
|
30
34
|
export { useFlow } from './flows/useFlow.js'
|
31
35
|
export { useFlows } from './flows/useFlows.js'
|
32
36
|
|
@@ -6,13 +6,15 @@ import {
|
|
6
6
|
} from '@integration-app/sdk'
|
7
7
|
import { useElement } from '../hooks/useElement'
|
8
8
|
|
9
|
-
export function useIntegration(
|
9
|
+
export function useIntegration(idOrKey: string | undefined) {
|
10
10
|
const { item: integration, ...rest } = useElement<
|
11
11
|
Integration,
|
12
12
|
UpdateIntegrationRequest,
|
13
13
|
CreateIntegrationRequest,
|
14
14
|
IntegrationAccessor
|
15
|
-
>(
|
15
|
+
>(idOrKey, (integrationApp) =>
|
16
|
+
idOrKey ? integrationApp.integration(idOrKey) : undefined,
|
17
|
+
)
|
16
18
|
|
17
19
|
return { integration, ...rest }
|
18
20
|
}
|
package/tsconfig.json
CHANGED
@@ -2,12 +2,12 @@
|
|
2
2
|
"extends": "../tsconfig.json",
|
3
3
|
"compilerOptions": {
|
4
4
|
"target": "es2018",
|
5
|
-
"lib": ["es2019", "
|
5
|
+
"lib": ["es2019", "dom", "dom.iterable"],
|
6
6
|
"strict": true,
|
7
|
+
"strictNullChecks": true,
|
7
8
|
"outDir": "./dist",
|
8
9
|
"baseUrl": "./src",
|
9
10
|
"jsx": "react-jsx",
|
10
|
-
|
11
11
|
"declaration": true,
|
12
12
|
"declarationDir": "./dist/dts"
|
13
13
|
},
|
package/rollup.dts.config.mjs
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
// Flat dts files into one
|
2
|
-
import dts from 'rollup-plugin-dts'
|
3
|
-
|
4
|
-
const config = [
|
5
|
-
// Generate dts files for each bundle from *.d.ts files
|
6
|
-
{
|
7
|
-
input: './dist/dts/index.d.ts',
|
8
|
-
output: [
|
9
|
-
{ file: 'dist/index.d.ts', format: 'commonjs' },
|
10
|
-
{ file: 'dist/index.module.d.ts', format: 'es' },
|
11
|
-
{
|
12
|
-
file: 'dist/index.umd.d.ts',
|
13
|
-
format: 'umd',
|
14
|
-
name: 'integrationAppReact',
|
15
|
-
},
|
16
|
-
],
|
17
|
-
plugins: [dts()],
|
18
|
-
},
|
19
|
-
]
|
20
|
-
|
21
|
-
export default config
|
@@ -1,41 +0,0 @@
|
|
1
|
-
import {
|
2
|
-
DataDirectoryListResponse,
|
3
|
-
DataSourceInstance,
|
4
|
-
} from '@integration-app/sdk'
|
5
|
-
import { useIntegrationApp } from '../contexts/integration-app-context'
|
6
|
-
import useSWR from 'swr'
|
7
|
-
import qs from 'query-string'
|
8
|
-
|
9
|
-
export function useDataSourceInstanceLocations(
|
10
|
-
dataSourceInstance: DataSourceInstance,
|
11
|
-
args?: {
|
12
|
-
path?: string
|
13
|
-
cursor?: string
|
14
|
-
},
|
15
|
-
) {
|
16
|
-
const integrationApp = useIntegrationApp()
|
17
|
-
|
18
|
-
const { data, error, isLoading, mutate } = useSWR<DataDirectoryListResponse>(
|
19
|
-
dataSourceInstance
|
20
|
-
? `${dataSourceInstance.id}/locations?${qs.stringify(args)}`
|
21
|
-
: null,
|
22
|
-
() =>
|
23
|
-
integrationApp
|
24
|
-
.dataSourceInstance(dataSourceInstance.id)
|
25
|
-
.getLocations(args),
|
26
|
-
)
|
27
|
-
|
28
|
-
async function refresh() {
|
29
|
-
return await mutate()
|
30
|
-
}
|
31
|
-
|
32
|
-
const locations = data?.locations ?? []
|
33
|
-
|
34
|
-
return {
|
35
|
-
locations,
|
36
|
-
|
37
|
-
refresh,
|
38
|
-
error,
|
39
|
-
loading: isLoading,
|
40
|
-
}
|
41
|
-
}
|