@integration-app/react 0.2.0 → 0.2.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.
@@ -4,7 +4,7 @@ import {
4
4
  ElementInstanceAccessor,
5
5
  } from '@integration-app/sdk'
6
6
  import { useEffect, useState } from 'react'
7
- import { useIntegrationApp } from '../contexts/integration-app-context'
7
+ import { useIntegrationApp } from 'contexts/integration-app-context'
8
8
 
9
9
  interface ElementHookResult<
10
10
  ElementInterface,
@@ -88,6 +88,19 @@ export function useElement<
88
88
  const [error, setError] = useState<Error>(null)
89
89
  const [refreshCounter, setRefreshCounter] = useState(0)
90
90
 
91
+ function updateDataWith(newData) {
92
+ if (data !== undefined) {
93
+ setData({
94
+ ...data,
95
+ ...newData,
96
+ })
97
+ }
98
+ }
99
+
100
+ function replaceDataWith(newData) {
101
+ setData(newData)
102
+ }
103
+
91
104
  const selector = (props as any)?.id
92
105
  ? (props as { id: string }).id
93
106
  : (props as SelectorInterface)
@@ -99,7 +112,7 @@ export function useElement<
99
112
  useEffect(() => {
100
113
  setLoading(true)
101
114
  setError(null)
102
- if (integrationApp) {
115
+ if (integrationApp && selector) {
103
116
  accessor
104
117
  .get()
105
118
  .then(setData)
@@ -112,16 +125,21 @@ export function useElement<
112
125
  ),
113
126
  )
114
127
  }
115
- }, [integrationApp, JSON.stringify(props), refreshCounter])
128
+ }, [
129
+ integrationApp,
130
+ JSON.stringify(selector),
131
+ JSON.stringify(props),
132
+ refreshCounter,
133
+ ])
116
134
 
117
135
  async function create(createData: CreateRequest) {
118
- if (data !== undefined) {
119
- setData({
120
- ...data,
121
- ...createData,
122
- })
123
- }
124
- return accessorGenerator(integrationApp)(selector).create(createData)
136
+ // Because `createData` do not contain all critical fields
137
+ // we do not update state with `createData` to avoid problem
138
+ // with missing critical fields like `id`
139
+
140
+ const returnedData = await accessor.create(createData)
141
+ replaceDataWith(returnedData)
142
+ return returnedData
125
143
  }
126
144
 
127
145
  function refresh() {
@@ -130,29 +148,29 @@ export function useElement<
130
148
 
131
149
  async function patch(patch: UpdateRequest) {
132
150
  if (typeof patch === 'object') {
133
- setData({
134
- ...data,
135
- ...(patch ?? {}),
136
- })
137
- return accessorGenerator(integrationApp)(selector).patch(patch)
151
+ updateDataWith(patch ?? {})
152
+
153
+ // TODO: PL-3550
154
+ // PATCH could response with modified fields that do not exist in `patch`
155
+ // but this data could be outdated because of other methods calls
156
+ return accessor.patch(patch)
138
157
  } else {
139
158
  return data
140
159
  }
141
160
  }
142
161
 
143
162
  async function put(putData: CreateRequest) {
144
- if (data !== undefined) {
145
- setData({
146
- ...data,
147
- ...putData,
148
- })
149
- }
150
- return accessorGenerator(integrationApp)(selector).put(putData)
163
+ updateDataWith(putData)
164
+
165
+ // TODO: PL-3550
166
+ // PUT could response with modified fields that do not exist in `patch`
167
+ // but this data could be outdated because of other methods calls
168
+ return await accessor.put(putData)
151
169
  }
152
170
 
153
171
  async function archive() {
154
172
  setData(null)
155
- return accessorGenerator(integrationApp)(selector).archive()
173
+ return accessor.archive()
156
174
  }
157
175
 
158
176
  return {
package/src/index.tsx CHANGED
@@ -3,7 +3,7 @@ export {
3
3
  IntegrationAppProvider,
4
4
  } from './contexts/integration-app-context.js'
5
5
 
6
- export { useConnectorSpec } from './integrations/useConnectionSpec.js'
6
+ export { useConnectorSpec } from './integrations/useConnectorSpec.js'
7
7
  export { useIntegration } from './integrations/useIntegration.js'
8
8
  export { useIntegrations } from './integrations/useIntegrations.js'
9
9
  export { useConnection } from './integrations/useConnection.js'
@@ -11,13 +11,13 @@ export { useConnections } from './integrations/useConnections.js'
11
11
 
12
12
  export { useFieldMapping } from './field-mappings/useFieldMapping.js'
13
13
  export { useFieldMappings } from './field-mappings/useFieldMappings.js'
14
-
15
14
  export { useFieldMappingInstance } from './field-mappings/useFieldMappingInstance.js'
16
15
  export { useFieldMappingInstances } from './field-mappings/useFieldMappingInstances.js'
17
16
 
18
17
  export { useDataSource } from './data-sources/useDataSource.js'
19
18
  export { useDataSources } from './data-sources/useDataSources.js'
20
19
  export { useDataSourceInstance } from './data-sources/useDataSourceInstance.js'
20
+ export { useDataSourceInstances } from './data-sources/useDataSourceInstances.js'
21
21
  export { useDataSourceInstanceCollection as useDataSourceCollection } from './data-sources/useDataSourceInstanceCollection.js'
22
22
  export { useDataSourceInstanceLocations as useDataSourceLocations } from './data-sources/useDataSourceInstanceLocations.js'
23
23
  export { useDataSourceEvents } from './data-sources/useDataSourceEvents.js'
package/rollup.config.mjs DELETED
@@ -1,64 +0,0 @@
1
- // Compile TypeScript files
2
- import typescript from '@rollup/plugin-typescript'
3
- // Convert CommonJS modules to ES6, so they can be included in a Rollup bundle
4
- import commonjs from '@rollup/plugin-commonjs'
5
- // Locate modules using the Node resolution algorithm, for using third party modules in node_modules
6
- import nodeResolve from '@rollup/plugin-node-resolve'
7
- // Flat dts files into one
8
- import dts from 'rollup-plugin-dts'
9
- // Convert .json files to ES6 modules
10
- import rollupJson from '@rollup/plugin-json'
11
-
12
- const config = [
13
- {
14
- input: './src/index.tsx',
15
- output: [
16
- {
17
- // CommonJS bundle
18
- file: './dist/index.js',
19
- format: 'cjs',
20
- sourcemap: true,
21
- },
22
- {
23
- // ESM bundle
24
- file: './dist/index.module.mjs',
25
- format: 'esm',
26
- sourcemap: true,
27
- },
28
- {
29
- // Universal Module Definition, works as `amd`, `cjs` and `iife` all in one
30
- file: './dist/index.umd.js',
31
- format: 'umd',
32
- name: 'integrationAppReact',
33
- sourcemap: true,
34
- },
35
- ],
36
- external: [/node_modules/, '@integration-app/sdk'],
37
- plugins: [
38
- typescript({
39
- tsconfig: 'tsconfig.json',
40
- }),
41
- commonjs(),
42
- nodeResolve({
43
- browser: true,
44
- }),
45
- rollupJson(),
46
- ],
47
- },
48
- // Generate dts files for each bundle from *.d.ts files
49
- {
50
- input: './dist/dts/index.d.ts',
51
- output: [
52
- { file: 'dist/index.d.ts', format: 'commonjs' },
53
- { file: 'dist/index.module.d.ts', format: 'es' },
54
- {
55
- file: 'dist/index.umd.d.ts',
56
- format: 'umd',
57
- name: 'integrationAppReact',
58
- },
59
- ],
60
- plugins: [dts()],
61
- },
62
- ]
63
-
64
- export default config